arp 命令就是用来查看、添加和删除本地 ARP 缓存条目的工具,理解 ARP 的工作原理和 arp 命令的用法,对于网络故障排查和安全防护都非常有帮助。

ARP 协议简介(理解为什么需要 arp 命令)
在局域网中,设备之间通信依赖的是 MAC 地址(也叫物理地址或硬件地址),而不是 IP 地址,当你的电脑(主机 A)想要和同一局域网内的另一台电脑(主机 B)通信时,会发生以下过程:
- 检查 ARP 缓存:主机 A 首先会查看自己的 ARP 缓存(一个存储 IP 地址与 MAC 地址对应关系的临时表),看看是否已经有主机 B 的 IP 对应的 MAC 地址。
- 发送 ARP 请求:如果缓存中没有,主机 A 就会在局域网内广播一个 ARP 请求,这个请求的内容大致是:“谁是
168.1.100?请告诉168.1.10(主机 A 的 IP)”。 - 接收 ARP 响应:局域网内的所有设备都能收到这个广播,但只有 IP 地址是
168.1.100的主机 B 会响应一个 ARP 应答,这个应答的内容是:“168.1.100的 MAC 地址是AA:BB:CC:11:22:33”。 - 更新缓存并通信:主机 A 收到响应后,会将这个 IP-MAC 对存入自己的 ARP 缓存,然后使用这个 MAC 地址将数据帧发送给主机 B。
arp 命令就是用来管理这个“缓存表”的。
arp 命令的基本用法
arp 命令的语法通常如下:
arp [选项] [命令] [接口]
最常用的命令是 arp -a。

查看 ARP 缓存(最常用)
这是 arp 命令最核心的功能,用于查看当前系统的 ARP 缓存列表。
语法:
# 查看所有接口的 ARP 缓存 arp -a # 查看指定接口的 ARP 缓存 (Windows) arp -a <接口名称> # 查看指定接口的 ARP 缓存 (Linux/macOS) arp -i <接口名称>
示例:
在 Windows 上:

