简介
第一篇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帧字段解释:
- 硬件类型:硬件地址(MAC地址)的类型。对于以太网,这里为1。
- 协议类型:映射的协议协议地址类型。对于IPv4地址,此字段为0x0800。
- 硬件大小:硬件地址的字节数。对于MAC地址,应该为6。
- 协议大小:协议地址的字节数。对于IPv4地址,应该为4.
- Op:ARP请求(1)、ARP应答(2)、RARP请求(3)、RARP应答(4)。
- 地址字段:用于存放发送方与接收方的硬件地址与协议地址。
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并抓包
- 打开Wireshark,并在过滤器中输入
arp。 - 打开虚拟终端软件,输入
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头部中:
- 目标地址:全1,表示广播,表示发往同一局域网中的所有接口。
- 源地址:为电脑网卡接口的MAC地址。
- 类型:为0x0806,表明这是一个ARP协议帧,载荷交由ARP协议软件处理。 ARP协议内容:
- 前四个字段如ARP帧格式中介绍的一样。
- Op:为1,表示这个帧为ARP请求帧,希望得到目标接口的应答。
- 后面的地址字段也和ARP帧格式中介绍的一样。
值得注意的是目的硬件地址为全0,因为当前还不知道。
第二个ARP帧
目标设备单播发往电脑网卡接口的ARP请求
IPv4地址为 192.168.102.112 的接口收到了电脑网卡接口广播的ARP请求,单播进行应答。
Ethernet II头部中的:
- 目标地址:为ARP请求发送方的MAC地址。
- 源地址:目标接口的MAC地址。
- 类型:为0x0806,表明这是一个ARP协议帧,载荷交由ARP协议软件处理。 ARP协议内容:
- 前四个字段如ARP帧格式中介绍的一样。
- Op:为2,表示这个帧为ARP应答帧,是对ARP请求的应答。
- 后面的地址字段也和ARP帧格式中介绍的一样。
电脑网卡接口收到ARP应答帧后会将其解析并作为一个动态条目加入ARP缓存表
第三个和第四个ARP帧
一般而言,目标设备收到ARP请求时,除了发送ARP应答,还会在ARP缓存表中添加有关发送方的映射条目。这是一个很常见的优化举措,但这里目标设备并没有这么做。
当它被电脑 ping 时,它为了回复同样也需要知晓电脑网卡接口的IPv4地址与MAC地址的映射关系,但是它发送ARP应答的时候并没有记录,因此它这里也需要往电脑发送ARP请求,等待电脑网卡接口的ARP应答,这就是第三个和第四个ARP帧的由来,可以参考前两个ARP帧示例。
结语
ARP协议算是比较简单的协议了,Wireshark抓包还是比较容易的,快去亲手试试吧🫵。