免费ARP是检测IP地址冲突的核心机制,主机通过发送源IP=目标IP的ARP请求自检地址唯一性,若收到应答即确认冲突;tcpdump抓包过滤arp.opcode==2可捕获其报文,多MAC宣告同一IP即为冲突确证。

直接用 tcpdump 捕获并分析 gratuitous ARP(免费ARP)报文,是定位局域网 IP 地址冲突最有效、最底层的手段。它不依赖上层工具或日志,能真实反映“谁在宣称自己是某个IP”——这正是地址冲突漂移的核心证据。
确认是否真有 gratuitous ARP 流量
运行以下命令实时监听免费ARP:
tcpdump -i eth0 arp and "arp.opcode == 2" -nn -v
说明:
- -i eth0 替换为你的实际网卡名(可用 ip -br a 查看)
- arp.opcode == 2 精确过滤 ARP Reply(即免费ARP的典型形式)
- -nn 避免反向解析,加快显示速度
- -v 显示详细信息,包括发送方IP和MAC
若看到类似输出:
10:22:34.123456 IP (tos 0x0, ttl 64, id 12345, offset 0, flags [none], proto UDP (17), length 46)<br> 192.168.1.100 > 192.168.1.100: ARP, Reply 192.168.1.100 is-at 00:11:22:33:44:55, length 28
→ 这就是标准的 gratuitous ARP:源IP = 目标IP,且携带 MAC 地址。连续出现多个不同 MAC 响应同一 IP,即表明存在地址冲突。
批量抓包并提取冲突线索
为避免漏掉瞬时报文,建议抓取一段时间后分析:
- 执行:
tcpdump -i eth0 -c 100 arp -w arp_gratuitous.pcap(捕获100个ARP包) - 再用
tshark快速统计哪些IP被多个MAC“声称”:
tshark -r arp_gratuitous.pcap -Y "arp.opcode == 2" -T fields -e arp.src.proto_ipv4 -e arp.src.hw_mac | sort | uniq -c | sort -nr
输出示例:
7 192.168.1.100 00:11:22:33:44:55<br> 5 192.168.1.100 50:7b:9d:25:29:59
→ 同一IP(192.168.1.100)被两个不同MAC反复宣告,冲突坐实。
结合 arping 主动探测验证
tcpdump 是被动观察,arping 可主动验证冲突是否存在:
arping -I eth0 -c 3 -D 192.168.1.100
说明:
- -D 启用“重复地址检测模式”(DAD),这是内核级检测逻辑
- 若返回 Received 1 response(s) 但 MAC 不是你本机的,或返回多条响应,即确认冲突
- 注意:该命令必须在**另一台同网段正常主机**上运行,不能在疑似冲突设备本身执行
清理与后续动作要点
捕获到 gratuitous ARP 并确认冲突后,不要只清缓存了事:
- 立即执行
ip neigh flush to 192.168.1.100(仅清目标IP)或ip neigh flush all(全清) - 检查本机配置:
ip addr show确认无重复IP;sysctl net.ipv4.conf.all.arp_ignore值应为 0(非负载均衡场景) - 登录交换机查 MAC 表:
show arp | include 192.168.1.100和show mac address-table | include <异常MAC>,定位物理端口 - 下线冲突设备,或修改其IP;若为DHCP环境,检查租约池是否与静态段重叠
免费ARP本身是防御机制,但被滥用或误配就会成为漂移信号。抓到它,就等于拿到了冲突现场的“监控录像”。


















