arp命令在Linux中用于查看和管理IPv4 ARP缓存表,仅显示本机曾通信过的设备IP与MAC映射;需用arp -n(推荐)或arp -a查看,结合ip -br addr show定位接口、用ping或nmap探测补全条目,并通过ip neigh show获取更详细状态。

在 Linux 中,arp 命令用于查看和管理内核的 IPv4 ARP 缓存表,它记录了局域网内已通信过的设备 IP 与 MAC 地址的映射关系。但要注意:ARP 表不是“全量扫描结果”,而是**按需生成、动态缓存**的——只有本机曾与之通信(如 ping、ssh、访问网页等)的设备才会出现在其中。
基础查看:arp -a 或 arp -n
最常用的是以下两个命令:
- arp -a:显示所有 ARP 条目,主机名优先(可能触发 DNS 解析,稍慢)
- arp -n:以纯 IP 地址形式显示,跳过主机名解析,更清晰、更推荐
输出示例(arp -n):
? (192.168.1.1) at c0:d1:93:b6:87:c7 [ether] on eth0<br>? (192.168.1.25) at 50:84:92:7d:3e:da [ether] on eth0<br>_gateway (192.168.1.1) at c0:d1:93:b6:87:c7 [ether] on eth0
其中 ? 表示无反向解析名,[ether] 指以太网类型,on eth0 表明该条目属于 eth0 接口。
限定接口或网段,避免干扰
多网卡设备(如有线+Wi-Fi+Docker 虚拟网卡)运行 arp -a 会混杂多个接口的数据。可指定接口过滤:
- 先查当前活跃网卡:
ip -br addr show | grep UP - 再查该接口 ARP 表:
arp -n -i eth0(把eth0换成你实际的接口名)
这样只显示来自指定网卡的 ARP 条目,干净且目标明确。
让缓存更完整:主动探测局域网设备
刚启动或长时间未通信时,ARP 表往往只有网关、DNS 等少数几条。要看到更多设备,需主动触发它们响应:
- 单点探测:
ping -c 1 192.168.1.1 && ping -c 1 192.168.1.100 - 批量扫网段(推荐):
nmap -sn 192.168.1.0/24(需安装 nmap)或使用 bash 循环:for i in {1..254}; do ping -c 1 -W 1 192.168.1.$i > /dev/null & done; wait
探测完成后立即执行 arp -n,列表通常显著变长。
识别关键信息与异常状态
ARP 表中不标“静态”或“动态”,但可通过行为判断:
- 正常条目类型为
[ether],状态隐含在是否可达——若某 IP 长期存在但 MAC 是00:00:00:00:00:00或显示incomplete,说明上次 ARP 请求失败(设备离线、防火墙拦截、IP 冲突) - 同一 IP 对应多个不同 MAC → 强烈提示 IP 地址冲突
- 大量条目但缺你熟悉的设备 → 该设备未与本机产生过三层通信(比如仅连 Wi-Fi 但没互访)
如需更详细字段(如老化时间、状态标志),可用 ip neigh show 替代 —— 这是现代 Linux 更推荐的替代命令,输出含 REACHABLE、STALE、FAILED 等状态。











