如何解决InetAddress.getAllByName不能像宣传的那样工作?
| 以下代码段仅返回一个具有我的主机名和回送地址127.0.1.1的InetAddress:InetAddress[] allAddresses = InetAddress.getAllByName(host);
assert allAddresses.length == 1;
assert allAddresses[0].isLoopbackAddress();
但是,我可以这样找到我的非环回IP:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
for (Enumeration<NetworkInterface> e = networkInterfaces; e.hasMoreElements();) {
NetworkInterface networkInterface = e.nextElement();
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
for (Enumeration<InetAddress> eAddresses = inetAddresses; eAddresses.hasMoreElements();) {
InetAddress address = eAddresses.nextElement();
if (!address.isLoopbackAddress()) {
return address;
}
}
}
另外,我可以使用nslookup将主机名解析为非环回IP。
InetAddress.getAllByName()声明“根据主机上配置的名称服务,给定主机名,返回其IP地址数组。”我是否缺少配置步骤?
解决方法
对于这种方法,至少在Linux上,OS将从/ etc / hosts中读取值,如果发现任何内容,它将返回该值。
/ etc / hosts可能只有
127.0.0.1 yourhostname
在您的系统上。
, 在这种情况下,获得所需行为的唯一方法似乎是使用dnsjava之类的东西:http://www.dnsjava.org/dnsjava-current/examples.html
以下解决了该问题。
InetAddress[] allAddresses = org.xbill.DNS.Address.getAllByName(host);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。