作为我的 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 7 有更多有用的网络 API,但我仅限于使用 Java 6。
更新:忘记添加 NetworkInterface
只返回 IPv4 以太网 MAC,而不返回任何其他虚拟适配器。
最佳答案
你不尝试从java访问WMI吗?也许与 jWMI – Query Windows WMI from Java
关于java - 仅使用 Java 6 或仅使用 WMIC 枚举 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496288/