如何使用C Obj C或Swift扫描设备的网络

时间:2014-10-24 12:02:23

标签: objective-c c networking swift ip

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

有没有办法查找网络上的所有设备,并选择Mac地址,名称或其他?我知道mac-address的前3个字节对于所有Pies都是相同的。 (B8:27:EB)Maby我可以使用这些信息。

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

1 个答案:

答案 0 :(得分:3)

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 Pis。


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

也许您可以在应用中使用此方法来发现本地Raspberry Pis。