Java getHostAddress()返回VirtualBox IPv4地址

时间:2011-11-21 22:51:22

标签: java ip-address virtualbox lan ipv4

我正在使用Java在类中构建一个简单的方法,该方法将获取用户计算机的LAN IPv4地址。对于 most 部分,这很有效,但有一个例外......我得到的IP地址是我的VirtualBox以太网适配器的IPv4地址,正如我在ipconfig输入{命令提示符:

enter image description here

以下是获取IP地址的方法:

import java.net.InetAddress;
import java.net.UnknownHostException;

...

private String getIP() {
  try {
    return InetAddress.getLocalHost().getHostAddress();
  } catch (UnknownHostException e) {
    return "0.0.0.0";
  }
}

有人可以告诉我如何解决这个问题吗?我想避免假设最终用户不会安装VirtualBox(或类似的东西)。

感谢您的时间。

2 个答案:

答案 0 :(得分:5)

我认为您需要查看NetworkInterface类,看看它是否有助于您在这种情况下排除虚拟接口:

    for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
        //Perhaps networkInterface.isVirtual() will help you identify the correct one?
    }

我的设置上没有任何虚拟接口,所以我不知道它的工作情况有多好,但我希望能给你一个指针。

答案 1 :(得分:1)

根据Yishai建议使用NetworkInterface类,根据我的经验,isVirtual()没有区分VM网络适配器和“普通”适配器。

但您可以使用NetworkInterface.getHardwareAddress()获取MAC地址,并进行一些模式匹配以猜测网络接口是否适用于虚拟机。有关常见虚拟机MAC地址模式,请参阅this page

无法保证此技术可行,因为大多数VM软件允许用户显式设置网络适配器的MAC地址。但是,在大多数情况下,用户只需获取VM软件即可生成一个,因此这些模式应涵盖大多数情况。