w dowolny sposób, aby odkryć urządzenia z Androidem w sieci?

Chcę móc odkrywać urządzenia z Androidem w mojej sieci i być może pobierać informacje o nich. Jest to bardzo proste w urządzeniach Apple, ponieważ uruchamiają usługi Bonjour. Jednak nie mogę znaleźć podobnej usługi działającej na Androidzie.

Musi to działać bez modyfikowania urządzenia z systemem Android, instalowania niektórych usług lub otwierania niektórych portów. Jest przeznaczony do pracy z waniliowymi urządzeniami z systemem Android w taki sposób, w jaki Bonjour pomaga znaleźć waniliowe urządzenia Apple. Wystarczy nawet sprawdzenie, czy urządzenie działa pod kontrolą systemu Android.

Wybrana odpowiedź: Chociaż nie jest to najwyżej oceniona odpowiedź (jeszcze), spójrz na odpowiedź Luisa. Jak wspomina, możesz użyć wyszukiwania DNS (za pomocą lokalnego serwera DNS), aby odkryć urządzenia z Androidem. Odkryłem, że ma to 100% wskaźnik sukcesu, ponieważ Android zmusza urządzenia do używania nazwy hosta android-_____. Jest to najwyraźniej trudne do zmiany w telefonie, nawet jeśli jest zakorzenione. Myślę, że to dość dokładna metoda. Dzięki, Luis!

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.

Przykładowy kod: Jeśli chcesz zaimplementować to w Javie (np. Uruchomić na Androidzie), nie możesz łatwo użyć getHostName (), ponieważ korzysta z zewnętrznych serwerów DNS. Na przykład chcesz użyć lokalnego serwera DNS na routerze. Luis wspomina poniżej, że możesz zmodyfikować serwery DNS połączenia Wi-Fi, ale może to spowodować złamanie innych rzeczy. Zamiast tego znalazłemdnsjava biblioteka, która będzie niezwykle pomocna w wysyłaniu ukierunkowanych żądań DNS Oto przykładowy kod korzystający z biblioteki:

        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);
    }

To daje mi dane wyjściowe:

DNS Record: android-711c129e251f14cf.\001.

Bingo.

questionAnswers(7)

yourAnswerToTheQuestion