какой-нибудь способ обнаружить устройства Android в вашей сети?
Я хочу иметь возможность обнаруживать устройства Android в моей сети и, возможно, получать информацию об этих устройствах. Это очень легко с устройствами Apple, так как они используют службы Bonjour. Тем не менее, я не могу найти похожий сервис, работающий на Android.
Это должно работать без изменения устройства Android, установки какой-либо службы или открытия какого-либо порта. Он предназначен для работы с ванильными устройствами Android таким образом, чтобы Bonjour помог вам найти ванильные устройства Apple. Достаточно будет просто проверить, что устройство работает под управлением Android.
Выбранный ответ: Хотя это не самый лучший ответ (пока), пожалуйста, посмотрите на ответ Луиса. Как он упоминает, вы можете использовать поиск 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-сервер на своем маршрутизаторе. Ниже Луис упоминает, что вы можете изменить DNS-серверы Wi-Fi-соединения, но это может привести к поломке других вещей. Вместо этого я нашел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.
Бинго.