利用Wireshark分析ARP协议数据包
-
wireshark
:是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前全世界最广泛的网络封包分析软件
什么是ARP协议
协议分析篇第一个要研究的就是ARP协议
。ARP(Address Resolution Protocol,地址解析协议)用于将IP地址解析为物理地址
(MAC地址)。这里之所以需要使用MAC地址,是因为网络中用于连接各个设备的交换机使用了内容可寻址存储器(CAM,Coment Addressable Memory)。该存储器维护的ARP表列出了它在每一个端口的所有连接设备的MAC地址
。
当交换机收到了一个指向特定MAC地址的网络流量,它就会使用这个表,来确定应该使用哪一个端口
发送流量。如果目标MAC地址是未知的,那么这个传输设备会首先在它的缓存中查找这个地址,如果没有找到,那么这个地址就需要通过在网络上额外的通信中解析了。或者我们可以结合下图来说明这个问题:
由上图可见,OSI
模型将网络分为了七层,而IP地址位于第三层,也就是网络层
,MAC地址位于数据链路层,也就是第二层。那么在通过以太网发送IP数据包的时候,需要首先封装第三层和第二层的报头。但由于发送数据包时只知道目标IP地址,不知道其MAC地址,而又不能直接跨越第二、三层,所以需要地址解析协议
。而在使用了ARP协议后,计算机可以按照网络层IP数据包的头部信息,将硬件地址信息(MAC地址)对应起来,以保证通信的顺利进行。ARP协议的基本功能就是将一个已知的IP地址解析成MAC地址
,以便主机之间可以正常地通信。
ARP协议是在RFC826
中定义的。RFC(Request for Comments)是定义各种协议实现标准的官方文档,建议大家在学习网络知识的时候,应当多多参考这些资料,因为它最权威,也最全面。大家可以在RFC Editor的首页中搜索RFC文档,而在本次的课程中,我也给大家提供了RFC826文档,包括pdf格式以及txt格式,供大家学习参考。通过查看RFC826可以知道,其实ARP协议的解析过程只使用了两种数据包:一个ARP请求
和一个ARP响应
,如下图所示:
其详细工作原理为:
- (1)当主机A想要给主机B发送数据时,主机A会首先在自己的本地ARP缓存表中检查与主机B相匹配的MAC地址。
- (2)如果主机A在自己的缓存表中没找到主机B的相关条目,那么它就要想办法获取主机B的MAC地址。这就需要将ARP的请求帧广播到本地网络上的所有主机中。这个请求帧包含有主机A的IP地址和MAC地址,以及主机B的IP地址。网络中凡是收到请求帧的主机都会检查自己的IP地址是否与请求地址一致,如果不一致,则会丢弃该请求帧。对于上图来说,主机C和主机D会丢弃主机A发出的请求帧。
- (3)主机B确定ARP请求中的IP地址和自己的IP地址一致,那么就会将主机A的IP地址和MAC地址添加到本地的缓存列表中。
- (4)主机B将包含有自己MAC地址的ARP响应消息直接回复给主机A(单播)。
- (5)主机A收到从主机B发来的ARP响应消息后,会将主机B的IP地址和MAC地址添加到自己的ARP缓存表中。接下来,主机A就可以向主机B发送消息了。
如果想要查看ARP缓存表,可以打开cmd,输入“arp -a”
:
输出的信息显示了本机接口为172.21.79.153地址的ARP缓存表
。每行表示一个ARP条目。本地的缓存是有生命周期的,默认的ARP缓存表的有效期是120秒
,过期后,需要重复上述过程。
可以看到,第1个数据包是一个ARP请求
。我们可以通过Packet Details面板,检查以太网头部信息来确定这个数据包是不是一个真的广播数据包。
首先在Frame帧
中,可以知道该数据包的大小为42个字节。
其次检查一下Ethernet
部分的内容,会发现这个数据包目的地址是ff:ff:ff:ff:ff:ff,这是一个广播地址
,说明当前数据包会被广播到当前网段中的所有设备上。而这个数据包中以太网的源地址就是本机的MAC地址
。
接下来展开ARP请求的头部信息。按照顺序依次为硬件类型、协议类型、硬件地址长度、协议长度、操作码(该值为1,表示这是一个ARP请求包)、发送方的MAC和IP地址,以及接收方的IP地址。而我们想要获取的目标MAC地址
还是未知的,因此就以全0的形式显示。
下面我们研究一下第二个数据包,来看看ARP的响应:
其实ARP响应的数据包和ARP请求的数据包很相像。不同之处表现在以下几点:首先,用于响应的数据包的操作码
(Opcode)现在是2,表明这是一个用于响应
的数据包;其次,发送方的MAC地址和IP地址变成了目标
MAC地址和IP地址;最后,响应数据包中的内容都是可用的,也就是说我们已经获取了192.168.0.1主机的MAC地址,即00:13:46:0b:22:ba,那么接下来就可以正常通信了。
最后我们再讨论一个关于免费ARP(gratuitous ARP)的例子。由于网络中一个设备的IP地址是可以改变的,而MAC地址不会改变
。那么一旦出现IP地址改变的情况,网络主机中缓存的IP和MAC地址映射就不再有效了。那么为了防止由于映射失败造成的通信错误,免费的ARP请求会被发送到网络中,强制所有收到它的设备使用新的IP以及MAC地址映射来更新缓存。通常,它发生在系统引导期间进行接口配置
或IP地址出现变化
的时候。
现在来分析一个免费的arp包
首先我们可以看到这个数据包是以广播
的形式发出的,这样一来,网络上的所有主机都能收到它。接下来我们可以发现,发送方的IP地址和接收方的IP地址是一致的。网络中的其它主机收到这个数据包之后,它会让这些主机使用新的IP和MAC地址映射关系来更新它们的ARP表
。由于这个ARP数据包是源主机未经请求主动发出的,并导致了目标主机更新了ARP缓存,所以称之为免费的ARP
。 当然也以进行rpc欺骗 发送虚假mac 信息