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

小星 编程 65

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

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条回复 我来回复
  • 编程小能手
    编程小能手
    来自于宇宙以外的编程小能手~
    评论

    您可以在 java 中使用“NetworkInterface”类。如果除了环回接口(interface)之外还有多个接口(interface),则它是多宿主的。

    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");
    

    2025-04-13 15:07:04 1条评论