我有一个在 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/