Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否为许可证管理计算唯一主机id?_Java_Licensing_Host_Uniqueidentifier - Fatal编程技术网

Java 是否为许可证管理计算唯一主机id?

Java 是否为许可证管理计算唯一主机id?,java,licensing,host,uniqueidentifier,Java,Licensing,Host,Uniqueidentifier,在必须实现许可证服务器时,我面临的问题是,如何识别软件运行在具有某些主机id的唯一服务器上。服务器可以是任何Windows或Linux。虚拟机也是可能的。查找网卡的MAC地址将允许在不更改主机id的情况下复制虚拟机 你知道如何计算主机id吗?最好使用Java。MAC地址可能不是最好的方法,因为MAC地址相对容易被欺骗。自Java5以来,就有了UUID类,可以用来创建唯一的id。我不确定你拍摄的目的是什么,所以我希望这就是你想要的。我曾经这样做过,最后在SMBios中使用了UUID 在我的例子中,

在必须实现许可证服务器时,我面临的问题是,如何识别软件运行在具有某些主机id的唯一服务器上。服务器可以是任何Windows或Linux。虚拟机也是可能的。查找网卡的MAC地址将允许在不更改主机id的情况下复制虚拟机


你知道如何计算主机id吗?最好使用Java。

MAC地址可能不是最好的方法,因为MAC地址相对容易被欺骗。自Java5以来,就有了UUID类,可以用来创建唯一的id。我不确定你拍摄的目的是什么,所以我希望这就是你想要的。

我曾经这样做过,最后在SMBios中使用了UUID

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

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

在虚拟机(即VMWare)上,UUID由物理机的UUID和vm“所在”的路径生成(请参阅:)

对于Java,我知道有一个,让我们读写内存。我从未真正尝试过它,但似乎是从Java实现它的正确方法(如果有人对此有任何经验,请发表评论!)

另外,有一个不可移植的解决方案:A,这意味着C++。如前所述,我唯一的经验是在unix系统上,在我的特定情况下,我发现的源代码非常有用。对于windows,您可以尝试此操作,这可能会有所帮助


是的,我知道一开始可能需要研究很多:)但我想,阅读规范和(如果需要)查看dmidecode的源代码,您应该能够做到这一点,并且(以我的经验)将在“领域”中产生更好的结果而不是散列磁盘或网卡上的序列号。

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

这不是因为SMBIOS UUID规范中出现故障,而是因为许多制造商在创建此UUID时没有遵循规范

有关这在实践中如何出错的更多信息,请参阅本英特尔博客,以下有启发性的故事有一些真实世界中非常糟糕的例子:


顺便说一句,关于stackoverflow还有另一个信息更丰富的主题,关于在

上创建机器唯一id,这在虚拟机中是如何实现的?虚拟机是否有自己的Bios UUID,当虚拟机从一台服务器复制到另一台服务器时,它保持不变?这对于仅为一台服务器主机授权来说是不幸的……我假设您在这里谈论的是vmware。每个vm都有自己的uuid,基于物理机器的uuid和vm所在的路径。看:谢谢你的提示!!我怎样才能访问它?使用VBS?我在这里找到了这个:当然:)我已经更新了答案,包括了虚拟机的参考和我对它的想法accessed@marcelog,VMware虚拟机的BIOS UUID存储在其
.vmx
文件中,位于名为
UUID.BIOS
的属性中。默认值可能基于物理机的UUID和路径,但具有文本编辑器的任何人都可以在之后更改它。虚拟机的MAC地址通常会在复制时更改,以避免在两个虚拟机同时运行时发生冲突。但是,如果您担心用户故意试图复制一个完全相同的虚拟机,那么就没有真正可靠的方法来区分一个虚拟机和另一个虚拟机。甚至BIOS UUID都可以修改。这就是我所猜测的。因此,VM原则最终会杀死所有试图进行主机限制的许可证管理人员…另请参阅。