arping 是 iputils 软件包中一个非常实用的网络工具。它的核心功能是向相邻主机发送 ARP 请求,通过在指定网络接口上对目标主机进行探测(类似于 ping 但工作在数据链路层),可用于检查主机存活、诊断二层连通性等多种场景。
一、什么是 arping?
官方文档地址:https://man.he.net/man8/arping
简单来说,arping 就是一个向局域网内相邻主机发送 ARP 请求的工具。你可以把它理解为二层(数据链路层)的 ping 命令。它是 iputils 软件包的一部分,这个包也包含了我们熟悉的 ping、tracepath 等工具。
[root@master1 ~]# rpm -ql iputils | grep bin
/usr/bin/ping
/usr/bin/ping6
/usr/bin/tracepath
/usr/bin/tracepath6
/usr/sbin/arping
/usr/sbin/clockdiff
/usr/sbin/ifenslave
/usr/sbin/ping6
/usr/sbin/rdisc
/usr/sbin/tracepath
/usr/sbin/tracepath6
二、命令参数详解
先来看看 arping 支持哪些参数。理解每个参数的作用,是灵活运用它的前提。
[root@master1 ~]# arping -h
Usage: arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination
-f 收到第一个回复后立即退出(快速模式)。
-q 静默模式,不显示输出信息。
-b 持续发送广播包,不切换为单播模式(默认行为是先广播,收到回复后切换为单播)。
-D 启用重复地址检测模式(DAD,Duplicate Address Detection),用于检测本地网络中是否存在 IP 冲突。
-U 主动 ARP 模式(Unsolicited ARP),主动更新邻居主机的 ARP 缓存(无需等待请求)。
-A ARP 回复模式(ARP Answer),模拟回复邻居主机的 ARP 请求(用于更新邻居缓存)。
-V 显示程序版本并退出。
-c 次数 指定发送的 ARP 请求包数量。
-w 超时 设置等待回复的超时时间(秒)。
-I 设备 指定使用的网络接口(如 eth0、ens33)。
-s 源地址 指定 ARP 请求包的源 IP 地址。
destination : 需要探测或操作的 IP 地址。
三、实战用例解析
掌握了参数,我们通过几个典型场景来看看 arping 具体怎么用。
1. 快速检测目标主机是否存活(二层连通性)
这是最基础的用法,用于确认目标主机是否在线以及二层网络是否通畅。
[root@master1 ~]# arping -f -c 99 -I eno1 172.25.61.xxx
ARPING 172.25.61.106 from 172.25.61.52 eno1
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 1.034ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
命令解析:
-f:快速模式。只要收到第一个响应,就立即停止发送并退出。所以你指定了发 99 个包 (-c 99),实际只发了 1 个。
-I eno1:指定使用 eno1 这块网卡发送请求。
172.25.61.xxx:需要探测的目标 IP 地址。
这个输出不仅告诉你主机在线,还显示了它的 MAC 地址 [00:0C:29:6D:9E:C5] 和响应时间 1.034ms,信息非常直接。
2. 静默检测 IP 冲突(DAD 模式)
在给服务器配置静态 IP 或者 DHCP 服务器分配地址前,最好先检测一下这个 IP 是否已经被网络中的其他设备占用。这在自动化运维脚本中尤其有用。
[root@master1 ~]# arping -q -D -c 99 -I eno1 172.25.61.106
# 查看返回值
[root@master1 ~]# echo $?
1
命令解析:
-q:静默模式,不输出任何信息。
-D:启用重复地址检测(DAD)。如果收到任何回复,就认为该 IP 地址存在冲突。
- 返回值解读:
0:无冲突,这个 IP 地址当前可用。
1:存在冲突,这个 IP 地址已被其他设备占用。
3. 强制更新邻居主机的 ARP 缓存
当你的服务器更换了网卡(MAC地址变更)或者 IP 地址漂移后,可能需要主动通知网络中的其他主机更新它们的 ARP 缓存表,使用 -U 参数。
[root@master1 ~]# arping -U -I eno1 172.25.61.106
bind: 无法指定被请求的地址
[root@master1 ~]# arping -U -I eno1 172.25.61.52
ARPING 172.25.61.52 from 172.25.61.52 eno1
^CSent 2 probes (2 broadcast(s))
Received 0 response(s)
命令解析:
为什么第一次命令会报错 bind: 无法指定被请求的地址?这是因为在使用 -U 模式时,arping 默认会尝试以目标 IP (172.25.61.106) 作为源 IP 来发送 ARP 通告。Linux 内核出于安全考虑,不允许你随意使用一个不属于本机网卡的 IP 地址作为源地址发送数据包。第二次命令成功,是因为 172.25.61.52 这个 IP 配置在本机的 eno1 网卡上。
4. 持续广播探测目标(绕过单播切换)
默认情况下,arping 在发送第一个广播包并收到回复后,后续的请求会改为单播发送。-b 参数可以强制它一直使用广播模式。
[root@master1 ~]# arping -b -c 5 -I eno1 172.25.61.106
ARPING 172.25.61.106 from 172.25.61.52 eno1
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 0.884ms
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 0.807ms
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 0.808ms
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 0.958ms
Unicast reply from 172.25.61.106 [00:0C:29:6D:9E:C5] 0.890ms
Sent 5 probes (5 broadcast(s))
Received 5 response(s)
用途:
- 诊断某些特殊网络设备(如老旧交换机)对单播/广播处理异常的问题。
- 绕过目标主机上可能存在的、过滤单播 ARP 请求的防火墙规则。
5. 结合 tcpdump 抓包分析(高级调试)
要深入理解 ARP 通信过程,或者排查 ARP 欺骗等安全问题,可以将 arping 和 tcpdump 结合使用。
在一个终端运行 arping 探测:
#运行 arping 探测目标
[root@master1 ~]# arping -b -c 99 -I eno1 172.25.61.52
ARPING 172.25.61.52 from 172.25.61.52 eno1
Sent 99 probes (99 broadcast(s))
Received 0 response(s)
同时在另一个终端(或同一台机器的另一个会话)启动抓包:
[root@master1 ~]# tcpdump -i eno1 -n arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:12:48.435901 ARP, Request who-has 192.168.200.237 tell 192.168.200.212, length 46
21:12:48.445118 ARP, Request who-has 192.168.200.1 tell 192.168.200.228, length 46
21:12:48.445881 ARP, Request who-has 192.168.200.193 tell 192.168.201.235, length 46
21:12:48.535890 ARP, Request who-has 172.25.61.52 (Broadcast) tell 172.25.61.52, length 28
21:12:48.567786 ARP, Request who-has 172.25.61.151 tell 172.25.61.50, length 46
...
通过分析抓包结果,你可以清晰地看到网络中所有的 ARP 请求与回复。例如,可以检查是否有异常的、重复的 ARP Reply(这可能预示着 ARP 欺骗攻击),或者确认你的 arping 请求是否真的被发出了。
四、补充信息
相关命令
ping(8), clockdiff(8), tracepath(8)
作者
由 Alexey Kuznetsov (mailto:kuznet@ms2.inr.ac.ru) 编写。
安全说明
- 运行
arping 需要 CAP_NET_RAW 权限。
- 不建议以
set-uid root 权限运行此程序,因为普通用户可能利用它修改邻居主机的 ARP 缓存,从而实施中间人攻击等。
五、总结
arping 是一个基于 ARP 协议的实用网络探测工具,它绕过了网络层(IP层),直接在数据链路层工作。这使得它在诊断本地网络(二层)连接问题时非常高效,比如 IP 地址冲突检测、邻居主机存活状态检查、以及手动维护 ARP 缓存等场景,都是 ping 命令无法替代的。
如果你在 Linux 系统管理或网络运维中经常需要和局域网内的设备打交道,熟练掌握 arping 无疑能让你的工具箱更加充实。希望本文的实战案例能帮助你更好地理解和使用这个命令。更多网络与系统管理的实战技巧,欢迎在云栈社区交流探讨。