我希望能够通过以太网将 Raspberry Pi 连接到公司网络,并使用 ARP 发现其 IP 地址。我希望能够在 Windows 和 *nix 计算机上执行此操作。
但是,当我最初将 RPi 连接到网络后,我无法使用 ARP 表找到它arp -a
(至少在 Windows 7 上)。如果我将 RPi 连接到显示器并使用它ifconfig
查找其在网络上的地址,我发现它使用的地址并不在 ARP 表中。
如果我尝试使用从 找到的地址连接到 RPI ifconfig
,则连接成功。执行此操作后,RPi 会显示在 ARP 表中的该地址处。
我对 ARP 的了解有限。谁能解释一下这是什么原因造成的,以及是否有办法让 RPi 在连接到网络后可靠地显示在 ARP 表中,或者使用某种扫描强制它显示出来。如上所述,我需要一个适用于 Windows 和 *nix 机器的解决方案。
答案1
要使用本地子网从 Windows 填充 arp 缓存,您不需要第三方工具,
小批量就足够了:
:: FindActivePIsInSubNet.cmd
@Echo off
Set "SubNet=172.16.1"
Set "PiMac=b8-27-eb"
Set "Ping=ping.exe -n 1 -l 0 -f -i 2 -w 1 -4"
For /L %%A in (1,1,254) do Start /HIGH /B %Ping% %SubNet%.%%A >nul 2>&1
For /F "tokens=1,2" %%A in ('arp -a^|findstr /i %PiMac%') do Echo IP=%%A MAC=%%B
运行只需几秒钟。
答案2
PC 上的 ARP 表不会列出网络上的所有设备。
它只显示知识产权和苹果您的 PC 最近与之通信的设备的地址。
如果您的 Windows 7 处于被动状态并且不与网络上的任何其他设备交互,则 ARP 表将为空。
当您尝试连接到其他 IP 地址时,您的 PC 就会使用广播地址发送 ARP 请求。如果目标 IP 存在,那么它会回复 ARP 请求,并且关系 IP/MAC 会在 PC 的 ARP 表上缓存一段时间。
如果时间过去了而您的电脑仍未与该设备通信,那么该条目将被删除。