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

标签 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 中)。因此,它们以多宿主的形式出现。有没有有效的方法来做到这一点?

最佳答案

您可以使用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");

关于java - 通过 Java 查找机器是否是多宿主的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038901/

相关文章:

java - 在Swing中设置JComboBox的背景

database - Rebol 的 PostgreSQL 驱动程序?

java - 查看按月份排序的十二生肖

java - 为什么 java 在我的变量声明中提示原始类型?

JavaFX 2 : How to focus a table row programmatically?

permissions - 如何在将文件复制到网络位置的批处理脚本中提供凭据?

Python:检查互联网连接(多次)

java - 如何使用方法计算成绩的 1 个数组参数并返回数组的总和?

python - 在 python 中使用套接字的 HTTP 基本身份验证

linux - 如何在 1 个网卡上设置来自不同子网的 IP,Centos 6.6