我有一个连接到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