利用ARP协议根据IP地址获取MAC地址

4,442 阅读2分钟

ARP协议

ARP 是"Address Resolution Protocol"的缩写,译为“地址解析协议”。
它是根据 IP 地址获取物理地址的一个 TCP/IP 协议。
借鉴:ARP协议的工作机制详解

常用命令:

arp -a:可以查看缓存的arp信息。Linux可以arp -n也可直观查看。

  1. windows的效果如下: windows-arp.png

  2. MacOS/Linux查看效果如下: mac-arp.png

脚本工具: 获取指定IP的MAC地址

指定文件的IP的文本如下:

192.168.20.1
192.168.20.100
192.168.20.101
192.168.20.102
192.168.20.103
192.168.20.105

bash脚本如下:

#/bin/bash
# 脚本说明:根据IP地址获取mac地址
# windows请在gitbash终端执行可用。
FILE_NAME="$0"
TXT_FILE_NAME="${FILE_NAME%.sh}.txt"
TEMP_FILE_NAME="${FILE_NAME%.sh}.out.temp"
OUT_FILE_NAME="${FILE_NAME%.sh}.out"

# 读取指定IP地址
for line in `cat $TXT_FILE_NAME`
do
    {
        echo "即将ping:  $line"
        if [ ${#line} -ne 0 ]
        then
            ping -c 1 $line > /dev/null 2>&1
        fi;
    }&
done
# 自定义处理ip 和mac地址 的关系
function handle_ip_mac(){
    ip=$1;
    mac=$2;
    if [ ${#mac} -eq 17 ] || [ ${#mac} != 'FF-FF-FF-FF-FF-FF-FF' ]
    then
        echo "自定义处理函数: $ip 对应地址是 $mac";
    else
        echo "自定义处理函数: $ip 获取mac地址失败! $mac"
    fi;
    
}
# 输出mac地址
SYS_NAME=`uname`
echo "当前系统名uname:$SYS_NAME"
if [[ $SYS_NAME =~ 'MINGW' ]]
then
    echo '当前系统判定为WINDOWS!'
    arp -a > $OUT_FILE_NAME
    echo "IP-MAC匹配关系结果已经保存到:$OUT_FILE_NAME"
    while read -r line
    do
        array=($line);
        ip=${array[0]};
        mac=${array[1]};
        handle_ip_mac $ip $mac;
    done < $OUT_FILE_NAME;
else
    # mac 版本的下的 Darwin
    echo '当前系统判定为*inux!'
    arp -a > $TEMP_FILE_NAME
    cat $TEMP_FILE_NAME | awk '{split($0,ip,"[()]");printf ip[2] " ";a=index($0," at ");b=index($0," on ");print substr($0,a+4,b-a-4)}' > "$OUT_FILE_NAME"
    echo "IP-MAC匹配关系结果已经保存到:$OUT_FILE_NAME"
    while read -r line
    do
        array=($line)
        ip=${array[0]}
        mac=${array[1]}
        handle_ip_mac $ip $mac;
    done < $OUT_FILE_NAME;
fi;
echo "Done!!! 脚本执行完成,详细结果可以查看 $OUT_FILE_NAME";

执行结果.png 执行结果如下:

192.168.20.1 8c:f2:28:11:76:56
192.168.20.100 f8:62:14:46:e6:5f
192.168.20.101 3c:22:fb:47:a5:ed
192.168.20.102 94:65:2d:20:d7:e6
192.168.20.103 54:9f:13:c5:82:1c
192.168.20.105 (incomplete)
192.168.20.255 ff:ff:ff:ff:ff:ff
224.0.0.251 1:0:5e:0:0:fb
224.0.0.252 1:0:5e:0:0:fc
239.255.255.250 1:0:5e:7f:ff:fa

小结

  1. 返回的结果是(incomplete)
    查看ARP表项时,如果MAC ADDRESS字段显示为“Incomplete”,表示当前表项为临时ARP表项,临时ARP表项无法指导报文转发。

  2. 返回的结果是ff:ff:ff:ff:ff:ff
    arp欺骗,具体还不明白!