例如,您可以从 FreeBSD 系统中获得哪些独特的硬件签名?
我现在使用的是以太网 MAC 地址 (getifaddrs(3)),但众所周知,这可以通过 ifconfig 轻松更改。那么还有什么呢? sysctl 中有什么吗?
我正在使用 C 来执行此操作,因此如果我能找到在哪里查找,我很可能会找到一种方法来获取它。
答案1
最初的方法是使用hostid
。
手册页指出它是:
32 位标识符...通常是本地计算机的 DARPA Internet 地址
即它是机器的十六进制 IP 地址。
这意味着它不会仅仅因为有人必须更换损坏的网卡而改变。
这也意味着它不能保证是唯一的,例如,如果未配置网络,或者计算机使用私有 IP 地址。
事实上,它甚至可能没有被设置,并且可以由超级用户使用sethostid
或进行更改sysctl
。
sysctl -a
除了 之外,我在输出中找不到任何有用的东西kern.hostid
。
在 OpenBSD 上有hw.uuid
,但在 FreeBSD 上不可用。
之后,有几个命令可能会有所帮助,包括:
如果您需要在 C 中执行此操作,请查看源代码有关上述命令的更多详细信息。
您还可以看看libvolume_id
或者libblkid
获取根文件系统的 id。因为它们是端口,所以显然它们都不属于基本系统的一部分,但其中一个可能会作为标准桌面安装的一部分进行安装。
也可以看看:从类 Unix 系统获取唯一的 id。
答案2
Linux 有一个名为“dmidecode”的工具,可以从许多现有硬件中提取 S/N,包括内存模块(如果通过 DMI 提供)、磁盘、CPU 等。这可能会有所帮助 - 但要意识到其中许多可能会改变无需实际更换机器!
我不确定 FreeBSD 是否有相同的工具,但我确信他们有一些东西可以填补这个空白。
答案3
dmidecode 可用于 FreeBSD,我在 FreeBSD 8.2-RELEASE 中安装了 dmidecode-2.12。
它提供了像 Linux 机器一样的完整硬件信息。