C#查找局域网中所有活动IP地址的最佳方法
本文关键字:地址 IP 最佳 方法 活动 查找 局域网 | 更新日期: 2023-09-27 18:14:48
场景:针对Win CE 5.0供电设备开发应用程序。正在使用开发该应用程序。NET Compact Framework 3.5(C#(。
问题:就像当您将计算机连接到LAN时,您可以看到所有其他活动计算机及其各自的IP地址,我们希望在我们的应用程序中实现类似的功能,其中只列出IP地址。
考虑到这是一个现有的Windows功能,我猜测它将有可能很容易地实现内外应用程序。考虑到我的情况,最好的方法是什么?
首先,您必须定义活动IP地址的含义。
主机可以阻止ICMP_ECHO(通常称为ping
(,但允许特定端口上的TCP、UDP等连接。
根据您需要的主机服务类型,您可以
-
将
ICMP_ECHO
请求发送到子网中的所有IP地址。-要计算
subnet
的IP范围,您可能需要使用地址空间位掩码-对于ICMP请求,您也可以使用广播地址。但大多数主机都不响应广播请求,以避免洪水泛滥。
-
尝试打开特定TCP端口上的连接(再次在整个ip范围上(
-
请您的路由器通过dns查询向您提供使用它的主机列表
-
向以太网广播地址发送arp请求
从本质上讲,获取特定ip范围或子网中主机列表的方法太多,无法给出一般答案。
首先,您需要定义主机列表的用途。
您可以编写一个函数,在大约20个或更多从192.168.1.1到192.168.1.20的IPAddress上执行ping操作,并在不同的线程中使用不同的ofsets调用它,例如:一个从192.168.1.1开始另一个从192.168.1.21开始。。。。。。。在不同的线程上调用它们,但不要经常调用它们——这会减慢CPU的速度,并可能释放计算机