【问题标题】:java get unique server ID for referencejava获取唯一的服务器ID以供参考
【发布时间】:2015-06-30 17:01:33
【问题描述】:

我有一个在服务器 X 上运行的独立命令行 java 应用程序。我需要知道运行它的机器的唯一 ID。如何获得这个ID?也许像哈希一样的东西。我不想在那里保留像里面有 ID 的文件。有没有办法获得这个不依赖于 IP、硬件等的唯一 ID?

【问题讨论】:

  • 你为什么不想依赖硬件,例如mac地址?
  • ID 应该是可重现的(确定性的)吗?如果没有,只需创建,甚至使用现有的 UUID(在 linux 下,您可以查看 blkid 命令)。

标签: java spring hash server uniqueidentifier


【解决方案1】:

您可以读出服务器的 MAC 地址并将其用作唯一密钥。

以下来自http://www.tutego.de/blog/javainsel/2013/12/mac-adressen-auslesen/ 的代码 sn-p 显示了一个可能的实现。

 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% 的可能重复风险。

【讨论】:

  • MAC 地址可由用户更改,并且只保证在子网内唯一。
  • @EJP 我知道会提到这个问题,而且肯定会是个问题。但是发生冲突的可能性很小。
  • 如果您在虚拟化世界中,例如 VMWare,将 vm 移动到新主机会更改 mac 地址,如果某些配置设置正确,还会进行其他更改。
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 2020-08-01
  • 2011-01-01
  • 2011-01-07
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2013-08-12
相关资源
最近更新 更多