C 使用java/jna在所有操作系统上获取硬件信息

C 使用java/jna在所有操作系统上获取硬件信息,c,operating-system,uniqueidentifier,jna,C,Operating System,Uniqueidentifier,Jna,大家好,我正在尝试编写一个java小程序,它将获得一些硬件信息、mac地址(我已经完成)、cpuid主板序列号和硬盘驱动器序列号。我知道我需要使用jna来实现这一点。我的问题是,在c/c++中有没有一种方法可以获得不依赖于平台的信息?我所看到的一切都只能在windows上工作,我需要它在所有平台上工作。我需要这些信息,以便创建该计算机的唯一id。如果有任何帮助或正确的方向,我们将不胜感激 我的问题是,在c/c++中有没有一种方法可以获得不依赖于平台的信息 不可能。见鬼,在同一PC市场中,不同MB

大家好,我正在尝试编写一个java小程序,它将获得一些硬件信息、mac地址(我已经完成)、cpuid主板序列号和硬盘驱动器序列号。我知道我需要使用jna来实现这一点。我的问题是,在c/c++中有没有一种方法可以获得不依赖于平台的信息?我所看到的一切都只能在windows上工作,我需要它在所有平台上工作。我需要这些信息,以便创建该计算机的唯一id。如果有任何帮助或正确的方向,我们将不胜感激

我的问题是,在c/c++中有没有一种方法可以获得不依赖于平台的信息

不可能。见鬼,在同一PC市场中,不同MB制造商/OEM的BIOS版本不同。如果电脑仍然有BIOS,而不是更新的EFI

Sun/SPARC是一个显著的例外:它们的H/W有一个相对唯一的ID,主要用于发明目的。它并不完全是独一无二的(这引出了另一点),因为这可能会从隐私方面推断,Sun别无选择,只能确保它不是全球独一无二的

在世界上许多地方,硬件的唯一标识是非法的,因此没有可靠的(最不可移植的)方法来实现您想要的


我认为绑定到MAC地址应该已经足够好了。在几乎所有的平台上,这些信息都很容易访问。只要您的许可证检查足够宽松,用户就有足够的时间接收新的许可证密钥(在更换硬件的情况下),应该不会有什么问题。

有一个名为的项目正是为了这样做。它正在寻找编写*nix实现的贡献者。

如果用户更改了MAC地址怎么办?或者由于某种原因无法读取MAC地址?仅仅使用MAC地址是不可靠的。还是我在这里做得太过分了?大多数消费级NIC不允许更改MAC地址。始终可以访问至少on*NIX Mac(通过
ifconfig
或通过
ioctl()
编程)。最好不要考虑高级用户——这是一罐一旦打开就无法关闭的蠕虫。(想想虚拟化:你的软件在虚拟机中被激活,然后被克隆。)或者其他方法:任何保护方案都可能被破解。您只能限制普通用户-高级用户总能找到出路。为普通用户优化保护,不要考虑高级用户,他们可以自己思考啊,好吧,我想我只是给自己带来了不必要的头痛。