我的主持人条目如下:
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机器上它不管理命令
答案 0 :(得分:2)
我建议使用Comparator,它应该为您排序IP地址。另外,你将得到平台相关的结果。这是一个例子http://thilosdevblog.wordpress.com/2010/09/15/sorting-ip-addresses-in-java/ 此示例使订单保持不变。
答案 1 :(得分:1)
java.net.InetAddress.getAllByName返回的地址顺序未定义。如果它在一个平台上运行,那么它只是一个幸福的事故。
请记住,结果可能并非总是来自主机文件,而是来自DNS查找的结果(订单也未定义)。
答案 2 :(得分:0)
我在具有多个接口(IP地址)的 Windows 计算机上遇到类似问题。我注意到inetAddress.getAllByName()
函数相应地返回IP列表它们的接口ID,即列表中最顶层的IP将是具有最高ID(OS特定内部列表)的接口的IP。您可以通过 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的IP( SAMSUNG Mobile USB Remote ... )。