arp命令仅显示本机arp缓存,无法直接检测冲突;需结合ip neigh show查“一ip多mac”或mac跳变,tcpdump抓arp流量观察异常响应,arping从第三方主机交叉验证,并配合清缓存与根源排查。

arp 命令本身不能直接“检测冲突”,它只显示本机当前缓存的 IP-MAC 映射关系。真正用于排查二层邻居发现冲突的,是观察 arp 输出是否异常,再结合其他工具交叉验证。核心逻辑是:ARP 表混乱是结果,不是原因;你要从表里找线索,再逆向定位问题源头。
看 arp 表有没有“一 IP 多 MAC”或“MAC 频繁跳变”
运行 ip neigh show(推荐)或 arp -n,重点检查:
- 同一 IP 地址是否对应两个及以上不同 MAC(例如
192.168.1.50同时映射到00:11:22:aa:bb:cc和33:44:55:dd:ee:ff)→ 高概率存在 IP 冲突或 ARP 欺骗 - 某个 IP 的状态反复在
REACHABLE、STALE、FAILED或INCOMPLETE之间切换 → 说明本机发 ARP 请求后收不到稳定应答,可能是目标离线、被拦截,或响应方不一致 - 网关 IP(如
192.168.1.1)对应的 MAC 是否与你已知的真实网关 MAC 不符 → 可能遭遇中间人攻击或配置错误
抓包确认谁在真正发 ARP 响应
仅看缓存不够,要看到实时流量:
- 执行 tcpdump -i eth0 -n arp -c 20(替换为实际网卡),观察是否有多个设备对同一个 IP 发送
Reply - 特别留意
gratuitous ARP(免费 ARP)包:如果某台设备频繁广播 “192.168.1.100 is at xx:xx:xx:xx:xx:xx”,而它并非该 IP 的合法持有者,就是冲突源信号 - 若发现 eth0 和 eth1 同时应答同一个目标 IP(比如都回复
192.168.1.57),说明多网卡同网段未设arp_ignore=1
配合 arping 从第三方主机交叉验证
arp 命令查的是“我记住了谁”,arping 查的是“现在到底谁在应答”。二者必须配合:
- 不能在本机跑
arping 192.168.1.100—— Linux 内核会强制自应答,永远显示“通” - 必须换一台同网段的 Linux 主机(如跳板机),执行:
sudo arping -c 5 -I eth0 192.168.1.100 - 若输出中出现两条以上不同 MAC 的
Unicast reply,就坐实冲突;再比对你配置该 IP 的设备真实 MAC,不符的那个就是抢占者
清缓存只是临时止血,不是解决
发现异常后可快速清理,但不解决根源:
- 删单条:ip neigh del 192.168.1.100 dev eth0
- 清全部动态条目(推荐):ip neigh flush all(比
arp -d -a更彻底) - 清完立刻触发新解析:ping -c1 192.168.1.100 && ip neigh show | grep 192.168.1.100,看新学的 MAC 是否稳定











