通过Java查找机器是否为多宿主

时间:2014-01-10 07:58:45

标签: java networking

是否有内置的编程方式来确定机器是否是多宿主?我有下面的代码片段可以完成任务,但看起来很麻烦。有更好的方法吗?

int count = 0;
    try {
          InetAddress localhost = InetAddress.getLocalHost();
          InetAddress[] allMyIps = InetAddress.getAllByName(localhost.getCanonicalHostName());
          if (allMyIps != null && allMyIps.length > 1) {
              for (int i = 0; i < allMyIps.length; i++) {
                  if (allMyIps[i].isLoopbackAddress() == false) count++;
              }
          }
          if (count > 1) System.out.println("Multihomed");
        } catch (UnknownHostException e) {
          e.printStackTrace();
        }

我对此持怀疑态度,因为默认情况下所有混合NIC都配置了IpV6和IPv4(至少在Windows 7中)。因此,这些作为一个多家庭出现。有没有一种有效的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以使用&#34; NetworkInterface&#34; java中的类。如果有多个接口而不是loopback接口,那么它就是多宿主。

Enumeration<NetworkInterface> ifs = NetworkInterface.getNetworkInterfaces();
int count = 0;
while (ifs.hasMoreElements()) {
    if (count > 1) {
       break;
    }

    if(!ifs.nextElement().isLoopback()) {
        count++;
    }
 }

 System.out.println(count > 1 ? "Multi-homed" : "Not Multi-homed");