¿Alguna forma de descubrir dispositivos Android en tu red?

Quiero poder descubrir dispositivos Android en mi red y, posiblemente, recuperar información del dispositivo sobre ellos. Esto es muy fácil con los dispositivos de Apple, ya que ejecutan los servicios de Bonjour. Sin embargo, parece que no puedo encontrar ningún servicio similar ejecutándose en Android.

Esto debe funcionar sin modificar el dispositivo Android, instalar algún servicio o abrir algún puerto. Está pensado para funcionar con dispositivos Android de vainilla de la manera en que Bonjour lo ayuda a encontrar dispositivos Apple de vainilla. Incluso el hecho de poder verificar que el dispositivo está ejecutando Android sería suficiente.

Respuesta elegida: Aunque no es la respuesta mejor calificada (todavía), por favor, eche un vistazo a la respuesta de Luis. Como él menciona, puede usar una búsqueda de DNS (usando su servidor DNS local) para descubrir dispositivos Android. Descubrí que esto tiene una tasa de éxito del 100%, ya que Android obliga a los dispositivos a usar un nombre de host de Android_____. Aparentemente, esto es difícil de cambiar en el teléfono, incluso si está enraizado. Así que creo que este es un método bastante preciso. Gracias 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.

Código de muestra: Si desea implementar esto en Java (por ejemplo, para ejecutar en Android), no puede usar fácilmente getHostName () porque usa los servidores DNS externos. Desea utilizar el servidor DNS local en su enrutador, por ejemplo. Luis menciona a continuación que usted podría modificar los servidores DNS de la conexión Wifi, pero eso podría romper otras cosas. En cambio, he encontrado eldnsjava La biblioteca es extremadamente útil para enviar solicitudes de DNS dirigidas. Aquí hay un código de ejemplo usando la biblioteca:

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

Esto me da la salida:

DNS Record: android-711c129e251f14cf.\001.

Bingo.

Respuestas a la pregunta(7)

Su respuesta a la pregunta