查找所有已连接的计算机以建立网络并获取其IP地址 - Windows C.

时间:2014-06-28 09:48:56

标签: c windows networking ip winsock

正如标题所说。

让我们假设这种情况: 我有一个网络,我需要知道在Windows下通过Winsock发送连接到mantain套接字的所有计算机的IP地址和其他相关内容。

有没有比循环通过IP地址范围更好的方法并发送类似于: "你在吗?"并等待客户回答?

2 个答案:

答案 0 :(得分:1)

执行ARP扫描会告诉您网络上哪些设备处于活动状态,无论设备类型或操作系统如何。因此,这将包括PC,笔记本电脑,电话,路由器以及具有NIC的任何其他设备。这是扫描网络上实时主机的最可靠方式。

ARP是将IP地址转换为MAC地址的协议,反之亦然。它允许路由设备在逻辑网络和物理网络之间进行转换。当您向192.168.1.99发送数据包时,您的系统首先发出一个192.168.1.99的ARP请求,说“谁有192.168.1.99?告诉[我的MAC]”。网络上的其他设备看到此数据包,该IP地址的所有者将回复“Hi [MAC],我是192.168.1.99,我的MAC是00:12:34:56:78:90”。

您可以(ab)使用此协议来发现网络设备。如果您知道自己在192.168.1.x上,则通过192.168.1.254发送192.168.1.1的ARP请求,并记录结果。您收到的每个回复都表示已定义IP地址的实时系统。

请注意,并非所有用户都在192.168.1.0/24上,因此您需要先检查当前的网络配置。

就C语言而言,这不是一项简单的任务。但是,您可以查看实现ARP扫描的this example

答案 1 :(得分:0)

@Polynomial建议的ARP扫描的替代方法是PING扫描。

相同的概念,PING子网中的每个地址,并记录结果。

正如ARP扫描可能会给你误报(因为有一个路由器说"我会处理那个地址"它上面是否有设备),所以也是如此PING可以给你假阴性(因为有些系统会禁用ICMP / PING命令)。

有一个名为fping的工具以大规模并行的方式实现这种PING扫描。 Fping最初是一个* NIX程序,但有Windows版本。如果您想了解血腥细节,您应该能够找到要仔细阅读的来源。