0

Java API NetworkInterface#getHardwareAddress()を使用する非常に単純なコードを使用して、ネットワーク情報を表示しています。

コードは Windows XP、XP 64、Debian で動作します。

Win 7 では、会社のコンピューターと私のコンピューターの 2 つの異なる動作が見られます。表示される情報は と同じではありませんipconfig /all。最後の仮想ネットワーク カードの物理アドレスしか取得できません。

Java 1.6 u32、1.7 u21、および 1.7 u40 (両方のバージョン x86/64) を使用して問題を再現します。出力を見ると、eth3 と eth4 が間違った MAC アドレスを返します。

コードは正しいと思います。これは Stack Overflow で提案されているものと同じであり、結果は私のパーソナル コンピューターで正しいものです。

  • 結果に影響を与える可能性のあるパラメーターを知っている人はいますか?
  • 異なるマシン間の違いを判断するには、Windows でどの設定を確認する必要がありますか?
  • 助言がありますか ?

ToDo

仮想インターフェイスを無効にしてから、ツールを再起動してみます。(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 に答える