【问题标题】:Automatically detect a new computer connected to the network自动检测连接到网络的新计算机
【发布时间】:2010-05-20 12:10:07
【问题描述】:

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

我希望我的程序“自动感知”连接到网络上的新计算机(它们在同一个网络上)。就像 USB 设备连接到计算机一样。

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

还有其他优雅的方法吗?

谢谢!

【问题讨论】:

    标签: networking


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      如果做不到这一点,我所能想到的要么是挑战/响应的事情(例如 ping 它们),要么是通过检测从它们发送的流量(请参阅this question 可能是一个起点?),这两者都没有让我印象深刻优雅的方法。

      【讨论】:

      • 监听 DHCP 流量可能是一种方法,因为它总是广播。 (DHCP 也不能以任何其他方式完成;附加机器不知道与谁交谈......)
      • 我不太明白如何为此使用“托管”开关。你能再解释一下吗?
      • 监视 ARP 流量是另一种方式 - 这也是通过广播发送的,如果不发送 ARP 请求,新机器将不会进行太多通信。
      • @Ian 可能用“托管”一词来形容它并不合适,但我知道我们的 hp procurve 交换机会公开此类信息,并且有多种方式可以与他们交谈。 hp 有自己的软件 (procurve.com/products/management/ProCurve_Manager/overview.htm),我猜有标准接口。
      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2012-03-01
      • 2017-08-20
      相关资源
      最近更新 更多