Wireshark数据抓包分析之ARP协议

预备知识

1、知识储备

推荐两本好书:
《TCP/IP详解卷1》http://www.pc6.com/softview/SoftView_2564.html
《Wireshark数据包分析实战》http://download.csdn.net/detail/u011538384/5908643

2、什么是ARP

ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。由于OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接通信。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头。但由于发送数据包时只知道目标IP地址,不知道其MAC地址,而又不能跨越第二、三层,所以需要使用地址解析协议。
使用地址解析协议后,计算机可根据网络层IP数据包包头中的IP地址信息对应目标硬件地址(MAC地址)信息,以保证通信的顺利进行。ARP的基本功能就是负责将一个已知的IP地址解析成MAC地址,以便主机间能正常进行通信。

3、ARP工作流程

ARP工作过程分为两个阶段,一个是ARP请求过程,一个是ARP响应过程,该工作流程如下面图示:
在这里插入图片描述
在这里插入图片描述
在上图中,主机PC1的IP地址为10.1.1.X;主机PC2的IP地址为10.1.1.Y。当主机PC1和主机PC2通信时,地址解析协议可以将主机PC2的IP地址(10.1.1.Y)解析成主机PC2的MAC地址。PC1和PC2的详细通信过程如下所示:
(1)当主机PC1想发送数据给主机PC2时,首先在自己的本地ARP缓存表中检查主机PC2匹配的MAC地址。
(2)如果主机PC1在缓存中没有找到相应的条目,它将询问主机PC2的MAC地址,从而将ARP请求帧广播到本地网络上的所有主机。该帧中包括源主机PC1的IP地址和MAC地址。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将会丢弃ARP请求。
(3)主机PC2确定ARP请求中的IP地址与自己的IP地址匹配,则将主机PC1的地址和MAC地址添加到本地缓存表。
(4)主机PC2将包含其MAC地址的ARP回复消息直接发送回主机PC1(这个数据帧是单播)。
(5)当主机PC1收到从主机PC2发来的ARP回复消息时,会将主机PC2的IP和MAC地址添加的自己的ARP缓存表。本机缓存是有生存期的,默认ARP缓存表的有效期是120s。当超过该有效期后,将再次重复上面的过程。主机PC2的MAC地址一旦确定,主机PC1将能向主机PC2发送IP通信了。

4、ARP缓存表

ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的MAC地址。在ARP缓存中的每个表又被称为ARP缓存表。下面将介绍ARP缓存表的由来、构成及生命周期等。
1.ARP缓存表的由来:
ARP协议是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。这时就涉及到一个问题,一个局域网中的电脑少则几台,多则上百台,这么多的电脑之间,如何能记住对方电脑网卡的MAC地址,以便数据的发送呢?所以,这里就有了ARP缓存表。
2.ARP缓存表维护工具——arp命令:
在计算机中,提供了一个ARP命令。该命令用于查询本机ARP缓存中的IP地址和MAC地址的对应关系、添加或删除静态对应关系等。用户也可以通过使用arp命令验证ARP缓存条目的生命周期。ARP命令的语法格式如下所示:
在这里插入图片描述
在以前的Windows系列系统中,都可以直接执行arp -s命令绑定IP地址和MAC地址。但是在Windows 7下,如果不是以管理员身份运行时会提示:“ARP项添加失败:请求的操作需要提示”。但是有时候就算以管理员身份运行也会提示错误信息“ARP项添加失败:拒绝访问。”这时候就需要使用Netsh命令了。
Netsh实用程序是一个外壳,它通过附加的“Netsh帮助DLL”,可以支持多个Windows 2000组件。“Netsh帮助DLL”提供用来监视或配置特定Windows 2000网络组件的其他命令,从而扩展了Netsh的功能。每个“Netsh帮助DLL”都为特定的网络组件提供了一个环境和一组命令。每个环境中都可以有子环境。Netsh命令的语法格式如下所示:

netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [Command] [-f ScriptFile]

以上命令中,各选项含义如下所示:

-a Alias File:指定使用一个别名文件。别名文件包含Netsh命令列表和一个别名版本,所以可以使用别名命令行替换netsh命令。可以使用别名文件将其他平台中更熟悉的命令映射到适当的netsh命令。
-c Context:指定对应于已安装的支持DLL的命令环境。
-r RemoteMachine:指定在远程计算机上运行netsh命令,由名称或IP地址来指定远程计算机。
command:指定要执行的netsh命令。
-f ScriptFil:指定运行ScriptFile文件中所有的netsh命令。

3.ARP缓存表的构成:
在局域网的任何一台主机中,都有一个ARP缓存表。该缓存表中保存中多个ARP条目。每个ARP条目都是由一个IP地址和一个对应的MAC地址组成。这样多个ARP条目就组成了一个ARP缓存表。当某台主机向局域网中另外的主机发送数据的时候,会根据ARP缓存表里的对应关系进行发送。下面以例子的形式介绍,查看、添加、删除ARP缓存条目的方法。

