繁体   English   中英

InetAddress getAllByName不管理主机条目中提到的返回IP地址的顺序

[英]InetAddress getAllByName does not manage order of return IP Addresses as mentioned in host entry

我的主机条目如下:

    10.106.1.188 myhost
    192.168.0.156 myhost
    192.168.0.160 myhost
    192.168.0.150 myhost
    10.106.1.121 myhost
    10.106.1.110 myhost

我使用以下代码从主机条目获取所有IP地址

InetAddress[] addresses = InetAddress.getAllByName("myhost");
    for( InetAddress address : addresses) {
        System.out.println(address);
    }

问题是以上代码无法管理IP地址顺序。

在Windows 7上运行上述程序时,它可以正常工作,但在linux计算机上,它无法管理命令

我建议使用比较器,它应该为您排序IP地址。 否则,您将获得平台相关的结果。 这是一个示例http://thilosdevblog.wordpress.com/2010/09/15/sorting-ip-addresses-in-java/此示例使Ordering保持不变。

java.net.InetAddress.getAllByName返回的地址顺序未定义。 如果它在一个平台上为您工作,那将是一次快乐的意外。

请记住,结果可能并不总是来自主机文件,而是来自DNS查找的结果(顺序也未定义)。

在具有多个接口(IP地址)的Windows计算机上,我也遇到类似的问题。 我注意到inetAddress.getAllByName()函数相应地返回IP列表,它们的接口ID即列表中的最高IP将是具有最高ID的接口的IP(特定于OS的内部列表)。 您可以通过Windows cmd行中的命令查找接口列表: route print

Interface List
  7...02 00 xx xx xx xx ......Microsoft KM-TEST Loopback Adapter
  3...fc aa xx xx xx xx ......Intel(R) Ethernet Connection I217-V
  8...02 01 xx xx xx xx ......SAMSUNG Mobile USB Remote NDIS Network Device
  4...00 e0 xx xx xx xx ......Realtek PCI GBE Family Controller
   .   .   .   .   .
  9...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
 32...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4

因此,在此示例中, getAllByName()调用列表中的第一个IP将是接口8( SAMSUNG Mobile USB Remote ... )的IP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM