2012-03-21 60 views
5

我有一個連接到Wifi網絡的Android設備,並帶有IP地址。我在我的Linux計算機上查找了此IP地址的NS,並驗證該IP地址是否有相應的主機名。無法在Android上進行反向DNS查找

我有一塊Java代碼,這時候我的Windows PC上運行,並反向DNS查找罰款(返回一個主機名):

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是按預期在Windows上的主機名。

但是在Android上,它返回一個IP地址而不是主機名,這表明它失敗了。

我有,我會覺得我需要爲這個在我的應用程序的所有權限:

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

我發現這個文檔:

getCanonicalHostName

公共字符串getCanonicalHostName()

獲取此IP地址的完全限定的域名。盡最大努力 方法,這意味着我們可能無法返回FQDN,具體取決於底層系統配置的 。如果有安全管理器,則此 方法首先使用主機名和-1調用其checkConnect方法作爲 其參數,以查看是否允許調用代碼知道該IP地址的主機名爲 ,即連接到主機。如果 操作不被允許,它將返回IP地址 的文本表示。

返回:

完全合格的域名此IP地址,或者如果 操作不受安全檢查,IP地址的文本 表示允許。

由於:

1.4

另請參見:

SecurityManager.checkConnect(java.lang.String中,INT)

我還發現有一個人同樣的問題:

getCanonicalHostName returns an IP address

但沒有解決辦法。

任何人都可以提供任何幫助嗎?

回答

0

我真的不確定它可以在所有工作,以下2。3個源(縮短)

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

主機是數字串,然後將所得的對象調用的gethostname()將返回主機(IP)

+0

ICS代碼看起來不同 – sherpya 2012-03-22 00:48:30