实验目的

1.熟悉并掌握Wireshark的基本操作。
2.通过对Wireshark抓包实例进行分析,进一步加深对常用网络协议的理解。
3.培养学生理论联系实践的研究兴趣。

实验环境

在这里插入图片描述
服务器:windows 系统,IP地址:10.1.1.166
测试者:windows 系统,IP地址:10.1.1.142

实验步骤一

ARP协议属于TCP/IP协议族中的底层协议,与常见的应用层协议不同,其了解程度不是很广泛,要掌握ARP协议,需要先了解其常用命令,通过宏观的命令来知道其功能,在深层次分析其协议报文。为了更好的理解上述核心原理,本实验的步骤如下:
1.通过使用Netsh和ARP命令来绑定IP和MAC地址。
2.在测试环境使用Wireshark抓取ARP数据包。
3.详细分析ARP请求包和ARP应答包。
任务描述:使用Netsh和ARP命令来绑定IP和MAC地址。
1、使用netsh绑定IP和MAC地址:
(1)查看接口的Idx号。执行命令如下所示:
在这里插入图片描述
从输出的结果中可以看到本地连接的Idx为12,Idx号将用在下面命令neighbors后面。
(2)添加IP-MAC地址绑定。执行命令如下所示:
在这里插入图片描述
执行以上命令没有任何输出信息。注意,此处需要使用管理员权限!
(3)使用arp -a查看绑定的ARP条目。执行命令如下所示:
在这里插入图片描述
看到以上输出结果,红色区域表示IP-MAC地址已被绑定。
2、使用ARP进行相关的增加,删除,查看等操作:
(1)使用arp命令查看ARP缓存条目。执行命令如下所示:
在这里插入图片描述
输出信息显示了本机接口为10.1.1.142地址的ARP缓存表。每行表示一个ARP条目。
(2)将IP地址10.1.1.21和MAC地址00-aa-00-62-c6-09添加到缓存记录中。
在这里插入图片描述
执行以上命令后没有任何输出信息。如果要想查看添加的ARP缓存条目,可以使用arp -a命令查看。如下所示:
在这里插入图片描述
从输出的信息中,可以看到手动添加的ARP缓存条目。手动添加的条目默认被添加到第一行,而且手动添加的ARP条目类型为静态。
删除IP地址为10.1.1.21的ARP条目。执行命令如下所示:
在这里插入图片描述
执行以上命令后,接口地址为10.1.1.21的ARP记录将被删除(此处不截图)。如果用户想要清空所有的ARP条目,执行如下所示的命令(或者arp -d *):
在这里插入图片描述
执行以上命令后,整个ARP缓存表将被删除。此时执行arp -a命令查看ARP缓存表,将显示如下所示的信息:
在这里插入图片描述
从输出的信息,可以看到当前该缓存表中没有任何ARP条目。
注意:使用arp命令在Windows和Linux下删除ARP缓存条目的方法有点区别。在Linux下,删除ARP条目时,必须指定接口地址。在Windows下,可以直接执行arp -d命令删除。在Linux下,如果不指定接口时,将会提示“arp: need host name”信息。

实验步骤二

任务描述:使用Wireshark抓取ARP数据包。
1、启动Wireshark,Filter选择ARP协议:
在这里插入图片描述
2、在实验环境下,使用ping命令,ping一台主机:
在这里插入图片描述
3、Wireshark输出ARP信息:
在这里插入图片描述
4、从该界面的Protocol列,可以看到捕获到的数据包都是ARP协议包。其中,33、36帧是ARP请求包;34、37帧是响应包。其他数据包不是实验ping命令所产生,不用在意。

实验步骤三

任务描述:分析ARP请求包和ARP应答包。
1、熟悉ARP报文格式:
在分析ARP协议包之前,先介绍一下它的报文格式,以帮助学生更清楚的理解每个包。ARP请求报文格式如下图所示。
ARP请求协议报文格式:
在这里插入图片描述
该图中每行长度为4个字节,即32位。其中图中蓝色的部分是以太网(指Ethernet II类型)的帧头部。这里共三个字段,分别如下所示:第一个字段是广播类型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目标是网络上的所有主机。第二个字段是源MAC地址,即请求地址解析的的主机MAC地址。第三个字段是协议类型,这里用0X0806代表封装的上层协议是ARP协议。
接下来是ARP协议报文部分其中各个字段的含义如下:

