自动检测连接到网络的新计算机

Ian*_*Ian 5 networking

有一种优雅的方法可以让程序检测连接到网络的新计算机吗?

我希望我的程序能够"自动感知"在网络上连接的新计算机(它们位于同一网络上).就像连接到计算机的USB设备一样.

我现在正在做的是不时保存网络中所有计算机的列表.另一种方法是在子网上PING所有可用的IP.

还有其他优雅的方法吗?

谢谢!

Jak*_*org 5

侦听 ARP 请求是执行此操作的规范方法。无论是否独立于 DHCP,任何希望与外界通信的连接计算机都必须向默认路由器的地址发出 ARP 请求。此请求将作为广播发出,并包含源接口的 MAC 和 IP 地址。

如果另一台计算机使用 DHCP,它会向自己的地址发出 ARP 请求,作为重复地址检测的一部分,这也是您可以监听的广播。

(这与 IPv6 的工作方式大致相同,除了您需要查找邻居发现或路由器请求数据包。)

就像提到的答案一样,如果您有一个可以远程登录或使用 SNMP 的交换机,则可以提取 MAC 表。这将为您提供交换机中每个端口上的 MAC 地址列表。但是,如果您想要 IP 地址,您仍然需要侦听 ARP:s。

另一方面,如果您可以访问网络上的默认网关,您还可以查看那里的 ARP 表。这将为您提供最近(对于最近的不同值...)与之通信的任何人的 MAC 和 IP 地址。