【问题标题】:Communicating with all network computers regardless of IP address与所有网络计算机通信,无论 IP 地址如何
【发布时间】:2011-02-27 08:54:28
【问题描述】:

我有兴趣找到一种方法来枚举本地网络上所有可访问的设备,而不管它们的 IP 地址如何。例如,在 192.168.1.X 网络中,如果有一台 IP 地址为 10.0.0.X 的计算机插入网络,我希望能够检测到该恶意计算机并最好与它通信。两台计算机都将运行此自定义软件。

澄清:我们希望处理我们不知道单台计算机的 IP 地址是什么并且不能保证它位于任何特定子网上的情况。我们所知道的是,这台计算机在物理上插入了同一个交换机,并且计算机有一个静态 IP 分配给它(但该 IP 可以是任何东西)。

我们可以远程访问网络上的一台计算机(例如 192.168.1.30),并且我们希望能够与网络上的所有其他计算机通信,无论它们的静态 IP 是否设置为 192.168.1。 x、10.0.0.x、10.45.21.7 等)

我意识到这是一个模糊的描述,并且该问题的完整解决方案将是冗长的,所以我真的在寻求帮助以找到正确的方向(“研究以这种方式使用类 XYZ 和 ABC”)而不是完整的实现。

我想要这个的原因是我们公司向成千上万的客户发送了映像计算机,每个客户都有不同的网络设置(大多数使用相同的 IP 方案,但很大一部分不使用,并且大多数没有启用 DHCP他们的网络)。一旦硬件到达,我们就很难在网络上安装它,尤其是如果 IP 方案不匹配,因为现场没有技术人员。理想情况下,我想设计某种控制台,以便在他们的主工作站上使用,它可以查看网络,找到所有运行我们软件的计算机,显示它们当前的 IP 地址,并允许您更改 IP。

编辑:除非我误解了什么,否则我认为我不能使用广播地址 255.255.255.255 来执行此操作。问题是流氓计算机没有返回原始计算机的路由,因此它会丢弃数据包。也许我误解了什么,但下图显示了我对会发生什么的理解。

【问题讨论】:

    标签: .net .net-3.5 networking .net-2.0 pinvoke


    【解决方案1】:

    假设您有一个与您的图片相似的测试平台

    1 - On the 192.168.1.30 PC get a dos prompt
    2 - Type  arp 10.0.0.47 <enter>
    3 - Type  arp -a <enter>
    

    10.0.0.47 有入口吗?

    【讨论】:

      【解决方案2】:

      根据我的经验,通常有三种方法。

      具有预定义数量的 IP 地址,当计算机上线时,它总是会尝试联系这些地址(例如 192.168.x.250、192.168.x.230 等),并让该计算机成为您可以使用的代理连接到网络上的所有其他计算机。所述软件将作为服务运行,每 5 个?分钟将重新连接到服务器以确认它仍然在线。

      或者,只需迭代扫描每个 IP 地址。是的,这需要时间,不,这不是“征税”,因为我们正在谈论硬件和软件。当然,您将以这种方式生成网络流量。而且相当多。但既然您知道可能的 IP 范围是什么,您就可以对其进行扫描。

      第三个正在播出,但有点不同。

      这些都是蛮力技术。我将从那里开始并酌情改进。奥卡姆剃刀和所有这些混乱。 (是的,我意识到这是准确的“不应该在没有必要的情况下假设复数”,但是说奥卡姆剃刀听起来更酷~我们应该试试爱因斯坦:“让一切都尽可能简单,但不要更简单”?)

      【讨论】:

        【解决方案3】:

        您可以使用多播/广播地址与您网络中的所有计算机进行通信。

        您可以参考此主题了解如何将该技术用于 .NET 应用程序:

        Multicast support in .Net

        这背后的基本概念是,您的客户端将监听该多播地址,当他们收到信息 (PING) 时,他们可以将其发回 (PONG)。

        【讨论】:

          【解决方案4】:

          您可以查看各种发现 协议,尤其是 SNMP 发现。你也可以做一些简单的事情,比如监听 UDP 广播和每台计算机,然后做出响应。请记住,所有这些解决方案都可能引入安全漏洞,而您的客户可能不会意识到这一点。

          【讨论】:

          • 由于 SNMP 在 UDP 上运行,而 UDP 在 IP 之上运行,计算机不需要已经在同一个子网上才能工作吗? SNMP 可以检测所有计算机,无论它们位于哪个子网中?
          • 一般来说,广播包不会被路由器转发。因此,每台计算机都需要能够接收来自 192.168.1.30 的广播数据包。如果这是不可能的,那么您可以按照 drachestern 的建议使用扫描。您还可以尝试通过扫描每台机器来构建 ad-hoc 网状网络。这很复杂,我会毫不犹豫地推荐它,但是您也许可以重用开源 p2p 软件,例如 gnutella 等。
          • 我没有尝试通过路由器,但是 10.0.0.x 无法回复发送到 192.168.1.x 的广播数据包,因为它没有返回源的路由。它们不在同一个逻辑子网上,即使它们插入同一个交换机。
          • 那么,为什么将 10.0.0.x 计算机配置为无法与任何计算机通信?无论如何,您可以让 10.0.0.x 机器也通过 UDP 广播地址发送它的响应,但是广播并不是一种非常好的单播通信方式。我想,如果必须的话,可以这样做。
          • 你是对的。我不知道为什么我没有想到让流氓计算机广播它的响应。效率低下且嘈杂,但可以完成工作,而且这种情况很少发生。
          【解决方案5】:

          你想要的是广播,这里有一篇关于它的文章:

          http://www.codeproject.com/KB/cs/BroadCasting.aspx

          【讨论】:

          • 一台电脑是192.168.1.30,另一台是10.0.0.47(没有默认网关)的情况怎么办。第二台计算机没有返回第一台计算机的路由,那么它甚至可能响应吗?
          猜你喜欢
          • 1970-01-01
          • 2012-10-28
          • 2014-04-15
          • 1970-01-01
          • 2014-08-25
          • 1970-01-01
          • 1970-01-01
          • 2011-11-04
          • 2010-09-14
          相关资源
          最近更新 更多