如何生成主机唯一ID?

Aur*_*ien 7 linux networking uniqueidentifier docker

我有几个一起工作并且需要通信的应用程序。

这些应用程序可以安装在不同的主机上,这些主机可以位于不同的本地网络中,但都通过全球网络连接在一起。

主机可以是Linux(CenOS、Debian、Ubuntu)或Windows(7/10)。

现在,我需要确定哪个主机正在运行应用程序。

要求是: - 在同一主机上运行的每个应用程序都具有相同的“主机 ID” - 每个“主机 ID”在所有主机中都是唯一的

由于主机可以是物理机、虚拟机甚至docker实例,所以我认为我不能将主机名用作“全局唯一ID”。

由于主机可以位于不同的本地网络中,我认为我不能使用本地IP地址作为“全球唯一ID”。

那么,我可以使用哪些数据?也许是网络适配器的 MAC 地址?即使在同一个 docker 的多个实例之间,它是否保证是唯一的?

谢谢。

Chr*_*itz 5

在现代/最近的 Linux 发行版上,/etc/machine-id当系统第一次创建时,linux 会在文件中为您生成一个唯一的 id。一些分布式服务(例如etcd依赖此文件来识别集群中的计算机)。

没有什么可以阻止您在磁盘上创建并保留诸如 uuid 之类的东西。您可以uuidgen在 Linux 上使用命令来实现此目的。


小智 4

可以说 MAC 地址是唯一的。但是,如果您担心安全性,请不要使用 MAC 地址。MAC地址很容易被欺骗。

要为机器生成唯一的 ID,您可以使用许多项目的组合,例如 MAC 地址、IP 地址、主机名等,添加随机盐并对其进行 sha256 哈希。由于主机可以在许多操作系统上运行,因此我建议不要使用任何特定于操作系统的参数。

如果不涉及太多细节,至少可以说,在 sha256 中发现碰撞的可能性不大。

您可以在此处查看不同文本的 SHA256。 http://www.xorbin.com/tools/sha256-hash-calculator

如今,几乎每种编程语言都有用于创建 SHA256 哈希的函数/API。