如何手动发送ARP请求?

网络工程 MAC地址 ip arp 转储
2021-07-12 15:28:23

我最近用 Tcpdump 嗅探了一个数据包“ ARP, Request who-has 192.168.2.3 tell 192.168.2.2, length 28”。

我想重现此消息,并从我的笔记本电脑向我决定的任何 IP 发送 ARP 请求。我怎样才能做到这一点 ?

我也会对强制刷新整个 ARP 表感兴趣。我知道删除表会更新它,但只有笔记本电脑这个操作真的很慢,重建完整的 ARP 表最多可能需要 1/2/5 分钟。有没有办法通过发送广播 ARP 请求来强制重建表?

我使用的是装有最新 OS Yosemite 10.10.4 的 Mac

谢谢你。

2个回答

首先让我们看看为什么我们实际上需要ARP。

同一子网上的计算机使用第 2 层 MAC 地址直接相互通信。

因此,如果您尝试联系计算机的 IP 地址,您的计算机会计算该计算机是否在同一网络上。

如果计算机在同一网络上,您的计算机会检查其 arp 表是否已包含目标主机的 MAC 地址。如果该表不包含您的计算机需要获取的 MAC 地址。

这是通过 ARP 请求完成的(谁拥有 192.168.2.2,从您的示例输出中将 MAC 地址发送到 192.168.2.2)。

那么你怎么能自己发出 ARP 请求呢?

通过使用我们从上面了解到的信息,我们可以让您的计算机这样做:

  1. 删除您的 ARP 表(Mac OS X 上的 sudo arp -ad)
  2. 联系本地网络上的其他计算机(例如 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 请求。

如果您需要重现相同的数据(再次获得相同的数据包),请使用tcpdump(在接收端)将数据包捕获到文件中,并使用tcpreplay工具(在发送端)重放捕获的数据包

使用 tcpdump 捕获数据包时,使用“-w”选项将数据包保存到文件中。文件中捕获的数据包可以使用 tcpreply 重放。