gpt4 book ai didi

java - 如何在Java中获取唯一的计算机标识符(如磁盘ID或主板ID)?

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:47 26 4
gpt4 key购买 nike

我想获得一个在 Windows、MacOS 和 Linux(如果可能的话)上使用 Java 的计算机唯一的 ID。它可能是磁盘 UUID、主板 S/N...

可以使用

Runtime.getRuntime().exec(它不是小程序)。

想法?

最佳答案

MAC 地址的问题是计算机上可能有多个网络适配器连接。大多数最新产品默认有两个(wi-fi + 电缆)。在这种情况下,人们必须知道应该使用哪个适配器的 MAC 地址。我在我的系统上测试了 MAC 解决方案,但我有 4 个适配器(电缆、WiFi、用于 Virtual Box 的 TAP 适配器和一个用于蓝牙的 TAP 适配器),并且我无法决定应该采用哪个 MAC...如果决定使用当前正在使用的适配器(已分配地址),那么就会出现新问题,因为有人可以拿走他/她的笔记本电脑并从电缆适配器切换到 Wi-Fi。在这种情况下,通过电缆连接笔记本电脑时存储的 MAC 现在将无效。

例如,这些是我在系统中找到的适配器:

lo MS TCP Loopback interface
eth0 Intel(R) Centrino(R) Advanced-N 6205
eth1 Intel(R) 82579LM Gigabit Network Connection
eth2 VirtualBox Host-Only Ethernet Adapter
eth3 Sterownik serwera dostepu do sieci LAN Bluetooth

我用来列出它们的代码:

Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
NetworkInterface ni = nis.nextElement();
System.out.println(ni.getName() + " " + ni.getDisplayName());
}

从这个页面上听的选项来看,我最能接受的,我在解决方案中使用的一个是@Ozhan Duz 的,另一个类似于@finnw 的答案,他使用了JACOB,值得一提的是 com4j - 使用 WMI 的示例可用 here :

ISWbemLocator wbemLocator = ClassFactory.createSWbemLocator();
ISWbemServices wbemServices = wbemLocator.connectServer("localhost","Root\\CIMv2","","","","",0,null);
ISWbemObjectSet result = wbemServices.execQuery("Select * from Win32_SystemEnclosure","WQL",16,null);
for(Com4jObject obj : result) {
ISWbemObject wo = obj.queryInterface(ISWbemObject.class);
System.out.println(wo.getObjectText_(0));
}

这将打印一些计算机信息以及计算机序列号。请注意,此示例所需的所有类都必须由 maven-com4j-plugin 生成。 maven-com4j-plugin 的示例配置:

<plugin>
<groupId>org.jvnet.com4j</groupId>
<artifactId>maven-com4j-plugin</artifactId>
<version>1.0</version>
<configuration>
<libId>565783C6-CB41-11D1-8B02-00600806D9B6</libId>
<package>win.wmi</package>
<outputDirectory>${project.build.directory}/generated-sources/com4j</outputDirectory>
</configuration>
<executions>
<execution>
<id>generate-wmi-bridge</id>
<goals>
<goal>gen</goal>
</goals>
</execution>
</executions>
</plugin>

上面的配置将告诉插件在项目文件夹的 target/generated-sources/com4j 目录中生成类。

对于那些想要查看即用型解决方案的人,我提供了我编写的用于在 Windows、Linux 和 Mac OS 上获取计算机 SN 的三个类的链接:

关于java - 如何在Java中获取唯一的计算机标识符(如磁盘ID或主板ID)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com