Networking 如何发现本地子网上是否有其他设备?

Networking 如何发现本地子网上是否有其他设备?,networking,Networking,在执行一些维护之前,我试图确认某个用户已将我的嵌入式设备从网络中拔出。我正在考虑“ping”我的子网上的所有IP地址,但这听起来很粗糙。是否有广播/ARP方法可以更好地工作?您可以尝试广播ping(这是来自linux的): 另一个选项是下载并执行ping扫描。您可以使用nmap。它仍然很粗糙,但至少它使用了一种专门设计的工具,这样你就不必花时间在它上面了。如果你不能从你的以太网设备(顺便说一句,现在大多数芯片组都应该支持这种设备)获得可靠的链路状态信息,那么为你的本地子网上的每个IP发送ARP请

在执行一些维护之前,我试图确认某个用户已将我的嵌入式设备从网络中拔出。我正在考虑“ping”我的子网上的所有IP地址,但这听起来很粗糙。是否有广播/ARP方法可以更好地工作?

您可以尝试广播ping(这是来自linux的):


另一个选项是下载并执行ping扫描。

您可以使用nmap。它仍然很粗糙,但至少它使用了一种专门设计的工具,这样你就不必花时间在它上面了。

如果你不能从你的以太网设备(顺便说一句,现在大多数芯片组都应该支持这种设备)获得可靠的链路状态信息,那么为你的本地子网上的每个IP发送ARP请求就是一个不错的替代。开销很小,只要您得到一个响应,就可以确保您仍然连接到网络


我在这里看到的唯一可能的问题是,如果您的设备位于/8子网上,则可能需要相当长的时间才能循环通过所有4294967296个可能的IP。因此,您可能需要考虑一些优化,例如只为默认网关发送ARP请求,以及当前ARP表中的所有IPS。

< P>如果您知道最近连接到一个对等点,您可以先尝试PARG或ARPing。这可以减少您生成的通信量。

您也可以运行tcpdump-n查看网络上的活动内容。

没有收到对ICMP ping或ARP请求的任何响应并不能100%保证没有网络连接。例如,网络上可能存在防火墙关闭的设备


编辑:可能您可以访问嵌入式设备上的一些较低级别的信息,以检查网络接口是否已连接,而不实际发送任何数据。

您的设备是否支持UPnP或Bonjour?除了低级协议之外,您还应该看看这些支持某种即插即用功能的协议。例如,UPnP设备在关闭之前会在LAN上发送消息(不过,如果只是通过拔下它来将其拔下…),则这没有帮助。

谢谢!有关于如何在linux中以编程方式发送ARP的指针吗?
ping -b 255.255.255.255