2012-03-21 14 views
5

Tengo un dispositivo Android conectado a la red Wifi con una dirección IP. Hice NS búsqueda en mi computadora Linux de esta dirección IP y verifiqué que hay un nombre de host correspondiente para esa dirección IP.No se puede hacer la búsqueda DNS inversa en Android

que tienen una pieza de código Java, que cuando se ejecuta en mi PC con Windows no invertir bien la búsqueda de DNS (devuelve un nombre de host):

String dnSuffix; 
String ipAddress = "10.228.59.217"; 
InetAddress inetAddr; 
try { 
    //inetAddr = InetAddress.getLocalHost(); 
    inetAddr = InetAddress.getByName(ipAddress); 
    //System.out.println("inetAddr = " + inetAddr); 
    Log.v(LOG_TAG, "inetAddr = " + inetAddr); 
    if (inetAddr != null) { 
     dnSuffix = inetAddr.getHostName(); 
     //System.out.println("dnSuffix is " + dnSuffix); 
     Log.v(LOG_TAG,"dnSuffix is " + dnSuffix); 
    } 
} catch (UnknownHostException e) { 
    //System.out.println("Error getting DN suffix: " + e.getMessage()); 
    Log.v(LOG_TAG,"Error getting DN suffix: " + e.getMessage()); 
} 

dnSuffix es el nombre de host como se esperaba en Windows.

Pero en Android, devuelve una dirección IP en lugar de un nombre de host, lo que indica que falló.

Tengo todos los permisos que yo creo que necesito para esto en mi aplicación:

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

me encontré con esta documentación:

getCanonicalHostName

cadena getCanonicalHostName pública()

Obtiene el nombre de dominio completo para esta dirección IP. El mejor esfuerzo método, lo que significa que es posible que no podamos devolver el FQDN según la configuración del sistema subyacente . Si hay un administrador de seguridad, este método llama primero a su método checkConnect con el nombre de host y -1 a sus argumentos para ver si el código de llamada puede conocer el nombre de host para esta dirección IP, es decir, para conectarse al host . Si la operación no está permitida, devolverá la representación textual de a la dirección IP.

Devuelve:

el nombre de dominio completo para esta dirección IP, o si la operación no está permitido por el control de seguridad, la representación textual de la dirección IP.

desde:

1,4

Ver también:

SecurityManager.checkConnect (java.lang.String, int)

También encontré a alguien que tiene un problema similar:

getCanonicalHostName returns an IP address

Pero no hay resolución.

¿Alguien puede brindar alguna ayuda?

Respuesta

0

Realmente no estoy seguro de que pueda funcionar en absoluto, siguiendo a 2.3 fuentes (abreviado)

inetAddr = InetAddress.getByName(ipAddress); 
getByName(numeric) -> getAllByName/Impl(numeric) -> lookupHostByName(numeric) 
return bytesToInetAddresses(getaddrinfo(host), host)[0] 

anfitrión es la cadena numérica, a continuación, llamar getHostName() en el objeto resultante volverá host (el IP)

+0

ics código es diferente – sherpya

Cuestiones relacionadas