Wireshark抓取ARP包并进行分析

张开发
2026/4/20 9:25:40 15 分钟阅读

分享文章

Wireshark抓取ARP包并进行分析
ARP到底属于IP层还是链路层属于局域网吗这是一个非常深刻的问题能问到这个层面说明你对网络分层的思考已经超越了多数人。直接给出结论ARP 在概念上属于链路层OSPF 中的 L2但在实现上它“寄生”在 IP 层之上。它严格只在局域网内工作从不跨路由器。下面我把这三点拆开详细解释清楚。1. ARP 属于哪一层经典争议点这个问题在教材和工程界有不同说法但主流共识是OSI 七层模型归类为【数据链路层L2】。因为它直接封装在以太网帧里类型字段0x0806负责解析同一链路上的 MAC 地址。TCP/IP 四层模型介于【网络层L3和链路层L2之间】。因为它服务于 IP 协议给 IP 找 MAC但又依赖链路层广播。最准确的理解ARP 是一个“跨层协议”功能上属于 L2逻辑上为 L3 服务。用个比喻IP 层你想给北京的朋友写信你写的是“北京市朝阳区XX路XX号”IP地址。ARP你把这个地址输入地图地图告诉你“哦这个地址的具体门牌号和快递员编号是 XXX”MAC地址。链路层快递员MAC拿着这封信去送。ARP 就是那个“地图查询服务”——它服务于 IP 层L3但查出来的结果是给链路层L2用的查询过程本身使用链路层的广播机制。2. ARP 属于局域网吗是的严格属于局域网并且只在同一广播域内有效。ARP 请求是广播帧目的 MAC FF:FF:FF:FF:FF:FF这个帧永远不会被路由器转发。路由器收到这种广播包会直接丢弃除非配置了代理 ARP但那是特例。ARP 应答是单播帧虽然应答是单播但它是针对刚才那个广播请求的回应范围仍然限定在同一个广播域内。这意味着主机 A192.168.1.2想和主机 B192.168.1.3通信 →会发 ARP同网段。主机 A192.168.1.2想和百度110.242.68.66通信 →不会对百度发 ARP它会发 ARP 查询默认网关192.168.1.1的 MAC然后把包交给网关。3. 为什么很多人误以为 ARP 是“IP 层的”因为 ARP 处理的对象是IP 地址而且你经常用arp -a命令看到的输出是IP地址 - MAC地址的映射表。关键区别ARP 的输入一个 IP 地址属于 L3 的概念。ARP 的输出一个 MAC 地址属于 L2 的概念。ARP 的传输使用 L2 的广播不会经过 L3 路由。打个比方你用计算器算一道数学题。输入是数字IP地址输出也是数字MAC地址但计算器本身不是数学它是一个工具。ARP 就是这个“工具”它输入 L3 的地址输出 L2 的地址但它的工作方式完全在 L2 的范围内。4. 一张图总结 ARP 的位置------------------ | 应用层HTTP等 | ------------------ | 传输层TCP/UDP| ------------------ | 网络层IP | --- 要发数据给 192.168.1.3 ------------------ | ARP寄生层 | --- 问谁是 192.168.1.3请告诉我你的 MAC ------------------ | 链路层以太网 | --- 广播发送 ARP 请求FF:FF:FF:FF:FF:FF ------------------特殊说明代理 ARPProxy ARP有一种技术叫“代理 ARP”可以让路由器假装自己是目标设备替其他网段的设备回应 ARP 请求。这打破了“ARP 只在局域网”的规则但现代网络基本不用因为它有安全风险且效率低。家用路由器默认不开启。即使开启也只是让 ARP“跨越”了路由器但本质上还是把一个远程设备映射成“本地”的属于例外情况。一句话答案ARP 在功能上是链路层的在逻辑上服务于 IP 层并且严格只在同一个局域网广播域内工作从不跨路由器。ARP地址解析协议详解ARPAddress Resolution Protocol是TCP/IP协议栈中一个看似简单但极其关键的协议。下面从原理、工作流程、报文格式、安全问题等角度全面解析。一、ARP的核心问题为什么要ARP问题的本质在网络通信中存在身份鸿沟IP地址逻辑地址由管理员或DHCP分配可以随时更改如192.168.1.2MAC地址物理地址出厂时烧录在网卡上全球唯一且不可更改矛盾点主机A要发送数据给主机BA知道B的IP地址但以太网帧传输时必须填写目的MAC地址。ARP的作用在同一个局域网内根据IP地址找到对应的MAC地址。┌─────────────────────────────────────────┐ │ IP数据包源IP: A, 目的IP: B │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ARP问谁知道 192.168.1.3 的MAC地址 │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ 以太网帧源MAC: A, 目的MAC: B的MAC │ └─────────────────────────────────────────┘二、ARP工作原理4步曲完整流程示例假设主机AIP192.168.1.2MACAA:AA:AA:AA:AA:AA主机BIP192.168.1.3MACBB:BB:BB:BB:BB:BB两者在同一交换机下A首次与B通信步骤1检查ARP缓存A先查看自己的ARP缓存表arp -aC:\ arp -a 接口: 192.168.1.2 --- 0x3 互联网地址 物理地址 类型 192.168.1.1 CC:CC:CC:CC:CC:CC 动态发现没有B的记录进入步骤2。步骤2发送ARP请求广播A构造一个ARP请求报文目的MAC地址 FF:FF:FF:FF:FF:FF广播地址源MAC地址 AA:AA:AA:AA:AA:AA请求内容谁是192.168.1.3请告诉192.168.1.2这个广播帧会被交换机转发到同一广播域内的所有设备包括B、路由器、其他电脑。步骤3目标设备响应单播B收到广播后发现问的是自己于是将A的IP和MAC记录到自己的ARP缓存发送ARP响应报文单播目的MAC AA:AA:AA:AA:AA:AA直接发给A源MAC BB:BB:BB:BB:BB:BB响应内容192.168.1.3的MAC是BB:BB:BB:BB:BB:BB步骤4更新缓存并通信A收到响应后将B的映射记录到ARP缓存通常保留2分钟现在可以正确封装以太网帧开始数据通信时序图表示主机A (192.168.1.2) 交换机 主机B (192.168.1.3) | | | |--- ARP请求(广播)-------|------ 广播到所有端口 ---| | 谁是192.168.1.3? | | | | | | |------ ARP响应(单播) --| |--- ARP响应(单播) -------| 我是MACBB:BB | | 192.168.1.3是BB:BB | | | | | |--- 正常数据帧 ----------|------ 单播转发 -------| | 目的MACBB:BB | |三、ARP报文格式以太网环境ARP报文直接封装在以太网帧中类型字段0x0806长度为28字节不含填充。以太网头部14字节 ┌──────────────┬──────────────┬──────────────┐ │ 目的MAC(6B) │ 源MAC(6B) │ 类型(2B) │ │ FF:FF:FF... │ AA:AA:AA... │ 0x0806(ARP) │ └──────────────┴──────────────┴──────────────┘ ARP报文28字节 ┌─────────────┬─────────┬─────────────────┐ │ 硬件类型(2B)│ 协议(2B) │ 硬件地址长度(1B) │ │ 0x0001(以太)│ 0x0800IP│ 6(MAC长度) │ ├─────────────┴─────────┴─────────────────┤ │ 协议地址长度(1B) │ 操作码(2B) │ │ 4(IP长度) │ 1请求, 2响应 │ ├─────────────────────────────────────────┤ │ 源MAC地址(6B) │ ├─────────────────────────────────────────┤ │ 源IP地址(4B) │ ├─────────────────────────────────────────┤ │ 目的MAC地址(6B)请求时为全0 │ ├─────────────────────────────────────────┤ │ 目的IP地址(4B) │ └─────────────────────────────────────────┘关键字段说明硬件类型以太网为1协议类型IPv4为0x0800操作码1ARP请求2ARP响应3RARP请求...填充ARP报文不足64字节时需要填充到以太网最小帧长四、ARP缓存表Windows系统查看C:\ arp -a 接口: 192.168.1.102 --- 0x14 互联网地址 物理地址 类型 192.168.1.1 2c-30-33-6a-8e-4c 动态 192.168.1.101 78-0c-b8-5e-4a-2a 动态 192.168.1.103 18-3f-47-9c-2b-15 动态 224.0.0.22 01-00-5e-00-00-16 静态 255.255.255.255 ff-ff-ff-ff-ff-ff 静态缓存管理命令操作系统查看缓存添加静态条目删除缓存Windowsarp -aarp -s IP MACarp -dLinuxarp -narp -s IP MACarp -d IPmacOSarp -aarp -s IP MACarp -d IP缓存超时时间动态条目通常120-300秒不同系统不同静态条目永久存在直到重启不完整条目发送ARP请求后未收到响应保留约3秒五、ARP的高级特性1. 免费ARPGratuitous ARP定义主机主动发送ARP请求询问自己的IP地址对应的MAC。场景IP地址冲突检测DHCP客户端获取IP前广播询问谁是192.168.1.100如果有人响应说明IP已被占用。MAC地址变更通知网卡更换或虚拟IP切换时主动广播我是192.168.1.100我的MAC现在是新地址通知其他设备更新缓存。报文特征源IP 目的IP 自己的IP 目的MAC FF:FF:FF:FF:FF:FF 操作码 1请求2. 代理ARPProxy ARP原理路由器替其他网段的设备响应ARP请求。场景主机A192.168.1.2想ping主机B192.168.2.2但A没有配置网关以为B在同一网段。路由器收到A的ARP请求后发现B在自己另一个接口于是用自己的MAC响应。缺点增加网络延迟可能导致路由环路有安全风险现代网络基本禁用3. 反向ARPRARPReverse ARP作用根据MAC地址找IP地址。历史意义早期无盘工作站启动时不知道自己的IP通过RARP服务器获取。已被DHCP取代现在基本废弃。六、ARP与路由的关系核心原则ARP只在直连网段工作主机A (192.168.1.2) ↓ 想要访问百度 (110.242.68.66) ↓ 判断不在同一网段 ↓ 需要经过网关 (192.168.1.1) ↓ 对网关发ARP请求不是对百度 ↓ 得到网关MAC后把数据包发给网关实验验证# 在主机A上抓包 tcpdump -i eth0 arp # 访问外网时只能看到询问网关的ARP包 # 不会看到询问百度IP的ARP包七、ARP的安全问题1. ARP欺骗ARP Spoofing原理攻击者发送伪造的ARP响应让受害者把攻击者的MAC映射到网关IP。正常情况 网关IP(192.168.1.1) - 网关MAC(AA:AA:AA:AA:AA:AA) 攻击后 网关IP(192.168.1.1) - 攻击者MAC(BB:BB:BB:BB:BB:BB)后果中间人攻击窃听、篡改断网攻击发送错误的MAC会话劫持2. 防御措施防御手段原理有效性静态ARP手动绑定IP-MAC有效但维护成本高DAI动态ARP检测交换机验证ARP包企业级有效端口安全限制端口上的MAC数量部分有效加密通信HTTPS/SSH即使被欺骗也无法解密保护数据内容3. 检测ARP欺骗Windows命令# 查看ARP缓存 arp -a # 检查网关MAC是否一致 # 如果网关IP对应多个MAC可能被攻击Linux工具# 使用arpwatch监控异常 sudo arpwatch -i eth0 # 使用arp-scan扫描网络 sudo arp-scan --localnet八、ARP在不同网络环境中的行为1. 普通交换机环境ARP广播会泛洪到所有端口所有设备都能收到ARP请求2. VLAN环境ARP广播只在同一VLAN内传播不同VLAN需要三层设备路由器转发3. 无线网络Wi-Fi工作方式相同但AP可能开启AP隔离阻止无线设备间ARP4. 广域网互联网ARP不会跨越路由器广域网使用其他地址解析协议如Frame Relay的InARP九、常见问题排查问题1ping不通同网段设备# 1. 检查ARP缓存 arp -a | findstr 192.168.1.3 # 2. 手动清空缓存 arp -d 192.168.1.3 # 3. 抓包分析 tcpdump -i eth0 arp and host 192.168.1.3问题2ARP响应很慢可能原因目标主机IP冲突多个设备响应交换机开启了ARP限速防火墙阻止了ARP问题3跨网段通信失败但同网段正常检查默认网关配置是否正确# Windows route print # Linux ip route show十、ARP与IPv6NDP协议在IPv6中ARP被邻居发现协议NDPNeighbor Discovery Protocol取代对比项ARPIPv4NDPIPv6协议层独立的L2.5协议ICMPv6的一部分报文类型ARP请求/响应邻居请求(NS)/邻居公告(NA)广播使用广播使用组播更高效安全性无内置安全支持SEND安全扩展附加功能仅地址解析地址解析路由器发现重定向总结ARP核心要点本质IP到MAC的映射服务范围严格限制在同一局域网广播域工作方式请求广播响应单播缓存动态条目有时间限制约2分钟安全容易被欺骗需配合防御措施替代IPv6使用NDP替代ARP一句话记忆ARP就是局域网里的电话查询台——你知道对方的名字IP通过它查到对方的电话号码MAC然后才能打电话发数据。Wireshark抓取ARP包并分析下面将通过实际操作使用Wireshark抓取ARP数据包并详细分析请求包和响应包的报文结构。一、准备工作1.1 实验环境工具Wireshark参考wireshark抓包工具简介及使用总结-CSDN博客操作系统Windows / Linux / macOS网络环境需要连接到局域网有线或无线均可1.2 操作前清空ARP缓存为了让ARP过程清晰地展示出来先清空本机的ARP缓存Windows# 查看当前ARP缓存 arp -a # 清空所有ARP缓存条目 arp -dLinux/macOS# 查看当前ARP缓存 arp -n # 清空ARP缓存Linux sudo ip neigh flush all # 清空ARP缓存macOS sudo arp -d -a二、使用Wireshark抓取ARP包2.1 启动抓包打开Wireshark在主界面选择当前正在使用的网卡如以太网或WLAN双击开始抓包设置显示过滤器在过滤器中输入arp这样只显示ARP协议的数据包屏蔽其他干扰arp触发ARP请求打开命令行ping一个同网段的IP地址例如网关或其他设备ping 192.168.0.103如果是首次通信主机不知道目标IP对应的MAC地址会先发送ARP请求2.2 抓包结果示例在Wireshark中会看到类似下面的数据包三、ARP请求包详细分析3.1 以太网帧头部Ethernet II选中第一个ARP请求包在Packet Details面板中展开Ethernet II部分字段值含义Destinationff:ff:ff:ff:ff:ff目的MAC地址为广播地址表示该帧会发送给局域网内所有设备Source2c:f0:5d:6e:d9:b8源MAC地址即发送方主机的物理地址Type0x0806协议类型0x0806表示上层封装的是ARP协议3.2 ARP协议部分展开Address Resolution Protocol部分字段值含义Hardware type1 (Ethernet)硬件类型1表示以太网Protocol type0x0800 (IPv4)协议类型0x0800表示要解析的是IPv4地址Hardware size6硬件地址长度MAC地址占6字节Protocol size4协议地址长度IPv4地址占4字节Opcode1 (request)操作码1表示ARP请求2表示ARP响应Sender MAC address2c:f0:5d:6e:d9:b8发送方的MAC地址Sender IP address192.168.0.108发送方的IP地址Target MAC address00:00:00:00:00:00目标MAC地址未知所以填0Target IP address192.168.0.103目标IP地址想要查询的IP3.3 请求包关键特征以太网目的地址是全F广播因为不知道目标MAC所以发给所有人目标MAC地址是全0表示该字段暂未知等待填充Opcode 1标识这是一个请求包四、ARP响应包详细分析4.1 以太网帧头部选中第二个ARP响应包展开Ethernet II部分字段值含义Destination2c:f0:5d:6e:d9:b8目的MAC地址正好是请求包中发送方的MAC地址Source1a:1c:77:be:ed:8e源MAC地址即响应方被查询设备的MAC地址Type0x0806协议类型仍然是ARP4.2 ARP协议部分展开Address Resolution Protocol部分字段值含义Hardware type1 (Ethernet)硬件类型以太网Protocol type0x0800 (IPv4)协议类型IPv4Hardware size6MAC地址长度Protocol size4IP地址长度Opcode2 (reply)操作码2表示ARP响应Sender MAC address1a:1c:77:be:ed:8e响应方的MAC地址这正是请求方想知道的Sender IP address192.168.0.103响应方的IP地址Target MAC address2c:f0:5d:6e:d9:b8请求方的MAC地址Target IP address192.168.0.108请求方的IP地址4.3 响应包关键特征以太网目的地址是请求方的MAC单播响应只发给请求的那台主机Sender MAC地址就是请求方想查询的地址请求包中的Target MAC现在被填充了Opcode 2标识这是一个响应包源MAC和目标MAC与请求包正好交换请求包的源变成了响应包的目标五、完整ARP通信流程图主机A (192.168.1.2) 交换机 主机B (192.168.1.1) MAC: AA:AA:AA:AA:AA:AA MAC: BB:BB:BB:BB:BB:BB | | | | ① ARP请求广播 | | | 谁是192.168.1.1 | | | 目的MAC: FF:FF:FF:FF:FF:FF | | | -------------------------- | --- 广播到所有端口 --- | | | | | | ② 收到请求 | | 发现问的是自己 | | 记录A的IP和MAC | | | | ③ ARP响应单播 | | | 我是MACBB:BB:BB:BB:BB:BB| | | 目的MAC: AA:AA:AA:AA:AA:AA | | | -------------------------- | ------- 单播转发 ---------| | | | | ④ 更新ARP缓存 | | | 记录B的IP-MAC映射 | | | | | | ⑤ 开始正常通信 | |六、通过命令行观察ARP缓存变化在触发ARP请求之前和之后使用arp -a命令查看缓存变化清空缓存后请求前C:\ arp -a 没有列出任何条目。Ping之后缓存已更新C:\ arp -a可以看到目标IP192.168.0.103对应的MAC地址已经被记录到ARP缓存表中。七、无偿ARPGratuitous ARP7.1 什么是无偿ARP当主机配置了新的IP地址时会主动发送一个ARP请求询问自己的IP地址对应的MAC-5。7.2 报文特征源IP 目的IP 自己的IP目的MAC FF:FF:FF:FF:FF:FF广播Opcode 1request7.3 作用IP地址冲突检测如果收到响应说明网络上已有其他设备使用该IP-5更新其他设备的ARP缓存当网卡更换或IP变更时通知其他设备更新缓存7.4 抓包示例如果两台设备设置了相同的IP地址Wireshark中会看到类似下面的现象No. Time Source Destination Info 1 0.000 PC1 (192.168.1.2) Broadcast Gratuitous ARP for 192.168.1.2 2 0.003 PC2 (192.168.1.2) PC1 ARP Response - IP already in usePC2在设置IP后会发出无偿ARPPC1收到后会回复响应提示IP冲突-5。八、常见问题排查8.1 为什么抓不到ARP包确认过滤器正确输入arp小写确认ARP缓存为空先用arp -d清空缓存尝试ping不存在的IPping一个局域网内不存在的IP会持续发送ARP请求检查网卡选择确保选择了正在使用的网卡不是虚拟网卡8.2 ARP包为什么是42字节以太网最小帧长是64字节ARP包本身28字节 以太网头部14字节 42字节不足64字节的部分由填充字段Padding补齐。九、总结ARP请求包 vs 响应包对比对比项ARP请求包ARP响应包Opcode1 (request)2 (reply)以太网目的MACff:ff:ff:ff:ff:ff广播请求方的MAC单播目标MAC字段00:00:00:00:00:00未知请求方的MAC已知发送方请求解析的主机被查询的主机传播范围广播域内所有设备仅发给请求方一句话总结ARP请求是“谁有XXX IP的MAC地址请告诉我”通过广播发出ARP响应是“我是XXX IP我的MAC是YYY”通过单播回复。ARP一个不存在的ip地址ARP时如果目标ip不存在咋办这是一个很实际的问题。答案是如果目标IP地址在本地局域网中不存在发送方会持续发送ARP请求直到超时失败最终返回“目标主机不可达”的错误。下面详细拆解这个过程。一、场景描述假设主机AIP192.168.1.2MACAA:AA:AA:AA:AA:AA目标IP192.168.1.100这个IP地址在当前局域网中没有任何设备使用主机A执行ping 192.168.1.100。二、完整流程第1步检查ARP缓存主机A先查看自己的ARP缓存表C:\ arp -a 没有找到 192.168.1.100 的条目缓存中没有目标IP的MAC地址需要发送ARP请求。第2步发送ARP请求广播主机A构造ARP请求包以太网目的MAC FF:FF:FF:FF:FF:FF广播请求内容谁是 192.168.1.100请告诉 192.168.1.2这个广播包被交换机转发到局域网内的所有设备。第3步等待响应超时机制正常情况如果目标IP存在该设备会回复ARP响应单播异常情况目标IP不存在没有任何设备响应主机A会等待一段时间通常是1秒左右如果没有收到响应会再次发送ARP请求。第4步重试机制不同操作系统的重试策略操作系统重试次数总超时时间Windows3次约3秒Linux3次约3秒macOS3次约3秒重试过程时间 0.000秒发送第1个ARP请求 时间 1.000秒未收到响应发送第2个ARP请求 时间 2.000秒未收到响应发送第3个ARP请求 时间 3.000秒仍未收到响应判定失败第5步失败结果ARP解析失败后主机A无法封装以太网帧应用程序如ping会收到错误WindowsC:\ ping 192.168.1.100 Pinging 192.168.1.100 with 32 bytes of data: 请求超时。 请求超时。 请求超时。Linux$ ping 192.168.1.100 From 192.168.1.2 icmp_seq1 Destination Host Unreachable From 192.168.1.2 icmp_seq2 Destination Host Unreachable关键区别Windows显示请求超时Linux显示目标主机不可达。

更多文章