ARP协议和ARP脚本抓取MAC地址
ARP协议——地址解析协议。是TCP/IP四层结构中的链路层,是通过IP地址寻MAC地址的一种协议。
ARP协议的工作过程
本地主机需要给另一个局域网中的主机发送数据,但不知道另一个主机的MAC地址,此时采用ARP协议得到对方主机的MAC地址,再进行数据的发送。
首先,在发现本地的ARP缓存表中没有这个IP地址对应的MAC地址的时候,即使用ARP协议,广播一个ARP发送帧向整个局域网,局域网中每个主机都可以接收到这个帧,且因为是广播发送的,所以每哥主机并不会在链路层丢弃此帧,而是继续向上交付,等到IP层和本地计算机的IP地址进行比较之后,发现不是,即丢弃该帧;对应的主机收到此帧后,在IP层解析比较,发现是一个ARP请求帧,且IP地址与本地计算机的IP地址相同,即发送一个ARP回复帧,不同的是,此时ARP回复帧已经不是广播发送了,因为ARP请求帧中含有发送端的IP地址和MAC地址,只需要将其保存在本地的ARP缓存中即可。
TCP/IP四层协议栈数据帧的封装:
功能
OSI模型把网络工作分为七层,而TCP/IP模型分为4层,无论几层,代表的都是对应层之间的联系。
用传输层举例,在A主机和B主机建立连接后,A主机的传输层只会认为已经与B主机的传输层直接相连,忽略了传输层之下的几层协议。所以在IP层确立二者已经连接成功,通过线路层发送数据时,此时链路层保证两个主机的连接。
图片可能更好理解点。
ARP缓存
为了使操作系统ARP的数据请求减少,有效利用网络传输的空间和提高网络传输的效率,每台计算机都有一个ARP缓存,其实也就是一个IP地址和MAC地址一一对应的表。
计算机在需要传输数据时,现在本地的ARP缓存中查询是否有对应的IP–MAC地址,如果有,则直接使用本地的对应关系,直接转发分组;如果没有,则进行ARP请求与回复,并对得到MAC地址储存在本地的ARP缓存中。
计算机在得到一个IP地址与MAC地址对应的数据信息后,就将这个信息储存到ARP缓存中,以便下次使用时不需要再次进行ARP,但是这个储存的时间是有限的,一般为2~10分钟。
Linux中几个ARP命令
arp -a或arp –g:用于查看缓存中的所有项目。
arp -a ip:如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
arp -s Ip 物理地址:可以向ARP缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
arp -d Ip:使用该命令能够人工删除一个静态项目。
ARP脚本抓取对应主机MAC地址
#!/bin/bash
i=0
num=0
while [ $i -le 254 ]
do
if [ $num -eq 20 ];then
sleep 1
num=0
continue
fi
ping -c 1 "196.168.101.$i" & let i++ num++
done
经过从1到254的ping之后,如果能ping成功,则可以获得对方的MAC地址,使用arp -a选项查看本地的arp缓存。我的计算机所在网络环境的输出结果为:
推荐阅读