【问题标题】:Calculate unique host id for license management? [duplicate]计算许可证管理的唯一主机 ID? [复制]
【发布时间】:2012-05-31 20:48:32
【问题描述】:

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

任何想法如何计算主机ID?最好用 Java 来实现。

【问题讨论】:

  • 复制时虚拟机的 MAC 地址通常会发生变化,以避免两个虚拟机同时运行时发生冲突。但是,如果您担心用户故意尝试制作完全相同的副本,则没有真正可靠的方法来区分一个 VM 和另一个 VM。甚至可以修改 BIOS UUID。
  • 这就是我的猜测。所以最后,VM 原则会扼杀每一个试图进行主机限制的许可证管理......

标签: java licensing host uniqueidentifier


【解决方案1】:

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

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

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

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

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

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

是的,我知道一开始可能需要研究很多 :) 但我想阅读规范并(如果需要)查看 dmidecode 的源代码,你应该能够做到,并且会(以我的经验)在“现场”产生比从磁盘或网卡散列序列号更好的结果。

【讨论】:

  • 在虚拟机中怎么样?虚拟机是否有自己的 Bios UUID,当虚拟机从一台服务器复制到另一台时,该 UUID 是否保持不变?这对于只为一台服务器主机许可是不幸的......
  • 我假设您在这里谈论的是 vmware。每个 vm 都有自己的 uuid,基于物理机的 uuid 和 vm 所在的路径。见:vmware.com/support/ws55/doc/ws_move_uuid_format.html
  • 感谢您的提示!!我怎么能访问它?用VBS?我在这里找到了这个:rgagnon.com/javadetails/java-0580.html
  • 当然 :) 我已经更新了答案以包括虚拟机的参考以及我对如何访问它的想法
  • @marcelog,VMware 虚拟机的 BIOS UUID 存储在其 .vmx 文件中,名为 uuid.bios 的属性中。 default 值可能基于物理机的 UUID 和路径,但任何拥有文本编辑器的人都可以在之后更改它。
【解决方案2】:

不幸的是,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

顺便说一句,关于在 Generating a unique machine idGenerating a unique machine id 创建机器唯一 ID 的 stackoverflow 上还有另一个信息量更大的主题

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-29
      • 2011-03-17
      • 2011-09-13
      • 2022-01-23
      • 2013-07-05
      • 1970-01-01
      • 2019-02-16
      • 2011-04-05
      • 2013-02-04
      相关资源
      最近更新 更多