我有一個連接到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
但沒有解決辦法。
任何人都可以提供任何幫助嗎?
ICS代碼看起來不同 – sherpya 2012-03-22 00:48:30