java - 仅使用 Java 6 或仅使用 WMIC 枚举 MAC 地址

标签 java windows networking wmic

作为我的 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/

相关文章:

.net - 点网4.0.30319初始化错误

networking - 链接本地地址的相关性?

objective-c - 数据序列化

asp.net - 在不使用 Windows Server 的情况下在小型 Intranet 上部署 SignalR

java - 步骤卡住。当文件很大时,PoiItemreader 不会读取 Excel 文件。有什么建议吗?

java - 增加上传 Play Framework 中的 json 限制

java - 将单个字符串分成两个

ruby - 将 Gem 推送到托管的认证提要失败

java - 检查Java中自己的应用程序的Internet使用情况

java - 为什么 Jersey 在我创建自己的 Packages ResourceConfig 时说 "Array of packages must not be null or empty"?