基于 Wireshark 分析 ARP 协议

一、环境准备

两台虚拟机,一台 Windows 10 安装了 WireShark,另一台随意(同一局域网内)

二、命令提示符基础

C:\Users\ydd33>arp /?

显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。

ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]

  -a            通过询问当前协议数据,显示当前 ARP 项。
                如果指定 inet_addr,则只显示指定计算机
                的 IP 地址和物理地址。如果不止一个网络
                接口使用 ARP,则显示每个 ARP 表的项。
  -g            与 -a 相同。
  -v            在详细模式下显示当前 ARP 项。所有无效项
                和环回接口上的项都将显示。
  inet_addr     指定 Internet 地址。
  -N if_addr    显示 if_addr 指定的网络接口的 ARP 项。
  -d            删除 inet_addr 指定的主机。inet_addr 可
                以是通配符 *,以删除所有主机。
  -s            添加主机并且将 Internet 地址 inet_addr
                与物理地址 eth_addr 相关联。物理地址是用
                连字符分隔的 6 个十六进制字节。该项是永久的。
  eth_addr      指定物理地址。
  if_addr       如果存在,此项指定地址转换表应修改的接口
                的 Internet 地址。如果不存在,则使用第一
                个适用的接口。
示例:
  > arp -s 157.55.85.212   00-aa-00-62-c6-09.... 添加静态项。
  > arp -a                                  .... 显示 ARP 表。

C:\Users\ydd33>

三、ARP 协议

ARP(Address Resolution Protocol)是一种用于将网络层地址(例如IP地址)解析为物理地址(例如MAC地址)的协议。它通常用于IPv4网络中,IPv6网络使用Neighbor Discovery Protocol(NDP)来执行类似的功能。

下面是ARP协议的详细解析:

  1. 工作原理

    • 当主机A知道目标主机B的IP地址,但不知道其MAC地址时,它会发送一个ARP请求广播以获取目标主机B的MAC地址。
    • ARP请求广播包含了源主机A的IP地址和MAC地址,以及目标主机B的IP地址。
    • 网络上的所有主机都会收到这个ARP请求广播,但只有目标主机B会响应。
    • 目标主机B收到ARP请求后,会将自己的MAC地址作为响应发送给源主机A。
    • 源主机A接收到ARP响应后,将目标主机B的IP地址和MAC地址的映射关系存储在其ARP缓存中。
  2. 数据结构

    • ARP协议定义了两种数据结构:ARP请求和ARP响应。
    • ARP请求中包含了源IP地址、源MAC地址、目标IP地址。
    • ARP响应中包含了目标IP地址、目标MAC地址、源IP地址、源MAC地址。
  3. 工作环境

    • ARP协议在局域网中使用,通常在同一个子网内才能正常工作。
    • 路由器通常不会转发ARP请求广播,因为它们只在子网间进行路由转发。
  4. 缓存

    • 主机在收到ARP响应后,会将目标主机的IP地址和MAC地址的映射关系存储在本地的ARP缓存中,以便以后快速查找。
  5. 缺点

    • ARP是一种不安全的协议,容易受到ARP欺骗(ARP Spoofing)攻击。
    • ARP请求和响应广播会增加网络流量,可能会导致网络拥堵。

总的来说,ARP是一种简单而有效的协议,用于解决IP地址到MAC地址的映射问题,但同时也存在一些安全和性能方面的考虑。

四、数据包结构

地址解析协议
偏移位 八位组 0 1 3 4
八位组 0~7 8~15 0~7 8~15
0 0 硬件类型 协议类型
4 32 硬件地址长度 协议地址长度 操作
8 64 发送方硬件地址
12 96 发送方硬件地址 发送方协议地址
16 128 发送方协议地址 目标硬件地址
20 160 目标硬件地址
24+ 192+ 目标协议地址
  • 偏移位(Offset):指的是每个字段在数据包中的偏移量,以字节为单位。偏移位表示字段从数据包的起始位置开始的位置。
  • 八位组:指的是字节(Byte)的位(Bit)组成,即8个二进制位。通常以十六进制表示。
  • 硬件类型(Hardware Type):2个字节,表示硬件地址的类型,例如以太网
  • 协议类型(Protocol Type):2个字节,表示协议地址的类型,例如IPv4
  • 硬件地址长度(Hardware Address Length):1个字节,表示硬件地址的长度,以字节为单位
  • 协议地址长度(Protocol Address Length):1个字节,表示协议地址的长度,以字节为单位
  • 操作(Operation):2个字节,表示ARP数据包的类型,如请求或响应
  • 发送方硬件地址(Sender Hardware Address):长度由硬件地址长度字段指定,表示发送ARP数据包的设备的MAC地址
  • 发送方协议地址(Sender Protocol Address):长度由协议地址长度字段指定,表示发送ARP数据包的设备的IP地址
  • 目标硬件地址(Target Hardware Address):长度由硬件地址长度字段指定,表示ARP请求或响应的目标设备的MAC地址
  • 目标协议地址(Target Protocol Address):长度由协议地址长度字段指定,表示ARP请求或响应的目标设备的IP地址 

五、实验模拟

本地输入 arp -a 查看 arp 表

开启抓包后 Ping 另一台主机的 IP 地址

Wireshark 中输入 arp 过滤其他协议后点击一个分析

六、ARP 请求分析

可以发现这个数据包的目的地址是虚拟机的广播地址,源地址(发送方)是本机自己。这里咱们可以查看本机 MAC 地址确认

下方的地址解析协议(请求)也证明了这一点,操作为 1 对应请求包,目标 IP 地址为 192.168.134.129

七、ARP 响应分析

点击第二个包进行分析

可以发现目的地址变成了咱,源地址是另一台主机(查看另一台主机地址验证)

下方的操作为 2 对应响应,即咱已经获得了目标主机的 MAC 地址,现在再来查看 ARP 表

八、免费 ARP 分析 

免费ARP包,也被称为Gratuitous ARP或无故ARP,是一种特殊的ARP请求。与一般的ARP请求不同,免费ARP包并非期待得到IP对应的MAC地址,而是设备使用自己的IP地址作为目的IP地址来发送ARP请求,即请求自己的IP地址对应的MAC地址。在发送免费ARP包时,Sender IP和Target IP字段是相同的。

免费ARP包主要有以下几个应用场景和作用:

  1. 宣告作用:当主机或系统启动时,或者进行网口/接口配置时,会发送免费ARP包来宣告其存在,确保网络中IP的唯一性,并检查是否有IP冲突。
  2. MAC地址变更通知:当主机更换网卡或MAC地址发生变化时,为了避免ARP表项老化前其他设备仍然使用旧的MAC地址,会发送免费ARP包来通知其他设备其MAC地址已经变更。
  3. VRRP备份组状态变化通知:在VRRP备份组中,当主备状态发生变化时,会发送免费ARP包来通知同一网段的其他设备其状态已经变化。

免费ARP包是广播发送的,其目标MAC地址是全F。当设备接收到免费ARP包后,如果发现地址存在冲突,会发送一个免费ARP包来告知其他设备地址冲突的情况;如果地址不冲突,则会根据接收到的ARP包中携带的IP、MAC等信息进行维护。

需要注意的是,发送免费ARP的主机或设备往往并不希望收到ARP应答,因为若是收到了,说明网络上有人使用相同的IP,这会造成IP冲突。因此,免费ARP包的主要作用是用于宣告和通知,而不是用于获取MAC地址信息。

免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址 

上一篇:数据库管理开发工具Navicat for MySQL Mac版下载


下一篇:用了两周开源堡垒机OneTerm,我有一些建议