在必须实现许可证服务器时,我面临的问题是识别服务器,软件运行在一个主机ID上。服务器可以是任何Windows或Linux。虚拟机也是可能的。寻找网卡的MAC地址将允许在不更改主机ID的情况下复制虚拟机。
有关如何计算主机ID的任何想法?使用Java更容易实现。
答案 0 :(得分:1)
我必须这样做一次,最后在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,这可能会有所帮助。
是的,我知道最初研究可能看起来很多:)但我想在阅读规范和(如果需要)查看dmidecode的来源时,你应该能够做到这一点,并且会(根据我的经验)“在现场”产生比在磁盘或网卡中散列序列号更好的结果。
答案 1 :(得分: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。
顺便说一下,关于在Generating a unique machine id
创建机器唯一ID的stackoverflow还有另一个更具信息性的主题答案 2 :(得分:0)
MAC地址可能不是最好的方法,因为MAC地址相对容易欺骗。从Java 5开始,UUID类就可以用来创建唯一的id。我不确定你拍摄的是什么,所以我希望这就是你在寻找的东西。