Java InetAddress.getAllByName()不按广告的方式工作?
以下代码段仅返回一个带有我的主机名和环回地址127.0.1.1的InetAddress:Java InetAddress.getAllByName()不按广告的方式工作?,java,Java,以下代码段仅返回一个带有我的主机名和环回地址127.0.1.1的InetAddress: InetAddress[] allAddresses = InetAddress.getAllByName(host); assert allAddresses.length == 1; assert allAddresses[0].isLoopbackAddress(); 但是,我可以找到我的非环回IP,如下所示: Enumeration<NetworkInterface> networkI
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;
}
}
}
枚举networkInterfaces=NetworkInterface.getNetworkInterfaces();
对于(枚举e=networkInterfaces;e.hasMoreElements();){
NetworkInterface NetworkInterface=e.nextElement();
枚举inetAddresses=networkInterface.getInetAddresses();
对于(枚举eadAddresses=inetAddresses;eadAddresses.hasMoreElements();){
InetAddress=eadAddresses.nextElement();
如果(!address.isLoopbackAddress()){
回信地址;
}
}
}
此外,我能够使用nslookup将主机名解析为非环回IP
InetAddress.getAllByName()声明“给定主机名,根据系统上配置的名称服务返回其IP地址数组。”我是否缺少配置步骤?对于此方法,至少在Linux上,操作系统将从/etc/hosts读取值,如果发现任何内容,将返回它。 And/etc/hosts可能只有
127.0.0.1 yourhostname
在您的系统上。在这种情况下,获得所需行为的唯一方法是使用类似dnsjava的东西: 下面的代码解决了这个问题
InetAddress[] allAddresses = org.xbill.DNS.Address.getAllByName(host);
断言allAddresses.length==1;为什么要这样做?只是为了说明getAllByName()只返回长度为1的数组。谢谢,我可以确认这个行为。如果我向/etc/hosts添加另一个IP地址,它就会显示出来。然而,基于javadoc,听起来我应该能够获得与nslookup相同的IP信息。是的,这看起来像是一个文档错误。它可能会向操作系统请求它(
基于系统上配置的名称服务
)。操作系统会返回它认为正确的内容。但是系统上配置的名称服务不一定是nslookup。如果操作系统已经有了答案,那么进行ns查找是没有意义的。