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

5
有没有一种优雅的方法使程序检测到连接到网络的新计算机?
我希望我的程序能够“自动感知”网络上连接的新计算机(它们在同一个网络上)。就像将USB设备连接到计算机一样。
目前我正在做的是定期保存网络中所有计算机的列表。另一种方法是PING子网上的所有可用IP地址。
是否有其他优雅的方法?
谢谢!
2个回答

5
监听ARP请求是实现这一目的的规范方法。无论是否使用DHCP,任何想要与外部世界通信的连接计算机都必须对默认路由器的地址进行ARP请求。该请求将作为广播发送,并包含源接口的MAC和IP地址。
如果其他计算机使用DHCP,则它将在重复地址检测过程中对自己的地址进行ARP请求,这也是您可以监听的广播。
(IPv6的工作方式基本相同,只需寻找邻居发现或路由器贡献数据包即可)。
正如答案所暗示的那样,如果您有一个可以使用telnet或SNMP的交换机,则可以提取MAC表。这将为您提供交换机每个端口上的MAC地址列表。但如果您需要IP地址,则仍需要监听ARP。
另一方面,如果您可以访问网络上的默认网关,也可以查看其中的ARP表。这将为您提供最近(不同的“最近”值)与其通信的任何人的MAC和IP地址。

1

如果您有某种托管交换机,您可能可以连接到该交换机,这将是一种相当优雅的方法。

如果您在域上,您可以从域控制器获取加入域的所有计算机列表。

如果失败了,我所能想到的就是通过挑战/响应方式(例如ping它们)或检测来自它们发送的流量(也许可以参考this question 作为一个起点?),但这两种方法都不是很优雅。


监听DHCP流量可能是一种方法,因为DHCP总是广播的。(DHCP也不能通过其他方式完成;连接的计算机不知道要与谁通信...) - Donal Fellows
我不太明白我如何使用“托管”交换机来完成这个。你能再解释一下吗? - Ian
监听ARP流量是另一种方式 - 它也通过广播发送,而新设备如果不发送ARP请求,就很少进行通信。 - caf
1
@Ian,也许“managed”不是一个恰当的术语,但我知道我们的HP ProCurve交换机公开了这种信息,并且有很多方法可以与它们进行通信。HP有自己的软件(http://www.procurve.com/products/management/ProCurve_Manager/overview.htm),我想也有标准接口。 - Colin Pickard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接