Wi-Fi网络学习记录(1):抓包ARP协议

成元 2026-01-05 { 教程, 笔记 } [ Linux, Wi-Fi, Wireshark ]

简介

第一篇Wi-Fi网络学习记录,简单的设计一个ARP协议抓包实验,并对结果进行分析。
适合了解了ARP协议的人观看🤓。

ARP协议简介

功能介绍

ARP的中文名称为地址解析协议。对于TCP/IP网络,ARP协议提供了一种建立某个主机接口IPv4地址与其MAC地址之间映射的方法(换句话说,可以通过某个主机的IPv4地址找到它的MAC地址)。
之所以强调IPv4地址,是因为ARP仅用于IPv4,IPv6使用邻居发现协议。
与之相反的协议为RARP,不过其几乎已经不再被使用。

ARP帧格式

ARP帧(Ethernet II头部)

本文的实验是直接监听网卡接口,收到的是Ethernet II帧,故这里给出对应的格式。

ARP帧字段解释:

ARP缓存表

这个表格维护了每个接口从IP地址到MAC地址的最新映射(每个IPv4地址对应的MAC地址)。
每个条目由ARP协议动态学习或者手工输入得到。
在 Windows/Linux 中,可以通过 arp -a 指令查看。

Wireshark抓包流程

准备网络环境

创建一个局域网,并准备包括电脑网卡接口在内的两个无线网络接口(平板、手机或者另一个电脑网卡接口等等)。确保它们都能连接上局域网。

检查ARP缓存表

使用 arp -a 指令查询当前设备的 ARP缓存表确保另一台设备不在这个表中
如下所示,除了网关以外没有任何接口的记录。

❯ arp -a  
>_gateway (192.168.102.158) 位于 66:ce:bd:27:59:a9 [ether] 在 wlo1

如果有了另一台设备的记录(比如重复实验等情况),可以用 sudo arp -d <IPv4地址>进行删除。

查询另一台设备的IPv4地址

这个操作可以通过设备的设置软件或者AP设备(比如你的路由器)查询。
本文中另一台设备的IPv4地址为 192.168.102.112,下文不在复述。

打开Wireshark并抓包

  1. 打开Wireshark,并在过滤器中输入arp
  2. 打开虚拟终端软件,输入 ping 192.168.102.112
    (这里的IP地址由前面的查询步骤得到).

Wireshark抓到的ARP帧

最终应该会得到1对或者2对ARP帧。如上图所示(可以放大观看)。

Wireshark抓包内容解析

上一个步骤一共得到了四个ARP帧,这里分别做解释。

第一个ARP帧

电脑网卡接口在局域网中广播的ARP请求

当执行ping 192.168.102.112时。电脑的ARP缓存表中并没有对应的条目,
因此为了得到 192.168.102.112 与MAC地址的映射关系,协议栈软件底层自动发送了一个ARP请求帧。 Ethernet II头部中:

第二个ARP帧

目标设备单播发往电脑网卡接口的ARP请求

IPv4地址为 192.168.102.112 的接口收到了电脑网卡接口广播的ARP请求,单播进行应答。
Ethernet II头部中的:

第三个和第四个ARP帧

一般而言,目标设备收到ARP请求时,除了发送ARP应答,还会在ARP缓存表中添加有关发送方的映射条目。这是一个很常见的优化举措,但这里目标设备并没有这么做。
当它被电脑 ping 时,它为了回复同样也需要知晓电脑网卡接口的IPv4地址与MAC地址的映射关系,但是它发送ARP应答的时候并没有记录,因此它这里也需要往电脑发送ARP请求,等待电脑网卡接口的ARP应答,这就是第三个和第四个ARP帧的由来,可以参考前两个ARP帧示例。

结语

ARP协议算是比较简单的协议了,Wireshark抓包还是比较容易的,快去亲手试试吧🫵。