【发布时间】:2021-11-05 16:45:22
【问题描述】:
我一直在编写一个小型项目脚本,它会扫描我的网络以查找新的 MAC 地址,并在我的网络上存在不熟悉的设备时通知我。
我已经介绍了在未知 MAC 地址(如果有)上自动执行操作系统扫描的功能。但是,我只能通过将我的 ping 扫描的 grepped 部分保存到一个临时文件 (tmpmac.txt) 中,然后将该文件中的 IP 地址 grep 到一个附加的临时文件 (tmpip.txt) 中来使其工作,如-O Nmap 选项需要 IP 才能扫描:
nmap -sn 192.168.0.0/24 | grep -B 2 "$address" > /home/pi/tmpmac.txt
cat /home/pi/tmpmac.txt | grep "Nmap" | awk {'print $5'} > /home/pi/tmpip.txt
unknown_mac=$( cat /home/pi/tmpip.txt )
nmap -O $unknown_mac | tee -a /home/pi/mac_scan.log | mutt -s "OS Scan for $address" XXXXXXXX@gmail.com
整个脚本:
echo "<<---AUTOMATIC SCAN--->>" >>/home/pi/mac_scan.log
date >>/home/pi/mac_scan.log
nmap -sn 192.168.0.0/24 | grep "MAC" | awk '{print $3}'| sort > /home/pi/arp.txt
readarray -t mac </home/pi/arp.txt
foundall=true
for address in "${mac[@]}"; do
if ! grep -Fxq "$address" /home/pi/arp_table.txt;
then
echo "WARNING: $address is an unknown device on the network" >> /home/pi/mac_scan.log
nmap -sn 192.168.0.0/24 | grep -B 2 "$address" | tee -a /home/pi/mac_scan.log | mutt -s "Unknown Devices on Network" XXXXXXX@yahoo.com
echo ""
echo "MAC SEARCH RESULTS: $address" >> /home/pi/mac_scan.log
nmap -sn 192.168.0.0/24 | grep -B 2 "$address" > /home/pi/tmpmac.txt
cat /home/pi/tmpmac.txt | grep "Nmap" | awk {'print $5'} > /home/pi/tmpip.txt
unknown_mac=$( cat /home/pi/tmpip.txt )
nmap -O $unknown_mac | tee -a /home/pi/mac_scan.log | mutt -s "OS Scan for $address" XXXXXXXX@yahoo.com
foundall=false
fi
done
[[ "${foundall}" == 'true' ]] && echo "All Devices are familiar on your network" | tee -a /home/pi/mac_scan.log
当前形式的脚本执行它应有的方式,但我很好奇是否有更优雅的方式来实现这一点。
【问题讨论】: