我在 DHCP/IPv4 网络上有(基于 Linux 的)设备,其 UI 是通过浏览器/移动应用程序(通过 LAN)实现的。棘手的部分是发现设备的 IP 地址。我们一直在尝试使用 mDNS/ DNS-SD,但认为我们遇到了问题这篇文章中描述的- 同一网络上的 wifi 和有线客户端之间肯定存在行为变化。
我们尝试过切换路由器的 IGMP 监听设置,但似乎没有任何帮助。我想知道客户端应用程序是否需要发送某种 IGMP 成员资格请求来向路由器发出信号“是的,请将所有 mDNS 多播数据包转发给我”。 (尽管从上面的帖子看来应该已经发生了。
最后,我需要一种方法让应用程序/用户能够可靠地发现 DHCP 网络上客户端的 IP 地址,而无需查看路由器的 DHCP 客户端表。如果不是 mDNS 那么还有哪些其他选项可用?我唯一能想到的是基于自定义 UDP 广播的协议,但我想避免这种情况,并尽可能使用“标准”协议。然而,我们可以为设备和用户客户端编写代码,因此具有很大的灵活性。
答案1
我用这样的东西:
nmap -sP 192.168.11.0/24 | egrep 'scan report'
这会在 192.168.11.x 子网上执行 ping 扫描。将返回子网上所有主机的 IP 地址,以及主机名(如果可用)。
我不是确切地确定这有多可靠。我见过主机从列表中删除并重新出现 - 这些主机当时是否实际上在网络上变得不可用......谁知道,发生这种情况时我没有走过去检查其他主机上的连接......但ICMP
应该至少可以看到网络上的所有内容,无论它是否位于无线连接的另一端。 YMMV。
老实说,我的手机上有一个名为“fing”的应用程序,它在这方面做得非常好(事实上,我将nmap
上面的命令包装在一个名为 的 shell 函数中fing()
,只是因为它很容易记住)。