arping必须从另一台同网段主机运行,不能在本机检测自身ip冲突,因linux内核会对本机ip的arp请求强制应答,掩盖真实冲突;若输出多条不同mac的unicast reply即确认冲突。

arping 是唯一能直接、可靠验证单个 IP 是否被多设备占用的命令,但必须从另一台同网段机器运行,且不能查自己。
为什么不能在本机用 arping 检自己的 IP
Linux 内核会拦截发往本机 IP 的 ARP 请求并自响应,无论是否有其他设备真正在用这个 IP。结果永远显示“Reply”,完全无法反映真实冲突情况。
常见错误就是:在 A 机器上执行 sudo arping -c 3 192.168.1.100,看到回复就以为没冲突——其实可能 B 机器也配了 192.168.1.100,但你根本看不到。
arping 输出里看到两个不同 MAC 就是铁证
在另一台干净机器(比如 192.168.1.200)上运行:sudo arping -c 5 192.168.1.100
关键看输出中 Unicast reply from 行的 MAC 地址部分:
- 如果所有回复都带同一个 MAC(如
[50:7b:9d:25:29:59]),说明该 IP 当前只被一台设备使用 - 如果出现至少两个不同 MAC(如
[40:f4:ec:76:79:c2]和[50:7b:9d:25:29:59]),冲突已确认存在 - 注意:重复出现同一 MAC 多次不算问题;只有 MAC 不同时才代表多设备应答
如何快速定位冲突源设备
拿到冲突的两个 MAC 后,下一步不是猜,而是比对:
- 在疑似“合法”主机(比如你管理的服务器)上执行
ip link show eth0 | grep "link/ether",确认它的真实 MAC - 用
arp-scan --interface=eth0 --localnet | grep "192.168.1.100"扫全网,看哪个 MAC 出现在哪台设备旁(arp-scan输出格式为IP\tMAC\tvendor) - 如果扫描结果里只有一行含该 IP,但
arping却收到两个 MAC,说明其中一个是网关或启用了 ARP 代理的设备(如某些无线 AP、防火墙),需人工排除 - 别依赖
arp -n缓存表——它可能过期、被污染,或只记录最近一次应答的 MAC
权限、安装和网络接口指定容易漏掉
arping 必须 root 权限,普通用户运行会报 Operation not permitted;且默认走主路由接口,跨 VLAN 或多网卡时易出错:
- 没装?Ubuntu/Debian:运行
sudo apt install iputils-arping;CentOS/RHEL:用sudo yum install iputils或sudo dnf install iputils - 不确定走哪个网卡?加
-I显式指定,例如:sudo arping -I eth1 -c 3 192.168.1.100 - 目标设备若禁 ARP(极少见),
arping会超时,但这不等于无冲突——得结合arp-scan全网扫交叉验证
arping 显示两个 MAC,却查不到其中一台设备在哪——这时候交换机端口 MAC 表、DHCP 服务器租约日志、甚至物理拔线排查,才是下一步。











