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のみが返され、他の仮想アダプターは返されません。