2014-02-06 44 views
9

我正在寻找一个对于每个独立于平台的计算机都是唯一的值。这是为了将机器注册到帐户,以便您不能从未注册的机器登录。我不想使用MAC地址,因为这可以很容易地改变。我想知道可能会从几个硬件组件获取ID并将它们组合起来以获得机器的唯一ID。但是,我不确定如何使用Java从所述组件获取ID。我做了一些研究,发现了一种检索CPU序列号的方法,但这只适用于windows,因为它只是运行一个临时的可视化基本命令/脚本/不管。任何信息表示赞赏,谢谢。独立于平台的唯一计算机ID java

+3

对于用户空间应用程序,一切都很容易被欺骗。大多数商品硬件甚至没有将闪存插入某种只读存储器的唯一ID。 – 2014-02-06 16:46:52

+2

请参阅这里的讨论http://stackoverflow.com/questions/2004666/get-unique-machine-id – Leo

+1

谢谢你的回应,我仍然不确定我可以如何去做这件事。 – user1009569

回答

0

对于能够伪造MAC地址,您是正确的。有没有机器的你不能欺骗这种或那种方式,这就是为什么机器具体识别通常是一个坏主意。对Java而言,这是一个更糟糕的想法,因为Java的全部内容都是从硬件中抽象出来的。这实际上只能让你使用JVM和网络堆栈来获取详细信息。

所以我只能看到两个选项。

首先,您可以尝试生成主机名,当前类路径,系统属性和JVM值的某种组合的哈希。沿着这条线你可能会看到你从System.getenv()或System.getProperties()获得什么值

第二种方法是使用本地运行时API返回系统特定的值,但你需要具有特定的值命令为您的客户端试图支持的每种操作系统类型运行。示例:

Runtime.getRuntime()。exec(“some_command_line_prog_that_returns_sys_info”);