4

虽然必须实施许可证服务器,但我面临的问题是识别软件正在运行的服务器,该服务器具有一些主机 ID。服务器可以是任何 Windows 或 Linux。虚拟机也是可能的。寻找网卡的 MAC 地址将允许在不更改主机 ID 的情况下复制虚拟机。

任何想法如何计算主机ID?最好用Java可行。

4

3 回答 3

2

我不得不这样做一次,最终在 SMBios 中使用了 UUID。

就我而言,我在 unix 环境中使用 C,而不是 Java,但您可能有兴趣阅读SMBios规范,并尝试阅读 UUID,这应该比阅读 MAC、硬盘序列号好一点,等等,因为用户可能比 BIOS 更频繁地更换这些。

编辑:更新以添加我们在评论中讨论的内容(只是为了将所有内容放在同一个地方)。

在虚拟机(即 VMWare)上,UUID 是从物理机的 UUID 和 vm “居住”的路径生成的(参见: http: //www.vmware.com/support/ws55/doc/ ws_move_uuid_format.html )

对于 Java,我知道有javax.realtime.RawMemoryAccess,可以让你读写内存。我从来没有真正尝试过,但似乎是从 Java 中做到这一点的正确方法(如果有人对此有任何经验,请发表评论!)

否则,有一个不那么便携的解决方案:一个JNI,这意味着 C++。正如我之前所说,我唯一的经验是在 unix 系统上,在我的特殊情况下,我找到了dmidecode的源代码,非常有帮助。对于 Windows,您可以尝试这个SO question,这可能会有所帮助。

是的,我知道一开始可能需要研究很多东西) 在“现场”产生比从磁盘或网卡散列序列号更好的结果。

于 2012-05-31T21:01:51.690 回答
1

不幸的是,SMBIOS UUID 并非在所有系统上都是唯一的。应该是,但不是。

这不是因为 SMBIOS UUID 的规范失败,而是因为许多制造商在创建此 UUID 时没有遵循规范。

有关在实践中如何出错的更多信息,请参阅此英特尔博客http://software.intel.com/en-us/blogs/2007/06/08/are-uuids-enterprise-worthy和以下指导性故事有一些来自现实世界的非常糟糕的例子:http: //howtowriteaprogram.blogspot.nl/2012/06/smbios-uuid-fail.html

顺便说一句,关于在生成唯一机器 ID处创建机器唯一 ID 的另一个关于 stackoverflow 的信息更丰富的主题

于 2013-03-21T08:44:53.927 回答
0

MAC 地址可能不是最好的方法,因为 MAC 地址相对容易被欺骗。从 Java 5 开始,就有了可用于创建唯一 ID 的 UUID 类。我不确定你在拍摄什么,所以我希望这就是你正在寻找的。

于 2012-05-31T20:52:31.330 回答