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

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_reqeuest

一、广播的ARP request包以及replay包:

正常情况下的request包和reply包:

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_reqeuest_02

1Request

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_ARP_03

由于主机(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;

 

2Reply:此包将自己的MAC  3c:d1:6e:09:e4:a6封装到ARP报文然后回复给请求方,reply包的字段含义跟requset差不多,其中op为:reply(2):

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_ARP_04

上述replay包的详细数据如下:

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_IP_05

二、特殊request包分析

再次进行抓包分析,过滤出一部分ARP包如下:

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_硬件地址_06

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_ARP_07

其中第五个分组的Sender IP address是:0.0.0.0。为什么广播时的发送端IP是0.0.0.0而不是192.169.0.2?

可能是因为网卡还处于启动状态正在进行IP冲突检测,IP地址将其理解为不存在然后就以0.0.0.0代替IP来组装ARP请求包。此问题还在求证中……

   另外分组33request包的Target MAC是一个非全0的正常的MAC地址;

但正常情况下,request包的Target MAC应该是全0的,因为这是需要通过请求来获取。但是当ARP缓存表项的生存时间到了的时候,后台进程就会将其移除。

如果arp表中的表项生存时间一到,直接删除此表项,则还需要重新发送广播帧来请求目的mac地址,这样做因为广播而打扰其他站点。考虑到如果以太网中的主机很多,那么每台机器中的arp表中的表项也会很多,如果每条表项生存时间一到就直接删除表项,那么局域网中的广播数量会很多,这会在一定程度上影响网络的利用率,因此在删除表项之前,直接向该表项的目的地址发送一条请求报文来确认。如果短时间内没有收到回复,则说明此mac地址的拥有者已经改变了ip地址,或者已经离开了此以太网,直接删除此表项即可。

   所以就会有一部分的request包的Target MAC是非全0,如下面的分组33所示,而分组34这是33的reply包。

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_ARP_08

对抓包点处获取的OSPF Hello报文进行分析 抓包分析arp_ARP_09

三、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通信了。