Linux等效的MachineGuid

时间:2013-09-04 20:35:08

标签: c++ linux wxwidgets uniqueidentifier

我的程序需要操作系统安装指纹,就像存储在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ MachineGuid中的MSW一样 在Microsoft Windows中,我已经准备好了,但我找不到与Linux相同的功能。 Linux中有什么接近这个的吗?我不会有root权限,所以像dmidecode -s system-uuid这样的东西就不可能了。

一个例子很好,但没有必要。

4 个答案:

答案 0 :(得分:2)

一种可能性是阅读所有人都可读的/etc/ssh/ssh_host_{d,r}sa_key.pub,并在安装过程中随机生成。

显然问题是,如果没有安装SSH(服务器),那些文件可能根本不存在。它们也经常从较旧的安装中复制。

答案 1 :(得分:1)

规范的Unix'y答案是主机ID,但实际上,这往往最终会落在IP地址的哈希值上......

   #include <unistd.h>

   long gethostid(void);
   int sethostid(long hostid);

DESCRIPTION
   gethostid()  and  sethostid()  respectively get or set a unique 32-bit identifier for
   the current machine.  The 32-bit identifier is intended to be unique among  all  UNIX
   systems  in  existence.   This  normally resembles the Internet address for the local
   machine, as returned by gethostbyname(3), and thus usually never needs to be set.

NOTES
   In the glibc implementation, the hostid is stored in the file /etc/hostid.  (In glibc
   versions before 2.2, the file /var/adm/hostid was used.)

   In  the glibc implementation, if gethostid() cannot open the file containing the host
   ID, then it obtains the hostname using gethostname(2), passes that hostname to  geth‐
   ostbyname_r(3)  in  order  to  obtain  the  host's  IPv4 address, and returns a value
   obtained by bit-twiddling the IPv4 address.  (This value may not be unique.)

答案 2 :(得分:1)

我假设您正在尝试这样做,因为您想将软件“锁定”到特定的硬件上?

一种选择是使用网络接口的MAC地址来识别当前机器。 MAC地址很容易获得,请参阅this Stackoverflow question

这很好地解决了更改IP等问题,因为除非有人替换网卡,否则接口的MAC地址更不太可能发生变化。

答案 3 :(得分:0)

我认为MAC地址不是识别机器的好选择。有许多USB加密狗可以插入PC以提供移动/ 3G / H + /等。网络接口,所以当这样的加密狗插入机器时,它将具有从可用网络接口MAC地址派生的不同id。

目标系统上是否有/ etc / machine-id(/ var / lib / dbus / machine-id)?

请参阅:http://man7.org/linux/man-pages/man5/machine-id.5.html

请参阅:http://0pointer.de/blog/projects/ids.html