实验十四:Wireshark数据抓包分析之ARP协议
目录
一、实验目的及要求
二、实验原理
1、什么是ARP
2、ARP工作流程
3、ARP缓存表
三、实验环境
四、实验步骤及内容
实验步骤一
1、使用netsh绑定IP和MAC地址
2、使用ARP进行相关的增加,删除,查看等操作
实验步骤二
实验步骤三
1、熟悉ARP 报文格式
2、分析ARP请求包
3、分析ARP响应包
五、实验总结
六、分析与思考
1、熟悉并掌握Wireshark的基本操作。
2、通过对Wireshark抓包实例进行分析,进一步加深对常用网络协议的理解。
3、培养学生理论联系实践的研究兴趣。
ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。由于OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接通信。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头。但由于发送数据包时只知道目标IP地址,不知道其MAC地址,而又不能跨越第二、三层,所以需要使用地址解析协议。
使用地址解析协议后,计算机可根据网络层IP数据包包头中的IP地址信息对应目标硬件地址(MAC地址)信息,以保证通信的顺利进行。ARP的基本功能就是负责将一个已知的IP地址解析成MAC地址,以便主机间能正常进行通信。
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 通信了。
ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的MAC地址。在ARP缓存中的每个表又被称为ARP缓存表。下面将介绍ARP缓存表的由来、构成及生命周期等。
3.1.ARP缓存表的由来
ARP协议是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。这时就涉及到一个问题,一个局域网中的电脑少则几台,多则上百台,这么多的电脑之间,如何能记住对方电脑网卡的MAC地址,以便数据的发送呢?所以,这里就有了ARP缓存表。
3.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]
以上命令中,各选项含义如下所示:
q -a Alias File:指定使用一个别名文件。别名文件包含Netsh命令列表和一个别名版本,所以可以使用别名命令行替换netsh命令。可以使用别名文件将其他平台中更熟悉的命令映射到适当的netsh命令。
q -c Context:指定对应于已安装的支持DLL的命令环境。
q -r RemoteMachine:指定在远程计算机上运行netsh命令,由名称或IP地址来指定远程计算机。
command:指定要执行的netsh命令。
-f ScriptFil:指定运行ScriptFile文件中所有的netsh命令。
3.3ARP缓存表的构成
在局域网的任何一台主机中,都有一个ARP缓存表。该缓存表中保存中多个ARP条目。每个ARP条目都是由一个IP地址和一个对应的MAC地址组成。这样多个ARP条目就组成了一个ARP缓存表。当某台主机向局域网中另外的主机发送数据的时候,会根据ARP缓存表里的对应关系进行发送。下面以例子的形式介绍,查看、添加、删除ARP缓存条目的方法。
服务器: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)查看接口的Idx号。执行命令如下所示:
从输出的结果中可以看到本地连接的Idx为16,Idx号将用在下面命令neighbors后面。
(2)添加IP-MAC地址绑定。执行命令如下所示:
执行以上命令没有任何输出信息。 注意,此处需要使用管理员权限!
(3)使用arp -a查看绑定的ARP条目。执行命令如下所示:
看到以上输出结果,表示IP-MAC地址10.1.1.11已被绑定。
(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应答包
在分析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应答协议报文格式
捕获的ARP请求包如下图6262帧数据
从上图可以看到,第一个数据包是一个ARP请求包。用户可以通过在Wireshark的Packet Details面板中,检查以太网头部来确定该包是否是一个真的广播数据包。下面将详细介绍Packet Details面板中的每行信息。如下所示:
Frame 6262: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0
以上内容表示这是第6262帧数据包的详细信息。其中,该包的大小为42个字节。
Ethernet II, Src:fa:16:3e:09:fa:d3(fa:16:3e:09:fa:d3), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
以上内容表示以太网帧头部信息。其中源MAC地址为fa:16:3e:09:fa:d3,目标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: fa:16:3e:09:fa:d3 (fa:16:3e:09:fa:d3) #发送端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地址(fa:16:3e:09:fa:d3),以及接收方的IP地址(10.1.1.166)。由于目前还不知道目标主机的MAC地址,所以这里的目的MAC地址为00:00:00:00:00:00。
关于以上ARP头部的内容和前面介绍的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响应包中的信息与它的报文格式也是相对应的,如下图所示:
通过今天的实验对wireshark抓包软件进行了应用,它可以抓取到arp协议数据包,arp协议地址解析协议,根据IP地址获取物理地址的TCP/IP协议。还知晓了arp缓存表,还应用了netsh程序,netsh帮助DLL”提供用来监视或配置特定Windows 2000网络组件的中其他命令,在windows7帮助监视arp协议。通过分析wireshark抓包结果对arp协议请求报文格式和响应报文格式深入了解,对格式有了一定的认识。
1)请学生思考Netsh和arp添加IP和MAC的区别。
“arp -s “与"netsh"在不同的系统下实现IP/MAC绑定,通常,"arp -s "用于XP系统下,"netsh"用于win7以及更新的系统,功能更为强大;二者明显的区别在于:,"arp -s"只能实现临时性IP/MAC绑定,重启系统后,绑定失效;而"netsh"则可实现永久性IP/MAC绑定,重启系统后任有效,并且可以指定网络接口。”
2)请对照ARP请求报文格式,自己写出ARP响应报文格式。
3)如果你是一名黑客,学了今天的知识,有什么想法,可以进行arp攻击呢?
地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
4)面试的时候,能否清楚的阐述出ARP协议呢?
可以,地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。