【发布时间】:2012-11-02 15:49:00
【问题描述】:
我希望能够发现我网络上的 Android 设备,并可能检索一些关于它们的设备信息。这对于 Apple 设备来说非常容易,因为它们运行 Bonjour 服务。但是,我似乎找不到在 Android 上运行的任何类似服务。
这必须在不修改 Android 设备、安装某些服务或打开某些端口的情况下工作。它旨在以 Bonjour 帮助您找到普通 Apple 设备的方式与普通 Android 设备一起使用。甚至能够验证设备是否运行 Android 就足够了。
Chosen Answer:虽然它不是(目前)评价最高的答案,但请看一下 Luis 的回复。正如他所提到的,您可以使用 DNS 查找(使用本地 DNS 服务器)来发现 Android 设备。我发现这有 100% 的成功率,因为 Android 强制设备使用主机名 android-_____。这显然很难在手机上更改,即使它已植根。所以我认为这是一个非常准确的方法。谢谢,路易斯!
Example:
$ nslookup 192.168.1.104 192.168.1.1
Server: 192.168.1.1
Address: 192.168.1.1#53
104.1.168.192.in-addr.arpa name = android-711c129e251f14cf.\001.
示例代码:如果您想在 Java 中实现此功能(例如,在 Android 上运行),则无法轻松使用 getHostName(),因为它使用外部 DNS 服务器。例如,您想使用路由器上的本地 DNS 服务器。 Luis 在下面提到,您可以修改 Wifi 连接的 DNS 服务器,但这可能会破坏其他事情。相反,我发现dnsjava 库对于发送有针对性的 DNS 请求非常有帮助。下面是一些使用该库的示例代码:
String ipAddress = "104.1.168.192";
String dnsblDomain = "in-addr.arpa";
Record[] records;
Lookup lookup = new Lookup(ipAddress + "." + dnsblDomain, Type.PTR);
SimpleResolver resolver = new SimpleResolver();
resolver.setAddress(InetAddress.getByName("192.168.1.1"));
lookup.setResolver(resolver);
records = lookup.run();
if(lookup.getResult() == Lookup.SUCCESSFUL) {
for (int i = 0; i < records.length; i++) {
if(records[i] instanceof PTRRecord) {
PTRRecord ptr = (PTRRecord) records[i];
System.out.println("DNS Record: " + records[0].rdataToString());
}
}
} else {
System.out.println("Failed lookup");
}
} catch(Exception e) {
System.out.println("Exception: " + e);
}
这给了我输出:
DNS Record: android-711c129e251f14cf.\001.
宾果游戏。
【问题讨论】:
-
看看这个,它可能对你有帮助 [Stack Link][1] [1]: stackoverflow.com/questions/6792130/network-device-discovery
-
谢谢,但不是我想要的!我正在寻找一种无需在其上安装任何服务即可发现 Android 客户端的方法。这建议在它们上安装 Bonjour 服务,然后使用 mDNS。寻找已经在 Android 设备上“开放”的东西以帮助发现它们。
-
如果您描述您的网络架构可能会有所帮助。运行发现的机器是 Wi-Fi 接入点,还是同一网络上的另一个 Wi-Fi 客户端,还是其他什么?
-
bonjour 或更一般的 dns-sd 运行在网络上的 dns 之上,这不是魔术,苹果设备运行 dns-sd 服务,android 设备没有内置任何类型的 bonjour 支持中,但可以在后台运行 dns-sd 服务,例如 jDMS。一个例外可能是设备支持蓝牙,如果您正在寻找的蓝牙设备比 android 不支持,您可以扫描蓝牙设备,然后查询 SDDP 记录以获取设备信息。否则你要求的魔法是不存在的。
-
不需要蛇怪的“魔法” cmets... 我了解技术障碍以及 Apple 设备运行某种预加载的服务(例如 Bonjour)的事实。我的问题是,Android 上是否存在一些我缺少的类似功能的服务。我放了不加服务的规定,不然大家都会反应:“加个bonjour服务就行了!”我理解其中的区别,最终的答案可能只是:“没有”。没关系,我正在寻求帮助。当你问别人时,一些我不知道存在的事情往往会出现。
标签: android discovery service-discovery