1. 什么是ARP

ARP(Address Resolution Protocol)协议,即地址解析协议。该协议的功能就是将 IP 地 址解析成 MAC 地址。

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

2. ARP工作流程

ARP 工作过程分为两个阶段,一个是 ARP 请求过程,一个是 ARP 响应过程。

在图2.2和2.3中,主机PC1的IP地址为192.168.1.1;主机PC2的IP地址为192.168.1.2。 当主机 PC1 和主机 PC2 通信时,地址解析协议可以将主机 PC2 的 IP 地址(192.168.1.2)解 析成主机 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 通信了。

3. ARP缓存表

1)缓存表由来

ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的 MAC 地址。在 ARP 缓存中的每个表又被称为 ARP 缓存表。

2)ARP 缓存表维护工具——arp 命令

在计算机中,提供了一个 ARP 命令。该命令用于查询本机ARP 缓存中的 IP 地址和 MAC 地址的对应关系、添加或删除静态对应关系等。用户也可以通过使用 arp 命令验证 ARP 缓 存条目的生命周期。ARP 命令的语法格式如下所示:

arp [-s inet_addr eth_addr [if_addr]] [-d inet_addr [if_addr]] [-a [inet_addr] [-N if_addr]] [-g] [-v]

以上参数含义如下所示:

① -s inet_addr eth_addr [if_addr]:向 ARP 缓存表中添加可将 IP 地址 inet_addr 解析成 物理地址 eth_addr 的静态条目。要向指定接口的表添加静态 ARP 缓存条目,使用 if_addr 参数,此处的 if_addr 代表指派给该接口的 IP 地址。

② -d inet_addr if_addr:删除指定的 IP 条目,此处的 inet_addr 代表 IP 地址。对于指定 的接口,要删除表中的某项,使用 if_addr,此处的 if_addr 代表指派给该接口的 IP 地址。要删除所有条目,使用星号(*)通配符代替 inet_addr。

③ -a inet_addr [-N if_addr]:显示所有接口的当前 ARP 缓存表。要显示特定 IP 地址的 ARP 缓存项,使用带有 inet_addr 参数的 arp -a,此处的 inet_addr 代表 IP 地址。如 果未指定 inet_addr,则使用第一个适用的接口。要显示特定接口的 ARP 缓存表, 将-N if_addr 与-a 参数一起使用,此处的 if_addr 代表指派给该接口的 IP 地址。-N 参数区分大小写。

④ -g:与-a 相同。

⑤ -v:查看帮助信息。

详细的arp使用命令,可参考我的另一篇博客。

4. 捕获 ARP 协议包

PC>ping 192.168.1.3

执行以上命令后,将输出如下所示的信息:

Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break

From 192.168.1.3: bytes=32 seq=1 ttl=128 time=31 ms

From 192.168.1.3: bytes=32 seq=2 ttl=128 time=31 ms

From 192.168.1.3: bytes=32 seq=3 ttl=128 time=47 ms

From 192.168.1.3: bytes=32 seq=4 ttl=128 time=31 ms

From 192.168.1.3: bytes=32 seq=5 ttl=128 time=47 ms

--- 192.168.1.3 ping statistics ---

5 packet(s) transmitted

5 packet(s) received

0.00% packet loss

round-trip min/avg/max = 31/37/47 ms

从输出的信息中,可以看到主机 PC2(192.168.5.2)向主机 PC1(192.168.5.4)发送了 四个数据包。这时候,Wireshark 就捕获到 ARP 数据包了

从该界面的 Protocol 列,可以看到捕获到的数据包都是 ARP 协议包。其中,22 帧是 ARP 请求包;23帧是响应包。由于使用 arp 过滤器,可以仅过滤出 ARP 包。

5. 分析ARP协议包

在分析 ARP 协议包之前,先介绍一下它的报文格式,以帮助用户更清楚的理解每个包。

1) 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-2 所示。

2)ARP请求包

从图中可以看到,第一个数据包是一个 ARP 请求包。用户可以通过在 Wireshark 的 Packet Details 面板中,检查以太网头部来确定该包是否是一个真的广播数据包。下面将详细 介绍 Packet Details 面板中的每行信息。如下所示:

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

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

Ethernet II, Src: 54:89:98:34:15:33 (54:89:98:34:15:33), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

以上内容表示以太网帧头部信息。其中源 MAC 地址为 54:89:98:34:15:33,目标 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: 54:89:98:34:15:33 (54:89:98:34:15:33)     #发送端 MAC 地址

Sender IP address: 192.168.1.2 (192.168.1.2)                              #发送端 IP 地址

Target MAC address: Broadcast (ff:ff:ff:ff:ff:ff)                                #目标 MAC 地址

Target IP address: 192.168.1.3 (192.168.1.3)                               #目标 IP 地址

表 2-3  ARP请求报文格式

Ethernet(1)

IP(0x0800)

6

4

request(1)

54:89:98:34:

15:33

192.168.

1.2

ff:ff:

ff:ff:ff:ff

192.168.1.3

3) ARP响应包

在图中的 Packet Details 面板中,可以看到第二个数据包是一个 ARP 响应包。该包中的信息与 ARP 请求包的信息类似。但是也有几处不同。下面将详细介绍,如下所示:

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

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

Ethernet II, Src: 54:89:98:5b:22:9b (54:89:98:5b:22:9b), Dst: 54:89:98:34:15:33 (54:89:98:34:15:33)

