我有一个程序需要操作系统安装指纹,例如存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid 中的 MSW 中的程序。Linux中是否有任何与此相关的东西?我将没有 root 访问权限,所以任何类似的事情都是不可能dmidecode -s system-uuid
的。
一个例子会很好,但没有必要。
我有一个程序需要操作系统安装指纹,例如存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid 中的 MSW 中的程序。Linux中是否有任何与此相关的东西?我将没有 root 访问权限,所以任何类似的事情都是不可能dmidecode -s system-uuid
的。
一个例子会很好,但没有必要。
一种可能性是 read /etc/ssh/ssh_host_{d,r}sa_key.pub
,所有人都可以阅读,并且在安装过程中随机生成。
显然问题在于,如果没有安装 SSH(服务器),这些文件可能根本不存在。它们也经常从较旧的安装中复制。
我认为 MAC 地址不是识别机器的好选择。有许多 USB 加密狗可以插入 PC 以提供移动/3G/H+/等。网络接口,因此当这样的加密狗插入机器时,它将具有从可用网络接口 MAC 地址派生的不同 ID。
/etc/machine-id (/var/lib/dbus/machine-id) 在您的目标系统上可用吗?
标准的 Unix 答案是主机 ID,但在实践中,这通常最终会依赖 IP 地址的哈希......</p>
#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.)
我假设您尝试这样做是因为您想将软件“锁定”到特定的硬件上?
一种选择是使用网络接口的 MAC 地址来识别当前机器。MAC 地址相当容易获得,请参阅这个 Stackoverflow 问题。
这很好地解决了更改 IP 等问题,因为除非有人更换网卡,否则接口的 MAC 地址不太可能更改。