arping 在测什么
arping 直接发送 ARP 请求并等待 ARP 应答,通信发生在二层,中间不经过路由。ping 走三层,只要路由可达就能通到别的网段;arping 只对同一广播域内的目标有效,收到应答就证明「这台设备与目标在同一个二层网络里且能通」。这个差异让它成为两类问题的专用工具:判断目标是否真的在同网段,以及检测同一 IP 被两台设备配置的地址冲突。
基本信息
| 适用平台 | Linux,需要 root 或 CAP_NET_RAW 权限 |
|---|---|
| 常用实现 | iputils 版用 -I 指定接口;Debian 的 arping 包(Habets 版)用 -i |
| 作用域 | 仅同一广播域(同 VLAN、同网段) |
| 关键选项 | -c 次数、-D 冲突检测、-U 无请求声明、-s 源地址、-w 超时 |
| Windows 替代 | arp -a 看邻居表,或用 arping 类第三方工具 |
典型使用场景
- 确认两台主机是否真的在同一网段:ping 通但 arping 无应答,说明中间走了路由
- 检测 IP 地址冲突:冲突检测模式下两个不同 MAC 都回应即为实锤
- 更换设备或网卡后刷新邻居表:用无请求应答让对端立即更新缓存
- 二层连通性验收:新布线的接入端口上验证能否拿到对端 MAC
- 配合交换机 MAC 表定位:确定某个 IP 当前对应哪个物理端口
基本用法(iputils arping)
基本用法(iputils arping)
arping -c 3 -I eth0 10.0.0.5 # 二层探活:收到 Reply 说明同网段可达
arping -D -c 3 -I eth0 10.0.0.5 # 冲突检测:两个不同 MAC 都回应即为 IP 冲突
arping -U -c 1 -I eth0 -s 10.0.0.5 10.0.0.5 # 无请求 ARP,刷新对端邻居缓存
arping -c 2 -I eth0 -s 10.0.0.5 10.0.0.1 # 源地址不同时先绑定本机地址
arping -f -c 5 -I eth0 10.0.0.5 # 收到第一个应答即退出,脚本里更快输出与结论
| 输出表现 | 含义 | 下一步 |
|---|---|---|
| 收到 Reply,MAC 唯一 | 二层可达,地址无冲突 | 故障不在此段,继续往三层查 |
| 两个不同 MAC 交替应答 | 同网段存在 IP 冲突 | 结合交换机 MAC 表找出冲突主机 |
| 完全没有应答 | 目标不在同广播域,或被隔离 | 检查 VLAN、端口隔离与防火墙 |
| 应答来自网关 MAC | 目标 IP 由网关代答代理 ARP | 确认是否配置了代理 ARP 或跨网段 |
| 显示接口不存在或权限不足 | 接口名写错或缺少原始套接字权限 | 用 ip link 确认接口名,使用 root |
arping 只能用于同一个广播域:跨网段的目标本来就不会回 ARP,用它检查跨三层可达必然得到错误结论,这类场景要用 ping 或端口探测。
两个常用实现的参数不通用:iputils 版接口用 -I,Habets 版用 -i;写脚本前先执行 arping -h 确认本机是哪一版,否则会报参数错误。