0

Windows専用のJavaアプリケーションの一部として、CPU / BIOS /ハードディスクのシリアル番号やMACアドレスなど、さまざまなハードウェアプロパティを照会する必要があります。そのため、WMICやその他のWindows固有のツールをRuntime.exec呼び出しで使用できます。CPUとBIOSのシリアル番号の照会は簡単です。たとえば、 wmic BIOS get SerialNumberトリックを行います。MACアドレスを一覧表示するための同様の簡単な解決策は見つかりませんでした。 wmic nic list brief正しくフォーマットされていないリストが表示されますが、出力を正規表現で解析するのは面倒です。

WMIC関連のメソッドを探すことはすべて、次のVBScriptのバリエーションを示しています。

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _ 
("Select * from Win32_NetworkAdapterConfiguration") 
For Each objItem in colItems 
if objItem.IPEnabled = 0 And objItem.ServiceName <> "VMnetAdapter" And isNull(objItem.MACAddress) = 0 Then 
Wscript.Echo objItem.MACAddress   
End if   
Next 

VBSの保存と実行はセキュリティ上の問題があるため、現在行われているのは、VBscriptをテキストファイルに書き出し、実行してから削除することです。これは面倒で時間がかかります。BIOSシリアル番号などの他のシステムプロパティをクエリするためにwmicを直接使用しました。

純粋なJavaソリューションの方がはるかに優れていますが、利用可能なすべてのMACアドレスについては何も見つかりませんでした。私が見た中で最も近いのは IPアドレスの場合です。

Javaからこれを行う方法はありますか?私はJava6の使用に制限されていることを付け加えておきますが、Java7にはもっと便利なネットワークAPIがあると聞いています。

更新:追加するのを忘れたためNetworkInterface、IPv4イーサネットMACのみが返され、他の仮想アダプターは返されません。

4

3 に答える 3

1

VPNおよびその他のインターフェースのMACアドレスをから取得しますjava.net.NetworkInterface。コマンドを使用して「物理アドレス」でリストされているすべてのものについて:ipconfig /all少なくとも、それよりもうまくいくことができるとは思えませんか?

public static void main(String[] args) {
    printNetworkInterfaces(NetworkInterface.getNetworkInterfaces(), 1);
}

private static void printNetworkInterfaces(Enumeration<NetworkInterface> netIfs, int indent) {
    for (NetworkInterface netIf : Collections.list(netIfs)) {
        System.out.printf("%" + indent + "s%s (%s): %s%n", "", netIf.getName(), netIf.getDisplayName(), formatHwAddress(netIf));
        printNetworkInterfaces(netIf.getSubInterfaces(), indent + 2);
    }
}

....

出力から抽出します。

eth4(Intel(R)82579Vギガビットネットワーク接続):xx:xx:xx:xx:xx:xx <-ここでは実際のMACアドレス
net4(Teredoトンネリング疑似インターフェース):00:00:00:00:00:00 :00:e0
net5(Microsoft ISATAPアダプター):00:00:00:00:00:00:00:e0
eth12(TAP-Win32アダプターV9):xx:xx:xx:xx:xx:xx<-実際のここのMACアドレス

これはjava7u3を使用していましたが、java6では異なる場合があります。

于 2012-03-03T23:57:06.117 に答える
1

JavaからWMIにアクセスしてみませんか?おそらくjWMIを使用–JavaからWindowsWMIをクエリする

于 2012-03-07T04:57:41.350 に答える
0

Java 1.6では、を介してMACアドレスを取得できますjava.net.NetworkInterface

于 2012-02-29T09:20:44.740 に答える