是否有一种优雅的方法可以让程序检测到连接到网络的新计算机?
我希望我的程序能够“自动感知”在网络上连接的新计算机(它们位于同一网络上)。就像USB设备连接到计算机一样。
我现在正在做的是不时保存网络中所有计算机的列表。另一种方法是PING子网上所有可用的IP。
还有其他优雅方法吗?
谢谢!
答案 0 :(得分:4)
侦听ARP请求是执行此操作的规范方法。无论是否独立于DHCP,任何希望与外界通信的连接计算机都必须对默认路由器的地址发出ARP请求。此请求将作为广播发出,并包含源接口的MAC和IP地址。
如果另一台计算机使用DHCP,它将为其自己的地址发出ARP请求,作为重复地址检测的一部分,这也是您可以窥探的广播。
(这与IPv6的工作方式大致相同,但您需要寻找邻居发现或路由器请求数据包。)
与提到的答案一样,如果您有可以远程登录或使用SNMP的交换机,则可以提取MAC表。这将为您提供交换机中每个端口上的MAC地址列表。但是,如果您需要IP地址,则仍需要监听ARP:s。
另一方面,如果您可以访问网络上的默认网关,还可以查看其中的ARP表。这将为最近(与最近的不同值...)通信的任何人提供MAC和IP地址。
答案 1 :(得分:1)
如果你有某种托管交换机,你可能会连接到那个,这将是一个相当优雅的方法。
如果您在域中,则可以从域控制器获取加入域的所有计算机的列表。
如果做不到这一点,我所能想到的只是挑战/回应(例如ping他们)或者检测他们发送的流量(参见this question可能作为起点?),这些都没有打击我作为一种优雅的方法。