какой-нибудь способ обнаружить устройства 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.

Бинго.

Ответы на вопрос(7)

Ваш ответ на вопрос