BSD 中独特的硬件签名?

BSD 中独特的硬件签名?

例如,您可以从 FreeBSD 系统中获得哪些独特的硬件签名?

我现在使用的是以太网 MAC 地址 (getifaddrs(3)),但众所周知,这可以通过 ifconfig 轻松更改。那么还有什么呢? sysctl 中有什么吗?

我正在使用 C 来执行此操作,因此如果我能找到在哪里查找,我很可能会找到一种方法来获取它。

答案1

最初的方法是使用hostid

手册页指出它是:

32 位标识符...通常是本地计算机的 DARPA Internet 地址

即它是机器的十六进制 IP 地址。

这意味着它不会仅仅因为有人必须更换损坏的网卡而改变。
这也意味着它不能保证是唯一的,例如,如果未配置网络,或者计算机使用私有 IP 地址。

事实上,它甚至可能没有被设置,并且可以由超级用户使用sethostid或进行更改sysctl

sysctl -a除了 之外,我在输出中找不到任何有用的东西kern.hostid
在 OpenBSD 上有hw.uuid,但在 FreeBSD 上不可用。

之后,有几个命令可能会有所帮助,包括:

其中大部分通过调用来工作ioctl关于相关的设备

如果您需要在 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 机器一样的完整硬件信息。

相关内容