0

我正在使用使用 Java API的非常简单的代码来显示网络信息: NetworkInterface#getHardwareAddress()

该代码适用于 Windows XP、XP 64、Debian。

我在 Win 7 上发现了两种不同的行为:我公司的计算机与我的计算机。显示的信息不一样ipconfig /all,我只得到最后一个虚拟网卡的物理地址。

我使用 java 1.6 u32、1.7 u21 和 1.7 u40(两个版本 x86/64)重现该问题:查看输出,eth3 和 eth4 返回错误的 mac 地址。

我认为代码是正确的:这与 Stack Overflow 上的建议相同,结果在我的个人计算机上是正确的。

  • 有谁知道哪些参数可能会影响结果?
  • 我应该在 Windows 上检查哪些设置以确定不同机器之间的差异?
  • 有什么建议么 ?

去做

我将尝试禁用虚拟接口,然后重新启动该工具。(需要 IT 干预...)。

4

1 回答 1

0

我也有同样的问题。这是在我的带有 VMVare 虚拟卡的 Windows 7 机器上运行的代码:

private String getMacJava5() throws Exception {
    String mac = "";

    InetAddress ip = InetAddress.getLocalHost();

    String[] command = {"ipconfig", "/all"};
    Pattern physAddr = Pattern.compile("\\s*Physi.*: (.*)");
    Pattern ipAddr = Pattern.compile("\\s*IPv.*: ([^(]*).*");

    Process p = Runtime.getRuntime().exec(command);
    BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream()));
    while (true) {
        String line = inn.readLine();
        if (line == null) {
            break;
        }

        Matcher mm = physAddr.matcher(line);
        if (mm.matches()) {
            mac = mm.group(1);
        }
        mm = ipAddr.matcher(line);
        if (mm.matches()) {
            if (mm.group(1).equals(ip.getHostAddress())) {
                break;
            }
            mac = "";
        }
    }
    return mac + " IP: " + ip.getHostAddress();
}
于 2013-10-16T15:29:39.857 回答