首先让我们看看为什么我们实际上需要ARP。
同一子网上的计算机使用第 2 层 MAC 地址直接相互通信。
因此,如果您尝试联系计算机的 IP 地址,您的计算机会计算该计算机是否在同一网络上。
如果计算机在同一网络上,您的计算机会检查其 arp 表是否已包含目标主机的 MAC 地址。如果该表不包含您的计算机需要获取的 MAC 地址。
这是通过 ARP 请求完成的(谁拥有 192.168.2.2,从您的示例输出中将 MAC 地址发送到 192.168.2.2)。
那么你怎么能自己发出 ARP 请求呢?
通过使用我们从上面了解到的信息,我们可以让您的计算机这样做:
- 删除您的 ARP 表(Mac OS X 上的 sudo arp -ad)
- 联系本地网络上的其他计算机(例如 ping 192.168.2.2)。
底层网络堆栈将检查它是否知道 MAC 地址(它不知道)并发出 ARP 请求。
在与其他主机通信时实际需要它之前,不需要已经有完整的 arp 表,但是如果您明确想要拥有它,则可以 ping 网络中的所有主机:
for i in {1..254}; do ping -c 1 192.168.2.$i > /dev/null &; done
这个命令
- ping 网络中的每个主机 (192.168.2.{1..254})
- 一次 (-c 1)
- 并将结果输出到 /dev/null
之后,您应该在 arp 表中拥有网络上的所有活动主机。
使用工具
您还可以使用arping 从命令行发出 IP 地址的 ARP 请求。