本文将对ARP报文加以分析,让大家对ARP报文有个初步的了解。


1 : arp 报文格式



python 免费arp报文 arp报文解析_mac地址


图2:arp request报文

python 免费arp报文 arp报文解析_IP_02



图3:arp response报文

python 免费arp报文 arp报文解析_python 免费arp报文_03


由图2、图3可以看出,ARP报文是封装在以太网帧里面的,下面我们就来分析一下具体内容。
先说ARP报文的格式:
①硬件类型:指明硬件的类型,以太网是1。
②协议类型:指明发送者映射到数据链路标识的网络层协议的类型;IP对应0x0800。
③硬件地址长度:也就是MAC地址的长度,单位是字节,这里是6。
④协议地址长度:网络层地址的长度,即IP地址长度,单位是字节,这里为4。
⑤操作:指明是ARP请求(1)还是ARP应答(2),这个可以在图2和图3中相应位置看出。
⑥剩下的字段都很简单啦,不具体说了。

接下来我们来具体分析一下图2和图3的内容,在数据链路层,或者说在一个局域网内两台主机的互相通信是通过硬件地址(MAC地址)来完成的,在主机A(在图2中对应IP为192.168.1.122的主机)刚开启时,它的ARP缓存是空的,如果主机A想和局域网中的主机B(对应IP为192.168.1.1)通信,它要知道主机B的MAC地址才可以,这里主机A已经知道主机B的IP地址了,那么怎么才能知道主机B的MAC地址呢,这也就是arp协议要完成的内容。
arp的作用是:从ip地址到mac地址的一个转换,大家看图2,主机A向同一个局域网内的所有主机(即广播)发送arp请求报文:我的IP是192.168.1.122,我的mac地址是00-E0-B0-E3-1C-B5,请问IP地址为192.168.1.1的MAC地址是什么?
局域网中所有主机都会都到这个arp请求报文,但ip地址是非192.168.1.1的主机发现这份报文不是发给自己的,于是就丢弃掉这份报文,而主机192.168.1.1检测到这份arp请求报文是发给它的,所以它就发送回一个arp应答报文,具体内容见图3。
要注意的是,arp应答报文不是广播,是单播回给192.168.1.122的,主机192.168.1.122收到这份arp应答报文后,双方就可以通信了。
当然,这里省略了很多细节方面,大家可以查阅下相关的资料。

在这里我说下arp欺骗的内容,相信大家会很感兴趣,其实说穿了,arp欺骗很简单:
arp欺骗分为主机欺骗和网关欺骗,一般来说,我们的网络环境都是N台主机通过网关的NAT功能出去连接Internet的。也就是说所有的数据包都要流经网关。
现在假设有网关、主机A和主机B,主机A是欺骗者,而主机B当然就是被欺骗者了。

先说主机欺骗,主机A通过某种手段向主机B发送ARP报文:小样儿的你听好了,网关的MAC地址是xx-xx-xx-xx-xx-xx,而这个地址是主机A随便写的一个mac地址,主机B听到了这个消息后,以后所有的报文都忘这个虚假的地址发送,因为这个地址本身就是不存在的,所以主机B理所当然得也就找不到网关了,现象就是掉线啦!

再说网关欺骗,过程和上面的也差不多,不过主机A是把报文扔给网关了,内容就是:老大啊,主机B的mac地址是yy-yy-yy-yy-yy-yy,这个地址当然也是不存在的啦,那网关听信了主机A的虚假内容,于是从Internet发来给主机B的所有数据包,网关都发往这个虚假的yy-yy-yy-yy-yy-yy,而主机B还在那边张着嘴等着网关送给它的报文呢,不过网关可不管这个,一直把主机A告诉给它的虚假地址当作是主机B的地址,于是乎,可怜的主机B又断线了!