列出连接到单个局域网的所有计算机的IP地址。

9
我正在编写一个程序,需要在局域网中连接其他计算机。但是,与其输入多台计算机的IP地址(很烦人),我想知道是否有一种方法可以列出局域网中所有计算机的IP地址。我已经研究了一整天,但至今没有找到合适的方法。这是因为这样的东西不存在吗? 提前感谢您。
编辑:看起来这篇文章受到了很多关注,所以我应该发布我的实际解决方案。通常,在局域网中,计算机的IP地址命名约定相同。例如,192.168.2.*,*被替换为任何有效数字。我的程序检测IP地址,将其显示给用户,然后询问IP的前三个块。然后,它按顺序扫描给定IP命名约定中的200个IP地址,通过ping并等待响应来确定是否有计算机。如果没有响应,则没有计算机。一旦知道有计算机在IP地址背后,它可以执行IP能够执行的所有操作。

你可以获取子网,并循环遍历可用地址以进行ping测试。但这对于刚关闭的设备是无效的。如果你有权限,可以查看DHCP租约文件。 - OMG Ponies
1
“ARPing”如Jason所述,是唯一的跨平台和防火墙可防御解决方案。如果您受限于Windows系统,则BlueRaja的WNetEnumResource()方法是合理的。扫描/nmap方法在面对主机防火墙时存在很多问题。并不存在一个魔法弹/ API调用。iphelper API的SendARP()可能是最佳选择:http://msdn.microsoft.com/en-us/library/aa366358%28VS.85%29.aspx - J.J.
为什么不是254? (在更大的子网中是255) - Deanna
5个回答

7

1) 读取子网掩码并计算子网掩码中的所有IP地址。然后,您可以使用ICMP ping(标准ping)或ARP ping列出所有有效的IP地址。在子网设置中,ARP Ping更可靠。

2) 您可以使用nmap列出所有主机。

nmap -nsP 192.168.10.1/254 | grep ^Host

6
你不会找到比在同一子网上使用ping或arping更可靠的东西。我曾经在我的第一份实习工作中为某个软件实现了这个功能,并且最后一次检查时(公平地说是几年前),他们仍在使用它。我认为这意味着他们没有发现更好的选择。
很容易找到这些的源代码并将它们转换成C#。pingarping。或者,你只需调用命令提示符并执行ping,然后解析结果即可。

实际上,System.Net.NetworkInformation.Ping 应该能解决问题。不需要从 C 翻译任何内容。 - GeReV

2
任何主机发现工具都可以在这里帮助您。特别是Nmap,虽然在这种情况下可能有些过度,但一定会提供这些信息。在Google上搜索“ping扫描”,您应该会得到一些有用的结果。

3
使用进程调用运行nmap,并解析结果。 - Hassan Syed

2
请参见WNetOpenEnum()和WNetEnumResource(), 这里

0
你能否查看网络适配器上的IP地址和子网掩码,然后ping每个地址?响应的地址可以被查询以查看它是否具有连接所需的任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接