硬件类型:表明ARP协议实现在哪种类型的网络上。
协议类型:表示解析协议(上层协议)。这里一般是0800,即IP。
硬件地址长度:MAC地址长度,此处为6个字节。
协议地址长度:IP地址长度,此处为4个字节。
操作类型:表示ARP协议数据包类型。1表示ARP协议请求数据包,2表示ARP协议应答数据包。
源MAC地址:发送端MAC地址。
源IP地址:表示发送端协议地址(IP地址)。
目标MAC地址:目标端MAC地址。
目标IP地址:表示目的端协议地址(IP地址)。

ARP协议应答协议报文和ARP协议请求协议报文类似。不同的是,此时以太网帧头部的目标MAC地址为发送ARP协议地址解析请求的MAC地址,而源MAC地址为被解析的主机的MAC地址。同时,操作类型字段为2,表示ARP协议应答数据包,目标MAC地址字段被填充为目标MAC地址。
ARP应答协议报文格式:
在这里插入图片描述
2、分析ARP请求包:
捕获的ARP请求包如下图33帧数据:
在这里插入图片描述
从上图可以看到,第一个数据包是一个ARP请求包。用户可以通过在Wireshark的Packet Details面板中,检查以太网头部来确定该包是否是一个真的广播数据包。下面将详细介绍Packet Details面板中的每行信息。如下所示:
在这里插入图片描述

Frame 33: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0

以上内容表示这是第33帧数据包的详细信息。其中,该包的大小为42个字节。

Ethernet II, Src: 02:00:04:78:01:7b (02:00:04:78:01:7b), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

以上内容表示以太网帧头部信息。其中源MAC地址为02:00:04:78:01:7b,目标MAC地址为ff:ff:ff:ff:ff:ff(广播地址)。这里的目标地址为广播地址,是因为主机PC2不知道PC1主机的MAC地址。这样,局域网中所有设备都会收到该数据包。

Address Resolution Protocol (request)

以上内容表示地址解析协议内容,request表示该包是一个请求包。在该包中包括有ARP更详细的字段信息,如下所示:

Address Resolution Protocol (request)   #ARP请求包
    Hardware type: Ethernet (1)   #硬件类型
    Protocol type: IP (0x0800)   #协议类型
    Hardware size: 6   #硬件地址
    Protocol size: 4  #协议长度
    Opcode: request (1)   #操作码。该值为1表示是个ARP请求包
    Sender MAC address: 02:00:04:78:01:7b (02:00:04:78:01:7b)   #发送端MAC地址
    Sender IP address: 10.1.1.142 (10.1.1.142)   #发送端IP地址
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)   #目标MAC地址
    Target IP address: 10.1.1.166(10.1.1.166)   #目标IP地址

通过以上内容的介绍,可以确定这是一个在以太网上使用IP的ARP请求。从该内容中,可以看到发送方的IP(10.1.1.142)和MAC地址(02:00:04:78:01:7b),以及接收方的IP地址(10.1.1.166)。由于目前还不知道目标主机的MAC地址,所以这里的目的MAC地址为00:00:00:00:00:00。
关于以上ARP头部的内容和前面介绍的ARP请求报文格式是相对应的,如下图:
在这里插入图片描述
3、分析ARP响应包:
捕获的ARP相应包如下图34帧数据:
在这里插入图片描述
在上图中的Packet Details面板中,可以看到第二个数据包是一个ARP响应包。该包中的信息与ARP请求包的信息类似。但是也有几处不同。下面将详细介绍,如下所示:

Frame 34: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0

以上信息表示这是第二个数据包的详细信息。其中,该包的大小为60个字节。

EthernetII,Src:02:00:03:56:00:cf(02:00:03:56:00:cf),Dst:02:00:04:78:01:7b(02:00:04:78:01:7b)

以上内容是以太网帧头部的信息。其中,源MAC地址为02:00:03:56:00:cf,目标MAC地址为02:00:04:78:01:7b。从该行信息中,可以知道PC2获取到了PC1主机的MAC地址。这样就可以正常通信了。

Address Resolution Protocol (reply)

以上内容表示这里一个ARP响应包。该包中详细内容如下所示:

Address Resolution Protocol (reply)   #ARP应答包
    Hardware type: Ethernet (1)   #硬件类型
    Protocol type: IP (0x0800)   #协议类型
    Hardware size: 6   #硬件长度
    Protocol size: 4   #协议长度
    Opcode: reply (2)   #操作码为2表示该包是ARP响应包
    Sender MAC address: 02:00:03:56:00:cf (02:00:03:56:00:cf)   #发送方MAC地址
    Sender IP address: 10.1.1.166(10.1.1.166)   #发送方IP地址
    Target MAC address: 02:00:04:78:01:7b (02:00:04:78:01:7b)   #目标MAC地址
    Target IP address: 10.1.1.142 (10.1.1.142)   #目标IP地址

以上ARP响应包中的信息与它的报文格式也是相对应的,如下图所示:
在这里插入图片描述


版权声明:本文为ChuMeng1999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。