使用Wireshark探索ARP协议的工作原理
使用Wireshark探索ARP协议的工作原理
使用工具
- Wireshark
- arp: 查看和清除计算机上ARP协议使用的缓存。
- curl(MacOS)
- ifconfig(MacOS或Linux): 查看计算机网络接口的状态。
- route/netstat: 查看计算机使用的路由。
- 浏览器。
网络设置
ARP用于查找与本地IP地址对应的以太网地址,以便计算机可以向其发送数据包。
捕获数据包
运行以下命令获取自己的以太网地址:
ifconfig
查找计算机用于访问互联网的本地路由器或默认网关的IP地址:
netstat -r # 或使用 `route -n get default`
Wireshark设置:
- 接口:Wi-Fi: en0(MacOS+WiFi)
- 过滤器:
arp - 取消选中
promiscuous mode:此模式可用于监听其他计算机发送和接收的数据包
设置完成后,开始捕获数据包。
在命令行窗口运行以下命令:
arp -a # 查看ARP缓存
sudo arp -d -a # Mac, 清除ARP缓存
arp -a # 再次查看ARP缓存
清除本机的缓存之后,再次使用
arp -a
查看缓存信息发现还有一条信息,这是为什么呢?下面这一段话是对于这一现象的解释。
计算机在需要和某个远程 IP 地址通信时,会自动发送新的 ARP 请求来重新获取该 IP 地址对应的 MAC 地址。这种请求通常是由系统后台的网络活动触发的,例如定时检测网络状态、后台程序通信等。因此,清除条目后,即使在短时间内查看 ARP 表(通过 arp -a),也可能发现该条目已经重新出现在 ARP 表中。
然后打开浏览器,这时Wireshark会捕获到一些分组,实际上我没打开浏览器时就捕获到了一些,可能是后台应用太多了。捕获到了之后就停止捕获,然后进入下一步的探究👀。
分析数据包
我们首先分析发往我们自己电脑的和从我们电脑发出的分组,所以需要先过滤一下。
# 填入自己的 MAC 地址
eth.addr==10:b5:88:57:d8:0d
查找并选择一个发往默认网关的ARP请求,检查其字段。ARP数据包有两种类型:请求和响应,我们将依次查看它们。
字段含义:
- Hardware type 和 Protocol type 分别用来指定底层的网络硬件类型和上层协议的类型。这与ARP从IP到以太网地址的转换相匹配。
- Hardware and Protocol size 分别设置为6和4,这是以太网和IP地址的字节大小。
- opcode 标识这是一个Request,根据IP查找MAC的请求。
- 最后四个字段分别是发送者的MAC和IP以及目标的MAC和IP,但这是我们发送出去的request,此时我们还不知道目标的MAC,所以这一字段是没有被填的。
字段含义:
- Hardware and Protocol type and sizes 与之前相同。
- opcode 字段有不同的值,告诉我们这是一个reply。
- 接下来是四个关键字段,发送者的MAC和IP以及目标的MAC和IP,与之前相同。这些字段与相应的请求相反,因为旧的目标是新的发送者(反之亦然)。现在所有字段都应该被填满,因为两台计算机都提供了它们的地址。
ARP请求和响应
根据下图绘制:
以太网上的ARP细节
用于表示请求的opcode是什么?回复呢?
01 表示request,02 表示reply。ARP请求的头部有多大?回复呢?
回复:28字节,请求:28字节(或24字节 减去未填写的目标MAC地址)在请求中,未知目标MAC地址携带什么值?
目标MAC地址:00:00:00_00:00:00 (00:00:00:00:00:00)表示ARP是高层协议的以太网类型值是什么?
ARP回复是广播(像ARP请求一样)还是不是?
返回时因为已经知道了双方的IP和MAC,所以不是通过广播,而是直接根据MAC返回。
下面讲述了ARP的工作原理:
ARP数据包封装在以太网帧中,以太网头部字段的值被选择来支持ARP。例如,你可能会想知道ARP请求数据包是如何传递给目标计算机的,以便它可以回复并告诉请求者其MAC地址。答案是ARP请求在以太网层是广播的,因此它被本地网络上的所有计算机接收,包括目标计算机。具体查看请求的目标以太网地址:它被设置为ff:ff:ff:ff:ff:ff,广播地址。因此,目标计算机接收到请求并识别出它是消息的预期接收者;其他接收到请求的计算机知道这不是发给它们的。只有目标计算机用回复进行响应。然而,任何接收到ARP数据包的人都可以从其中学习映射:发送者MAC和发送者IP对。