2012-03-21 12 views
5

Mam urządzenie z systemem Android podłączone do sieci Wi-Fi z adresem IP. Zrobiłem na moim komputerze z systemem Linux adres IP tego adresu IP i zweryfikowałem, że istnieje odpowiednia nazwa hosta dla tego adresu IP.Nie można odwrócić wyszukiwania DNS na urządzeniu z systemem Android

Mam kawałek kodu Java, które, gdy będzie działać na moim komputerze Windows ma wstecznego DNS grzywny (zwraca nazwę hosta):

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 to nazwa hosta zgodnie z oczekiwaniami w systemie Windows.

Ale na Androidzie zwraca adres IP zamiast nazwy hosta, co oznacza, że ​​się nie udało.

mam wszystkie uprawnienia, które myślę, że trzeba za to w moim 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" /> 

znalazłem tę dokumentację:

getCanonicalHostName

publicznego getCanonicalHostName String()

Pobiera w pełni kwalifikowaną nazwę domeny dla tego adresu IP. Najlepszym wysiłkiem jest metoda , co oznacza, że ​​możemy nie być w stanie zwrócić nazwy FQDN w zależności od konfiguracji systemu bazowej . Jeśli istnieje menedżer zabezpieczeń, ta metoda najpierw wywołuje metodę checkConnect z nazwą hosta, a -1 jako jej argumenty, aby sprawdzić, czy kod wywołujący może znać nazwę hosta dla tego adresu IP, tj. Aby połączyć się z hostem . Jeśli operacja jest niedozwolona, ​​zwróci ona tekstową reprezentację adresu IP w postaci .

Powroty:

w pełni kwalifikowaną nazwę domeny dla tego adresu IP lub jeśli operacja nie jest dozwolone przez kontrolę bezpieczeństwa, reprezentacja tekstowa adresu IP.

od:

1,4

Patrz również:

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

Znalazłem też ktoś mający podobny problem:

getCanonicalHostName returns an IP address

Ale brak rozdzielczości.

Czy ktoś może udzielić jakiejkolwiek pomocy?

Odpowiedz

0

Naprawdę nie jestem pewien, czy to działa, po 2.3 źródła (skrócona)

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

gospodarz jest ciąg liczbowy, a następnie wywołanie gethostname() na obiekcie wynikające powróci hosta (ip)

+0

ICS kod wygląda inaczej – sherpya

Powiązane problemy