作为我的 Windows 专用 Java 应用程序的一部分,我需要查询各种硬件属性 - CPU/BIOS/硬盘序列号和 MAC 地址。所以我可以通过Runtime.exec
调用使用 WMIC 和其他 Windows 特定工具。查询 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 写入文本文件,执行,然后将其删除。这既麻烦又慢。我已经直接使用 wmic 来查询其他系统属性,例如 BIOS 序列号。
纯 Java 解决方案会好得多,但我没有遇到所有可用的 MAC 地址。我见过的最接近的是this,用于 IP 地址。
有没有办法从Java做到这一点?我应该补充一点,我仅限于使用 Java 6,尽管我听说 Java 7 有更多有用的网络 API。
更新:忘记添加NetworkInterface
只返回 IPv4 以太网 MAC,没有其他虚拟适配器。