我正在寻找一个与计算机唯一且与平台无关的值。这是为了将计算机注册到一个帐户中,以便您不能从未注册的计算机上登录。我不想使用MAC地址,因为它可以轻易地改变。我在考虑从几个硬件组件中获取ID并将它们组合以获得计算机的唯一ID。然而,我不确定如何使用Java从这些组件中获取ID。我进行了一些研究,发现了一种检索CPU序列号的方法,但这仅适用于Windows,因为它只是运行了一个临时的Visual Basic命令/脚本/什么的。感谢任何信息。
我正在寻找一个与计算机唯一且与平台无关的值。这是为了将计算机注册到一个帐户中,以便您不能从未注册的计算机上登录。我不想使用MAC地址,因为它可以轻易地改变。我在考虑从几个硬件组件中获取ID并将它们组合以获得计算机的唯一ID。然而,我不确定如何使用Java从这些组件中获取ID。我进行了一些研究,发现了一种检索CPU序列号的方法,但这仅适用于Windows,因为它只是运行了一个临时的Visual Basic命令/脚本/什么的。感谢任何信息。
关于伪造MAC地址,您是正确的。没有机器ID是无法被伪造的,这就是为什么特定于机器的识别通常是一个坏主意。在Java中更是如此,因为Java的整个目的就是抽象出硬件。这只留下了JVM和网络堆栈来获取详细信息。
所以我只能看到两种选择:
首先,您可以尝试生成主机名、当前类路径、系统属性和JVM值的某些组合的哈希值。沿着这条线,您可能会看到从System.getenv()或System.getProperties()获取的值。
第二种方法是使用本地运行时API返回系统特定值,但您需要针对客户端尝试支持的每种操作系统类型具有特定的命令。例如:
Runtime.getRuntime().exec("some_command_line_prog_that_returns_sys_info");