2012-03-21 57 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