objective-c - 如何使用 C Obj C 或 Swift 扫描网络中的设备

标签 objective-c c networking swift ip

我有一个在 Raspberry Pi 上运行的服务器和一个在我的 Mac 和 iPhone(即将推出 Apple Watch)上运行的客户端。我想自动连接到我的服务器,而无需找到 Raspberry pi 的 IP 地址。

有没有办法查找网络上的所有设备,并按 Mac 地址、名称或其他内容进行选择?我知道所有 Pie 的 mac 地址的前 3 个字节都是相同的。 (B8:27:EB) 也许我可以使用该信息。

我一直在寻找这个问题的解决方案,但似乎找不到。

最佳答案

Zeroconf(又名 Bonjour)

IMO,最好的方法是让您的 Raspberry Pi 使用 Zeroconf 在网络上宣传自己。 (又名 Bonjour)。

在 Raspberry Pi 上,安装 avahi-daemon并将其配置为通告您想要连接的任何服务,例如,如果您通过 SSH 连接,则需要执行类似 this 的操作.

在 Cocoa 中,您可以使用 NSNetServiceBrowser找到广告的服务。

可能的 MAC 地址解决方案

或者,如果 Avahi-daemon 不是一个选项,您也许可以使用 MAC 地址。我不会详细讨论 Objective-C 中的细节,只是使用命令行进行高级概述。

在终端中,输入ping 255.255.255.255。您将从本地网络上的每个设备收到 ping 数据包。对于每个 IP 地址,发送单独的 ping,例如ping -c 1 192.168.x.x。然后,输入arp -a。您将看到本地网络上每个 IP 的 MAC 地址。从这里,您也许可以使用 MAC 地址过滤器来查找 Raspberry Pi。


为什么这有效?好吧,第一个命令 ping 255.255.255.255 将 IP 数据包中的 ping 发送到“广播”地址,这意味着本地网络上的所有计算机都会响应。当您 ping 各个 IP 地址时,低级网络堆栈使用 ARP查找 IP 的 MAC 地址,然后直接向其发送 ping。这样做时,本地计算机上的 ARP 表将使用缓存的值进行更新。

也许您可以在应用程序中使用此方法来发现本地树莓派。

关于objective-c - 如何使用 C Obj C 或 Swift 扫描网络中的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547486/

相关文章:

c - 了解 Contiki 中的 tcpdump.c 文件

objective-c - 使用 ipa 文件安装时应用程序无法正常工作

iphone - 来自字符串的 CGPathRef

objective-c - 导入框架时 Xcode "Could Not Build Module MobileCoreServices.h"

c++ - 如何解析这些未知大小的数据

C++ 服务器,System.10014 错误,使用 Boost

objective-c - XCODE 传递一个方法作为参数

c++ - Clang 或 GCC 是否能够自动矢量化手动展开的循环?

c - 在C中显示ppm图像的rgb值和冲突类型错误

java - 为什么 InetAddress.getLocalHost() 在 Java 1.7 中表现不同?