C:\> arp -a # 输出可能如下: # 接口: 192.168.1.10 --- 0xa # Internet 地址 物理地址 类型 # 192.168.1.1 00-1a-2b-3c-4d-5e 动态 # 192.168.1.100 aa-bb-cc-dd-ee-ff 动态
- 接口: 显示该条目属于哪个网络接口。
- Internet 地址: 对方的 IP 地址。
- 物理地址: 对方的 MAC 地址。
- 类型:
- 动态: 表示该条目是通过 ARP 协议自动学习并添加的,并且有一定的生存时间(TTL),超时后会自动删除,这是最常见的类型。
- 静态: 表示该条目是管理员手动添加的,不会被超时删除,除非手动删除,通常用于网关等关键设备,防止 ARP 欺骗。
在 Linux/macOS 上:
$ arp -a # 输出可能如下: # ? (192.168.1.1) at 00:1a:2b:3c:4d:5e [ether] on en0 # ? (192.168.1.100) at aa:bb:cc:dd:ee:ff [ether] on en0
- 表示该地址是已解析的。
at后面跟着 MAC 地址。[ether]表示以太网地址。on en0表示该条目所在的网络接口。
添加静态 ARP 条目
手动添加一个 IP 地址和 MAC 地址的绑定关系,这通常用于安全目的,防止 ARP 欺骗攻击。
语法:
# Windows arp -s <IP地址> <MAC地址> # Linux/macOS arp -s <IP地址> <MAC地址> <接口>
示例:
假设你将你的路由器(网关)IP 168.1.1 的 MAC 地址 00-1a-2b-3c-4d-5e 绑定为静态条目。
# Windows C:\> arp -s 192.168.1.1 00-1a-2b-3c-4d-5e # Linux $ sudo arp -s 192.168.1.1 00:1a:2b:3c:4d:5e en0
添加后,再用 arp -a 查看,你会发现对应条目的“类型”变成了“静态”。
删除 ARP 条目
当你怀疑 ARP 表项被污染(例如中了 ARP 欺骗病毒),或者想清除一个错误的静态条目时,可以使用此命令。
语法:
# Windows arp -d <IP地址> # Linux/macOS sudo arp -d <IP地址>
示例:
删除 IP 地址为 168.1.100 的 ARP 缓存条目。
# Windows C:\> arp -d 192.168.1.100 # Linux (需要 sudo 权限) $ sudo arp -d 192.168.1.100
注意: 在 Linux/macOS 上,删除操作通常需要管理员权限(sudo)。
其他常用选项
-n: 以数字形式显示地址(不尝试反向解析主机名),在 Linux/macOS 上非常有用,可以加快显示速度,避免因 DNS 解析延迟而卡住。# 在 Linux 上推荐使用 $ arp -n
-g: 与-a功能相同,用于显示 ARP 缓存。-a是更现代和推荐的方式。-v: 详细模式,显示更多信息,如接口类型等。
实战应用场景
场景1:排查网络问题(无法上网或访问特定主机)
当你无法访问局域网内的某台主机或无法上网时,可以检查 ARP 缓存。
- 确认网关 MAC 地址是否正确:
arp -a查看你的网关 IP(通常是168.1.1或168.0.1)对应的 MAC 地址。- 将这个 MAC 地址与路由器背面的标签上的 MAC 地址进行比对,如果不同,说明你可能遭受了 ARP 欺骗攻击,有人冒充了你的网关。
- 解决方案:暂时将网关设置为静态条目
arp -s <网关IP> <正确MAC地址>,并联系网络管理员进行安全排查。
场景2:防止 ARP 欺骗攻击
ARP 欺骗是一种常见的局域网攻击方式,攻击者发送伪造的 ARP 响应,欺骗你和网关,使你的网络流量经过攻击者,从而窃取信息(中间人攻击)。
- 主动防御:对于网络中的关键设备(如网关、文件服务器),可以手动添加静态 ARP 条目,使其不会被动态更新或伪造。
# 添加网关静态条目 arp -s 192.168.1.1 00-1a-2b-3c-4d-5e
场景3:查找局域网内其他设备的 MAC 地址
如果你想知道某个 IP 地址的设备对应的物理 MAC 地址(在 Wi-Fi 管理后台看到的设备),可以使用 arp 命令。
ping一下那个 IP 地址,确保它在线并且你的系统已经解析过它的 MAC 地址。ping 192.168.1.101
- 然后使用
arp -a查看缓存。arp -a | findstr 192.168.1.101 # Windows arp -a | grep 192.168.1.101 # Linux/macOS
不同操作系统的注意事项
| 功能 | Windows | Linux / macOS |
|---|---|---|
| 查看所有 | arp -a |
arp -a 或 arp -n (推荐) |
| 查看指定接口 | arp -a <接口名> |
arp -i <接口名> |
| 添加静态 | arp -s <IP> <MAC> |
sudo arp -s <IP> <MAC> <接口> |
| 删除条目 | arp -d <IP> |
sudo arp -d <IP> |
| 管理员权限 | 需要以管理员身份运行 CMD/PowerShell | 添加、删除操作需要 sudo |
| 命令 | 作用 | 示例 |
|---|---|---|
arp -a |
查看所有 ARP 缓存条目 | arp -a |
arp -n |
查看 ARP 缓存(数字形式,更快) | arp -n |
arp -s |
添加一个静态 ARP 条目 | arp -s 192.168.1.1 00-1A-2B-3C-4D-5E |
arp -d |
删除一个 ARP 条目 | arp -d 192.168.1.100 |
掌握 arp 命令是网络管理和故障排查的基础技能,通过它,你可以直观地看到网络层和数据链路层之间的地址映射关系,并利用它来解决实际问题或增强网络安全。
