为什么 arp -a 不显示连接到 WIFI 的所有设备?

物联网 联网 无线上网 无线的 路由器 IP地址
2021-06-13 10:36:42

我正在尝试查看连接到我的 WIFI 的所有设备的 IP。每个人都建议arp -a在终端中使用该命令,但是当我这样做时,我总是得到相同的设备列表。我尝试连接新的,但它们没有出现。但是,如果我在浏览器中连接到路由器管理站点 (192.168.1.1),我可以看到我正在寻找的所有设备。

如何使用 获取终端中的所有设备arp -a是否有其他方法可以获得完整列表?

2个回答

ARP 是地址解析协议

TCP/IP 堆栈使用 ARP 在 IP 地址(如 10.0.1.1)和硬件(通常为 MAC)地址之间进行映射,如 00:11:22:AA:BB:CC。由于执行映射需要开销,因此计算机会维护最近映射地址的缓存。该命令arp -a显示缓存。有时缓存还可能包含已公布其地址或以其他方式与您的计算机联系的计算机的映射。缓存条目将在一段时间后过期,因此如果您的计算机有一段时间没有联系另一个条目,您将不会在缓存中看到另一个条目。

没有理由期望此缓存会包含网络上每台计算机的 IP 地址。这不是它的作用,没有人应该暗示它将包含网络上每台计算机的 IP 地址。那是不正确的。

您可以尝试遍历网络上的所有 IP 地址并 ping 每个地址。这将强制您的计算机尝试使用 ARP 将 IP 地址映射到每台计算机的硬件地址。您还可以尝试 ping 网络的广播地址(ping 192.168.1.255在这种情况下)。

完成后,arp -a将提供一份更详尽(但仍可能不完整)的网络计算机列表。请注意,ping 广播地址可能会在您的网络上造成大量流量,并且在其他人的网络上可能不受欢迎。此外,某些计算机可能会选择不响应。

如果你想扫描网络,一个更好的工具是网络扫描仪,比如nmap在这种情况下,您可以尝试运行nmap -sn '192.168.1.*'.

请注意,根据您提供的选项,nmap 也会愉快地扫描端口以发现正在运行的服务。它可能很慢。它还可以触发安全监视器。一些组织会将 nmap 扫描视为一种敌对行为。

请注意,您可能必须在计算机上安装 nmap 才能使用它。

此外,主机可能会隐藏 nmap 的扫描,因此它不一定会提供网络上所有计算机的完整列表。

最终你已经回答了你自己的问题。只有您的路由器(和 wifi 接入点,如果它是独立的)知道您网络上的所有计算机,并且最终只有它可以提供可靠的列表。

如果它支持它,您可以尝试使用SNMP,简单网络管理协议,旨在与其他设备通信和管理路由器。SNMP 可以报告路由器的 DHCP 租用列表,这是路由器分配给网络上计算机的 IP 地址的最终列表(但请注意,已配置为使用静态 IP 地址的计算机可能不会显示在此处)。它还可以访问路由器的 ARP 缓存。并且根据 wifi 接入点,它可能能够返回接入点知道已连接的设备列表。在这些之间,您可以拼凑出网络上计算机的完整列表。

为此,您需要在计算机上安装 SNMP 管理器软件。您如何执行此操作以及如何使用它与您的路由器或接入点通信在很大程度上取决于您的设置;如果您需要这方面的帮助,请尝试弄清楚并发布有关的新问题。

它可以,但是 ARP 表中未使用的记录有大约 5 分钟的超时。所以条目将超时。

您可能可以延长该超时时间,但更快的答案是首先扫描 IP 网络。

fping -a -g 192.168.1.0/24  ;  arp -an | grep -v incomplete

删除不完整的记录会删除没有找到主机的记录,并-n节省等待一堆无论如何都不起作用的反向 DNS 查找。

我喜欢fping但还有其他选项,例如 arping 或 nmap 或编写使用 ping 的脚本。