以下代码段仅返回带有我的主机名和环回地址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地址数组。”我错过了配置步骤吗?
答案 0 :(得分:0)
对于这种方法,至少在Linux上,OS会从/ etc / hosts中读取值,如果找到任何内容,它将返回它。 而/ etc / hosts可能只有
127.0.0.1 yourhostname
在你的系统上。
答案 1 :(得分:0)
看起来在这个实例中获得所需行为的唯一方法是使用像dnsjava这样的东西:http://www.dnsjava.org/dnsjava-current/examples.html
以下解决了这个问题。
InetAddress[] allAddresses = org.xbill.DNS.Address.getAllByName(host);