java 获取唯一的服务器 ID 以供参考
java get unique server ID for reference
我在服务器 X 上 运行 有一个独立的命令行 java 应用程序。我需要知道 运行 所在机器的唯一 ID。如何获得这个ID?也许像哈希一样的东西。我不想在那里保留类似带有 ID 的文件之类的东西。有没有办法获得这个不依赖于 IP、硬件等的唯一 ID?
您可以读出服务器的MAC地址,并将其用作唯一键。
以下摘自 http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ 的代码片段显示了一种可能的实现方式。
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 地址也可以重复。
以下link显示可能的原因
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%。
我在服务器 X 上 运行 有一个独立的命令行 java 应用程序。我需要知道 运行 所在机器的唯一 ID。如何获得这个ID?也许像哈希一样的东西。我不想在那里保留类似带有 ID 的文件之类的东西。有没有办法获得这个不依赖于 IP、硬件等的唯一 ID?
您可以读出服务器的MAC地址,并将其用作唯一键。
以下摘自 http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ 的代码片段显示了一种可能的实现方式。
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 地址也可以重复。
以下link显示可能的原因 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%。