有没有快速的技术来获取子网中的所有IP地址?

时间:2012-09-01 07:19:13

标签: c++ dns

previous question我尝试获取子网中的所有有效IP地址,所以我使用for循环,但在我尝试之后,我发现我的代码需要2分钟以上才能找到所有IP地址子网,在某些情况下需要超过5分钟!

我的代码是在Mac OS下用C ++编写的;

但是在windows中,为了做同样的事情,你只需要编写net view/all命令,它会在一瞬间打印子网中的所有IP地址!

在MAC OS中,您可以使用Bonjour service来完成这项工作。

这些技术如何像这种速度(Net view /allBonjour service)一样工作? 有没有办法像这样快速完成这项工作? 如果没有,请告诉我是否有APi直接在我的代码(C ++)中使用Bonjour服务?

编辑:

我发现了新想法

我在苹果上发现了一些名为Bonjour API的api,我的帮助,但我怎么能用它来c ++,因为我知道mac使用了opbjectiv-c。

bonjour

2 个答案:

答案 0 :(得分:2)

net view /all正在开发Windows网络级别,而不是IP级别。它仅列出启用了Windows网络和名称解析的计算机。如果您的计算机没有运行Windows(或samba),则不会列出它们。与打印机,路由器等相同。

使用IPv4,最好的方法是通过检查计算机的IP地址和网络掩码来提取当前子网中的IP地址列表。然后强制对每个IP地址进行ARP查找。如果网络上存在该设备,即使它被完全锁定(没有端口打开,也没有应答ping),ARP查找将始终有效。

使用IPv6你基本上不走运。单个子网(18 446 744 073 709 551 616)中可用的IP地址数量太多,无法进行详尽的搜索。

答案 1 :(得分:1)

你应该异步工作。您需要一个发出通信请求但立即返回的函数,如IcmpSendEcho2。您必须为每个调用创建一个完成事件数组。每个事件句柄都传递给一个IcmpSendEcho2调用。

之后,调用WaitForMultipleObjects等待设置的所有事件。