如何获取LAN上所有设备的IP列表?

时间:2015-01-29 06:46:45

标签: ios

我们使用了库SimplePing,但我们的网络扫描程序的多个挑战有时候找不到某些设备。即此扫描仪无法可靠地工作。 为IOS提示另一个库或更可靠的算法?

也许我需要使用套接字编写ping:

socket(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)

但还有什么代码?

3 个答案:

答案 0 :(得分:1)

您可以在FreeBSD源代码中看到ping实用程序的实现:https://svnweb.freebsd.org/base/release/10.1.0/sbin/ping/ping.c?view=markup

不要害怕阅读任何平台的现有实施的源代码,因为它们都使用相同的基础,您的应用也不会例外。

顺便说一下,你可以编译用Objective-C编写的应用程序的C代码。

<强>更新

以下是关于如何使用套接字的一个很好的解释:http://www.linuxhowtos.org/C_C++/socket.htm

答案 1 :(得分:1)

并非所有设备都响应ICMP PING(这是您正在使用的)。是否有从未发现的特定设备?如果是这样,他们是否回应“ping”命令?

如果它更不稳定,那么您需要从网络跟踪开始(最常见的是使用wireshark)。您需要确定ping机是否收到ping,并单独确定您的设备是否收到了响应。您通常希望为此构建一个小型专用网络,以便您可以控制硬件。

一般来说,最初在模拟器而不是设备中开发这种代码更容易。它在模拟器中更可靠吗?

您收到错误了吗?是否涉及防火墙? (防火墙通常会吞下ICMP而不会产生错误。)

除了“无法可靠地工作”之外,您还需要更多特定的诊断信息。您需要确切地知道哪些部分有效,哪些无效。你送包了吗?他们收到了包吗?他们发了回复吗?你收到回复了吗?没有这些基本数据,就很难对网络进行故障排除。

答案 2 :(得分:0)

可能会对你有帮助。

https://developer.apple.com/library/ios/samplecode/BonjourWeb/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007415-Intro-DontLinkElementID_2

它是用于搜索连接网络中的网络服务的示例代码。您可以在搜索域中进行必要的更改,并可以获取已连接网络中的IP地址列表。