【问题标题】:C# Best approach for finding all active IP addresses in a LANC# 查找 LAN 中所有活动 IP 地址的最佳方法
【发布时间】:2014-07-24 11:38:31
【问题描述】:

场景: 开发针对 Win CE 5.0 供电设备的应用程序。该应用程序正在使用 .NET Compact Framework 3.5 (C#) 开发。

问题: 就像您将计算机连接到 LAN 并可以看到所有其他活动计算机及其各自的 IP 地址一样,我们希望在我们的应用程序中实现类似的功能,其中仅列出 IP 地址。

考虑到它是现有的 Windows 功能,我猜想它可以轻松实现 in out 应用程序。考虑到我的情况,最好的方法是什么?

【问题讨论】:

  • 如果有的话,我会使用 ActiveDirectory 和 IP 扫描其他任何东西。
  • 您知道,大多数网络视图类型的功能都基于 NetBIOS,这是非常不稳定的。没有路由的任何子网划分都可以很好地阻止您查看网络上的任何 IP 地址。

标签: c# compact-framework windows-ce tcp-ip


【解决方案1】:

首先,您必须定义您所说的活动 IP 地址。

主机可以阻止ICMP_ECHO(通常称为ping)但允许特定端口上的TCP、UDP等连接。

根据您需要的主机服务类型,您可以

  • 向您子网中的所有 IP 地址发送 ICMP_ECHO 请求。

    -要计算您的subnet 的IP 范围,您可能需要使用address space bitmask

    - 对于 ICMP 请求,您还可以使用 broadcast 地址。但大多数主机不响应广播请求以防止泛滥。

  • 尝试在特定 TCP 端口上打开连接(同样在整个 ip 范围内)

  • 请您的路由器通过dns query向您提供使用它的主机列表

  • arp requests 发送到以太网广播地址

本质上,获取特定 IP 范围或子网中主机列表的方法太多,无法给出一般性答案。

首先,您需要定义该主机列表的用途。

【讨论】:

    【解决方案2】:

    您可以编写一个函数,对从 192.168.1.1 到 192.168.1.20 的大约 20 个或更多 IPAdresses 执行 ping 操作,并在不同的线程中调用它,并使用不同的 ofssets 示例: 一个来自 192.168.1.1 另一个来自 192.168.1.21 ………… 在不同的线程上调用它们,但不要经常调用它们,这会减慢 CPU 并可能冻结计算机

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2015-12-06
      • 2014-08-20
      • 2014-05-30
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多