当前位置:  开发笔记 > 运维 > 正文

从类似unix的系统中获取唯一的id

如何解决《从类似unix的系统中获取唯一的id》经验,为你挑选了4个好方法。

我想从任何类Unix系统(如果可能的话)获得一个唯一的id,每次我的应用程序在同一台机器上运行时它都会持久化.如果有可能,我想从Linux或FreeBSD或Solaris等获得相同的ID ...我不想为每台机器生成一个新的id,但是获得一个已经存在的id,我更喜欢这个id来自操作系统,我不喜欢使用类似MAC地址的东西.

如果没有其他可用选项,我可以将MAC与其他内容结合使用,例如id可以是MAC地址组合的md5哈希值.

我想听听你的建议.

如果它有用,我的应用程序是用C/C++编写的.

所有这一切的目的是阻止用户运行我的应用程序两次或更多次.我想只运行一次.



1> Jason Day..:

根文件系统的UUID怎么样?您可以/etc/fstab通过手动解析文件或使用getfsent (3)或来获取根文件系统设备getfsfile (3).一旦你的设备,你可以通过检查环节中获得UUID /dev/disk/by-uuid或从blkid命令.



2> Martin v. Lö..:

Solaris和Linux都提供了hostid(1)实用程序


在Linux glibc上,gethostid()(这是hostid使用的)返回一个基于IP地址的值,该值既不唯一也不是不变.
我刚刚在3台不同的计算机上测试了`hostid`(但同一个发行版):它为所有计算机返回相同的值.

3> CesarB..:

像往常一样,最好的方法是看看其他人是如何解决同样的问题的.

FLEXlm还为其节点锁定许可证使用主机标识符.它使用的最常见的主机标识符是您的一个网络接口的以太网MAC地址,在没有任何分隔符的情况下粉碎在一起.

它还可以使用(在Windows上)C:驱动器的卷序列号(再次在没有任何分隔符的情况下一起打碎),在Solaris上输出hostid命令(IIRC,在Sun计算机上,这个数字实际上是唯一的,位于系统板上的小型可移动EEPROM).

虽然MAC地址非常容易伪造,但它现在几乎是普遍的标识(几乎所有新计算机都至少有一个以太网端口,并且它们在板上非常普遍),并且实际上是全球唯一的(在事实上,以太网协议依赖于这种独特性.这种方法会遇到的主要问题是:

有些计算机有几个以太网地址; 其中一些在主板上,一些在单独的可移动卡上.

它们非常容易伪造(一些协议依赖于能够改变它们).

某些虚拟化环境会在每次启动时生成随机的以太网地址(但它们通常可以强制使用固定值).



4> Phillip Whel..:

另一个选择是使用从dmidecode派生的信息,这是linux上的一个命令.此信息从/ dev/mem解码,因此需要root访问权限.

知道dmidecode读取的信息是有缺陷的,因为一些主板制造商谎言或假冒某些领域.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有