以上内容是以太网帧头部的信息。其中,源 MAC 地址为 54:89:98:5b:22:9b ,目标 MAC 地址为 54:89:98:34:15:33。从该行信息中,可以知道 PC2 获取到了 PC1 主机的 MAC 地址。 这样就可以正常通行了。

Address Resolution Protocol (reply)

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

Address Resolution Protocol (reply)

Hardware type: Ethernet (1)                                                                     #硬件类型

Protocol type: IP (0x0800)                                                                        #协议类型

Hardware size: 6                                                                                      #硬件长度

Protocol size: 4                                                                                        #协议长度

Opcode: reply (2)                                                                                     #操作码为2,表示该包是ARP响应包

Sender MAC address: 54:89:98:5b:22:9b (54:89:98:5b:22:9b)              #发送发MAC地址

Sender IP address: 192.168.1.3 (192.168.1.3)                                       #发送发IP地址

Target MAC address: 54:89:98:34:15:33 (54:89:98:34:15:33)                #目标MAC地址

Target IP address: 192.168.1.2 (192.168.1.2)                                         #目标IP地址

表 2-4  ARP响应报文格式

Ethernet(1)

IP(0x0800)

6

4

request(2)

54:89:98:5b:

22:9b

192.168.

1.3

54:89:

98:34:15:33

192.168.1.2

01、WireShark——ARP 协议包分析的更多相关文章

  1. WireShark——ARP 协议包分析

     1. 什么是ARP ARP(Address Resolution Protocol)协议,即地址解析协议.该协议的功能就是将 IP 地 址解析成 MAC 地址. ARP(Address Resolu ...

  2. WireShark——IP协议包分析(Ping分析IP协议包)

    互联网协议 IP 是 Internet Protocol 的缩写,中文缩写为“网协”.IP 协议是位于 OSI 模型中第三层的协议,其主要目的就是使得网络间能够互联通信.前面介绍了 ARP 协议, 该 ...

  3. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  4. ARP数据包分析

    转载请注明来源:https://www.cnblogs.com/hookjc/ 本机IP:192.168.0.1 (c0 a8 00 01)本机MAC:00-50-56-c0-00-01目标IP:19 ...

  5. HTTP协议包分析(小马上传大马)

    最近工作内容是分析防火墙日志,看日志是正确,本地实验小马上传大马  抓取http包如下.可以在分析过程中进行借鉴. 该http请求的行为是通过小马,在小马的当前目录创建一个dama.php的文件,文件 ...

  6. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  7. FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

    一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...

  8. 聊聊tcpdump与Wireshark抓包分析

    1 起因# 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查 ...

  9. ARP协议分析

    一.ARP概述 网络中所有的协议(HTTP.URL.FTP.TELNET.TCP.UDP.ARP ······)都包含在TCP/IP协议栈中,从使用上来看:其中大部分协议都是大家平常上网所接触到的,不 ...

随机推荐

  1. 动态规划-不连续最大子序列和-打家劫舍系列-1388. 3n 块披萨

    2020-03-24 17:49:58 198. 打家劫舍 问题描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, ...

  2. shell脚本中的if条件语句介绍和使用案例

    #前言:在生产工作中if条件语句是最常使用的,如使用来判断服务状态,监控服务器的CPU,内存,磁盘等操作,所以我们需要熟悉和掌握if条件语句. #简介 if条件语句,简单来说就是:如果,那么.有if单 ...

  3. Linux/CentOS7搭建Anaconda运行环境

    1. 安装miniconda 下载并安装miniconda到$HOME/.miniconda/ #从官网下载 wget -c "https://repo.anaconda.com/minic ...

  4. JavaScript的URLSearchParams方法

    URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串. 一个实现了 URLSearchParams 的对象可以直接用在 for…of 结构中,不需要使用 entries ...

  5. JAVA中,一个类中,方法加不加static的区别,

    通俗理解: 1.若是对象的特有行为,(也就是某个实例方法特有的行为),不加static 2. 若是对象集合共有的集合,则加static static类型方法只可以访问静态变量和方法 实例方法可以访问实 ...

  6. 在Centos7下搭建大数据环境,即Zookeeper+Hadoop+HBase

    1. 所需软件下载链接(建议直接复制链接到迅雷下载更快): ①hadoop-2.7.6.tar.gz: wget http://mirrors.tuna.tsinghua.edu.cn/apache/ ...

  7. 读者来信-5 | 如果你家HBase集群Region太多请点进来看看,这个问题你可能会遇到

    前言:<读者来信>是HBase老店开设的一个问答专栏,旨在能为更多的小伙伴解决工作中常遇到的HBase相关的问题.老店会尽力帮大家解决这些问题或帮你发出求救贴,老店希望这会是一个互帮互助的 ...

  8. ASP.NET Core单文件和多文件上传并保存到服务端

    前言: 在我们日常开发中,关于图片,视频,音频,文档等相关文件上传并保存到服务端中是非常常见的一个功能,今天主要是把自己在开发中常用的两种方式记录下来方便一下直接使用,并且希望能够帮助到有需要的同学! ...

  9. 大数据篇:Hive

    大数据篇:Hive hive.apache.org Hive是什么? Hive是Facebook开源的用于解决海量结构化日志的数据统计,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射 ...

  10. 谷歌 MapReduce 初探

    谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,毕竟没有谷歌,就没有大数据. 上次的分享,我们对谷歌的其中一驾宝车 GFS 进行了管中窥豹,虽然只见得其中一斑,但是也能清楚的知道 GFS 能够把 ...