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

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