我有一个独立的命令行Java应用程序正在服务器X上运行。需要知道它运行的机器的唯一ID。如何获取这个ID?也许像散列一样的东西。我不想在其中保存像ID文件这样的东西。是否有一种不依赖于IP、硬件等的方式来获取此唯一ID?
我有一个独立的命令行Java应用程序正在服务器X上运行。需要知道它运行的机器的唯一ID。如何获取这个ID?也许像散列一样的东西。我不想在其中保存像ID文件这样的东西。是否有一种不依赖于IP、硬件等的方式来获取此唯一ID?
for ( NetworkInterface ni : Collections.list(NetworkInterface.getNetworkInterfaces() ) ) {
byte[] adr = ni.getHardwareAddress();
if ( adr == null || adr.length != 6 )
continue;
String mac = String.format( "%02X:%02X:%02X:%02X:%02X:%02X",
adr[0], adr[1], adr[2], adr[3], adr[4], adr[5] );
System.out.println( mac );
}
很抱歉,源文件是德语的,但我相信也存在英文文档。
根据评论进行编辑:
当然还要考虑MAC地址可能会有重复的情况。
以下链接显示可能的原因:https://serverfault.com/questions/462178/duplicate-mac-address-on-the-same-lan-possible
无论如何,使用MAC地址作为解决这个问题的方法是一种实用的方式。
使用哈希方法:http://preshing.com/20110504/hash-collision-probabilities/
或者
GUID:Is it safe to assume a GUID will always be unique?
也不能保证0.0%的可能性出现重复。