ARP 抓包分析
首先,了解ARP报文格式:
字段 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
含义 | 以太网目的地址 | 以太网源地址 | 帧类型 | 硬件类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | op | 发送端以太网地址 | 发送端IP地址 | 目的以太网地址 | 目的IP地址 |
长度 | 6 | 6 | 2 | 2 | 2 | 1 | 1 | 2 | 6 | 4 | 6 | 4 |
字段1:是ARP请求的目的以太网地址,全1时代表广播地址,目的是让局域网上所有主机都收到ARP请求包;
字段2:发送ARP请求的MAC地址;
字段3:以太网帧类型,表示的是后面大数据类型,ARP请求和ARP应答包的这个值都为0X0806;
字段4:表示硬件地址类型,硬件地址不止以太网一种,以太网类型是此值为1;
字段5:表示要映射的协议地址类型,对IPv4地址进行映射时,此值为0X0800;
字段6和7:分别表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节;
字段8:表示操作类型字段,值为1表示进行ARP请求,值为2表示ARP应答,值为3表示RARP请求,值为4表示RARP应答;
字段9:表示发送端ARP请求或应答的硬件地址也就是源MAC地址,与2相同;
字段10:表示发送ARP请求或应答的IP地址;
字段11和12:分别表示目的端的硬件地址和协议地址。
前3个字段14个字节是以太网的首部,后面9个字段28个字节是ARP请求/应答的信息。
先查看一下本地主机的IP和MAC分别是:192.169.0.2和74:d4:35:c1:8b:bb
一、广播的ARP request包以及replay包:
正常情况下的request包和reply包:
1**、Request包**:
由于主机(192.169.0.2)的ARP缓存中没有目的主机(192.169.0.1)的MAC缓存映射,所以主机直接将ARP请求进行广播;其相关字段分别是:
1、以太网目的地址(Destination):ff:ff:ff:ff:ff:ff ,此地址全为1,是广播地址;
2、以太网源地址(Source):74:d4:35:c1:8b:bb
3、帧类型(Type):ARP(0x0806);
4、硬件类型(Hardware):Ethernet(1);
5、协议类型(Protocol):IPv4(0x0800);
6、硬件地址长度(Hardware size):6
7、协议地址长度(Protocol):4
8、Opcode:操作类型为ARP请求request(1)
9、发送端MAC地址(Sender MAC address):74:d4:35:c1:8b:bb
10、发送端IP(Sender IP address):192.169.0.2
11、目的MAC地址(Target MAC address):00:00:00:00:00:00 (此地址需要根据目的IP去获取,在请求报文中为全0);
12、目的IP地址(Target IP address):192.169.0.1;
2**、Reply包**:此包将自己的MAC 3c:d1:6e:09:e4:a6封装到ARP报文然后回复给请求方,reply包的字段含义跟requset差不多,其中op为:reply(2):
上述replay包的详细数据如下:
二、特殊request包分析
再次进行抓包分析,过滤出一部分ARP包如下:
其中第五个分组的Sender IP address是:0.0.0.0。为什么广播时的发送端IP是0.0.0.0而不是192.169.0.2?
可能是因为网卡还处于启动状态正在进行IP冲突检测,IP地址将其理解为不存在然后就以0.0.0.0代替IP来组装ARP请求包。此问题还在求证中……
另外分组33的request包的Target MAC是一个非全0的正常的MAC地址;
但正常情况下,request包的Target MAC应该是全0的,因为这是需要通过请求来获取。但是当ARP缓存表项的生存时间到了的时候,后台进程就会将其移除。
如果arp表中的表项生存时间一到,直接删除此表项,则还需要重新发送广播帧来请求目的mac地址,这样做因为广播而打扰其他站点。考虑到如果以太网中的主机很多,那么每台机器中的arp表中的表项也会很多,如果每条表项生存时间一到就直接删除表项,那么局域网中的广播数量会很多,这会在一定程度上影响网络的利用率,因此在删除表项之前,直接向该表项的目的地址发送一条请求报文来确认。如果短时间内没有收到回复,则说明此mac地址的拥有者已经改变了ip地址,或者已经离开了此以太网,直接删除此表项即可。
所以就会有一部分的request包的Target MAC是非全0的,如下面的分组33所示,而分组34这是33的reply包。
三、ARP工作过程分析:
结合上述抓包分析数据以及相关知识,对ARP工作过程进行分析:
主机A的IP地址为192.169.0.2,MAC地址为 74:d4:35:c1:8b:bb;主机B的IP地址为192.169.0.1,MAC地址为 3c:d1:6e:09:e4:a6;当主机A要与主机B通信时,ARP可以根据主机B的IP地址(192.169.0.1)解析成主机B的MAC地址,以下为工作流程:
首先,根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.169.0.1。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
如果主机A在ARP缓存中没有找到映射,它将询问192.169.0.1的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址以及主机B的IP地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查主机B的IP地址是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
如果主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。