用shell掃描局域網所有IP的MAC地址

pkiek23 9年前發布 | 9K 次閱讀 Shell

#!/bin/bash

#

Ip=ifconfig eth0|awk -F '[:B]' '/inet addr/{print $2}' Mask=ifconfig eth0|awk -F'[:$]' '/inet addr/{print $4}'

for ((i=1;i< =4;i++));do Tmp=echo $Ip|awk -F &quot;.&quot; '{printf $'$i'}' Ip_Bin+=echo &quot;obase=2;$Tmp&quot;|bc|awk '{printf &quot;%08d\n&quot;,$0}' Tmp1=echo $Mask|awk -F &quot;.&quot; '{printf $'$i'}' Mask_Bin+=echo &quot;obase=2;$Tmp1&quot;|bc|awk '{printf &quot;%08d\n&quot;,$0}' done;

Mask_Lng=printf ${Mask_Bin%%0*}|wc -c MyNet=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d") MyBro=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)

echo -e "\n---------- "start at $(date +"%Y-%m-%d %H:%M:%S")"\n">$HOME/ScanIpMac.lst for (( i=$((2#$MyNet+1)); i< $((2#$MyBro)); i++ )); do Tmp=$(echo "obase=2;$i"|bc) Ip=$(for i in {0..3};do test $i != 0 && printf '.'; printf $((2#${Tmp:$i*8:8}));done) ping -n -w 1 -c 1 $Ip > /dev/null 2>&1 if [ $? == 0 ];then Mac=arp -n $Ip|grep $Ip|awk -F &quot; &quot; '{print $3}' echo $Ip" "$Mac |tee -a $HOME/ScanIpMac.lst fi done; echo -e "\n---------- "End at $(date +"%Y-%m-%d %H:%M:%S")>>$HOME/ScanIpMac.lst

exit 0</pre>

 本文由用戶 pkiek23 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!