ARP协议
ARP 是"Address Resolution Protocol"的缩写,译为“地址解析协议”。
它是根据 IP 地址获取物理地址的一个 TCP/IP 协议。
借鉴:ARP协议的工作机制详解
常用命令:
arp -a:可以查看缓存的arp信息。Linux可以arp -n也可直观查看。
-
windows的效果如下:
-
MacOS/Linux查看效果如下:
脚本工具: 获取指定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";
执行结果如下:
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
小结
-
返回的结果是
(incomplete)
查看ARP表项时,如果MAC ADDRESS字段显示为“Incomplete”,表示当前表项为临时ARP表项,临时ARP表项无法指导报文转发。 -
返回的结果是
ff:ff:ff:ff:ff:ff
arp欺骗,具体还不明白!