2010-05-20 97 views
5

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

我希望我的程序能够“自动感知”正在网络中连接的新计算机(它们位于同一网络中)。就像连接到电脑的USB设备一样。

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

还有其他优雅的方法吗?

谢谢!

回答

4

监听ARP请求是执行此操作的标准方法。不管DHCP与否,任何希望与外界通信的连接计算机都必须为默认路由器的地址发出ARP请求。该请求将以广播形式发布,并包含源接口的MAC和IP地址。

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

(这对IPv6的作品或多或少以同样的方式,除非你需要寻找的邻居发现或路由器soliciation包代替。)

一样的答案提到,如果你有一个开关,你可以telnet或使用SNMP,您可以提取MAC表。这将为您提供交换机中每个端口上的MAC地址列表。但是,如果您想要IP地址,您仍然需要监听ARP:s。

另一方面,如果您有权访问网络上的默认网关,那么您也可以在那里查看ARP表。这将为您提供MAC和IP地址给最近(与最近的不同值)进行通信的任何人。

1

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

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

如果失败了,我所能想到的只是一个挑战/回应的事情(例如ping通它们)或者通过检测它们发送的流量(参见this question也许是一个起点?),这两者都不会让我成为一个优雅做法。

+0

侦听DHCP流量可能是一种方法,因为它总是广播。 (DHCP也不能以任何其他方式完成;附加机器不知道该与谁进行交谈......) – 2010-05-20 12:39:56

+0

我不太了解如何使用“托管”交换机。你能稍微解释一下吗? – Ian 2010-05-20 13:15:55

+0

观看ARP流量是另一种方式 - 这也是通过广播发送的,并且新机器不会在没有发送ARP请求的情况下进行多少通信。 – caf 2010-05-21 01:38:26