我想发现通过安卓手机连接到我的 Wifi 网络的所有设备(主机名、MAC 地址和供应商名称)。设备上没有运行公共服务。
尝试了以下方法:
- ping 子网中的所有 IP 所需的时间太长 (
inetAddress.isReachable()
)。 - 发送
nbstat
查询NETBIOs
名称的请求适用于某些设备。他们中的一些人提供PortNotOpenException
(端口 137 未打开)。其他一些设备没有NETBIOs
启用名称服务。 尝试将jcifs用于 android。能够使用获取主机名
nbtAddress.getByName(ip)
循环遍历子网中的所有 IP 地址。此方法提供所有主机名,无论它们是否处于活动状态。
查找网络上所有活动设备的最佳方法是什么?像FING这样的一些应用程序似乎可以做到这一点。
编辑:我试图分析 android FING 应用程序是如何做到的。
- 用 2 个设备连接了一个小热点。在 FING 中开始发现并在 wireshark 上捕获数据包。发送以下一系列请求(全部广播):
- 在大型 wifi 网络(65 k 设备)上的 FING 中开始发现 Netbios 名称服务查询和响应数据包被捕获。(单播,有时到广播地址)
同时,我尝试在IDE上打印我的android手机的arp条目。
随着 FING 应用程序中发现的进展,条目的数量不断增加。
发现开始前的 5 个条目
随着发现的进行,增加到 1025 个条目。
发现结束后减少到 150 个条目。
到底发生了什么?没有 ICMP 请求。可以在 android 应用程序中发送 ARPRequests 吗?请帮忙。