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

时间:2020-03-06 14:44:26  来源:igfitidea点击:

我正在尝试确认用户是否从网络中拔出了我的嵌入式设备,然后再执行一些维护。我正在考虑" ping"子网中的所有IP地址,但这听起来很粗糙。有没有一种广播/ ARP方法可能会更好?

解决方案

我们可以尝试广播ping(来自linux):

ping -b 255.255.255.255

另一种选择是下载Nmap并执行ping扫描。

我们可以使用nmap。它仍然很粗糙,但是至少它使用的是设计用于执行此操作的工具,因此我们不必花时间在上面。

如果我们无法从以太网设备(当今大多数芯片组应该支持,顺便说一句,……)获取可靠的链路状态信息,则可以为本地子网上的每个IP发送ARP请求。开销是最小的,一旦收到单个响应,就可以确保仍连接到网络。

我在这里看到的唯一可能的问题是,如果设备位于/ 8子网中,则可能需要相当长的时间才能遍历所有4294967296可能的IP。因此,我们可能需要考虑进行一些优化,例如仅发送默认网关的ARP请求以及ARP表中当前的所有IP。

如果我们知道有一个对等点,我们最近已连接到网络,则可以先尝试ping或者arpe。这样可以减少我们产生的流量。

我们也可以运行tcpdump -n来查看网络上的活动。

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

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

设备是否有可能支持UPnP或者Bonjour?除了底层协议之外,我们还应该查看这些协议,它们支持某种即插即用功能。例如,UPnP设备在关闭之前先在LAN上发送一条消息(但是,如果只是通过拔出它来删除它,则无济于事)。