我有一个带有IP地址的Android设备连接到Wifi网络。我在Linux计算机上查找了这个IP地址,并验证了该IP地址是否有相应的主机名。
我有一段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)
我还发现有人有类似的问题:
但没有决心。
有人能提供任何帮助吗?
发布于 2012-03-22 00:42:34
我真的不确定它能不能工作,遵循2.3源(缩写)
inetAddr = InetAddress.getByName(ipAddress);
getByName(numeric) -> getAllByName/Impl(numeric) -> lookupHostByName(numeric)
return bytesToInetAddresses(getaddrinfo(host), host)[0]主机是数字字符串,然后对结果对象调用getHostName()将返回主机( ip)
https://stackoverflow.com/questions/9812260
复制相似问题