ARP协议概述
ARP协议出现意义:在通常情况下,当我们访问一台机器的时候,我们一定知道它的IP地址(逻辑地址),而不一定知道它的MAC地址(物理地址)。如果我们不知道物理地址,则不能把网络层的数据包封装成MAC帧,从而无法进行通信。(因为,IP地址只在网络层有效,而MAC地址则在数据链路层有效,不同主机之间的通信数据实际上需要通过数据链路层才能传输)。所以,我们需要一种协议,来进行IP地址和MAC地址之间的转换,才能进行网络层和数据链路层之间数据的传递。
ARP工作原理:在每台主机上,都设置有一个所在局域网上的各个主机和路由器的IP地址和MAC地址的映射表,也称为ARP高速缓存。
在数据发送方,当网络层的数据包要封装成MAC帧时
- 首先在高速缓存中查看是否有该数据包首端的目的地址所对应的MAC地址。
- 若有,则将该MAC地址写入MAC帧中的目的地址中。完成数据包的封装。
- 若没有,ARP协议则在本地局域网上广播一个ARP请求分组。如果没有找到,则不作任何动作;如果找到了IP地址对应的主机,则该主机将自己的MAC地址,发送给请求分组方,之后,通信双方都要修改自己的ARP高速缓存,添加一条记录。
简化示意图
ARP脚本
在linux中,我们可以使用 arp -a命令来查询系统中缓存的ARP表。ARP表用来维护IP地址与MAC地址的一一对应。
动手写一个简单的ARP脚本来抓取同一网络中的主机MAC地址
在linux中创建一个arp.sh文件,写入如下内容
运行,结果如下(截取部分)(注意,运行时,本人的ubuntu需要修改权限,才能运行)
很遗憾,由于我的虚拟机网络设置问题,没有别人和我在同一网络。