2012-03-21 16 views
5

Ho un dispositivo Android connesso alla rete Wi-Fi con un indirizzo IP. Ho cercato NS sul mio computer Linux di questo indirizzo IP e ho verificato che vi fosse un nome host corrispondente per quell'indirizzo IP.Impossibile eseguire la ricerca DNS inversa su Android

Ho un pezzo di codice Java, che quando eseguito sul mio PC Windows non ricerca inversa DNS bene (restituisce un nome 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 è il nome host come previsto su Windows.

Ma su Android, restituisce un indirizzo IP invece di un nome host, che indica che non è riuscito.

ho tutti i permessi che vorrei che ho bisogno di questo nella mia app:

<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" /> 

ho trovato questa documentazione:

getCanonicalHostName

public String getCanonicalHostName()

Ottiene il nome di dominio completo per questo indirizzo IP. Miglior metodo , il che significa che potremmo non essere in grado di restituire il nome FQDN a seconda della configurazione di sistema sottostante di . Se esiste un gestore sicurezza, questo metodo chiama prima il suo metodo checkConnect con il nome host e -1 come i suoi argomenti per vedere se il codice chiamante è autorizzato a conoscere il nome host per questo indirizzo IP, ad es. Per connettersi all'host . Se l'operazione non è consentita, restituirà la rappresentazione testuale di l'indirizzo IP.

Returns:

il nome di dominio completo per questo indirizzo IP, o se l'operazione non è consentita dal controllo di sicurezza, la rappresentazione testuale dell'indirizzo IP.

dal:

1,4

Vedere anche:

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

Ho anche trovato qualcuno che ha problemi simili:

getCanonicalHostName returns an IP address

Ma nessuna risoluzione.

Qualcuno può fornire aiuto?

risposta

0

Non sono sicuro che funzioni, a partire da 2.3 fonti (abbreviato)

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

host è la stringa numerica, quindi chiamando getHostName() sull'oggetto risultante restituirà ospitante (ip)

+0

ci codice è diverso – sherpya

Problemi correlati