Linux获取硬件标识

1. gethostid()

首先,unistd.h中有提供一个获取主机标识的函数: gethostid(); 可以返回一个以32位整数表示的标识符,它是由机器的IP经过移位后得到的。

long hostid = gethostid();

正因为这个hostid是由IP地址转换得来的,我们可以用它来快速获得当前机器的主IP:

如hostid为:AABBCCDD,则IP为 BB.AA.DD.CC,当然各个部分还得转换成二进制数。

2. Get harddisk Product ID

这步的关键是ioctl的使用。首先,以只读的方式打开硬盘设备,给ioctl的第一个参数传递fd, 第二个参数传递HDIO_GET_IDENTITY,第三个地址是out类型参数,给它一个struct hd_driveid的结构体指针即可。

ioctl(fd, HDIO_GET_IDENTITY, &hid);

3. Get MAC address

MAC地址的获取也是通过ioctl。

4. Get CPU ID

这个就是汇编了。

见附件。

mac.c ip.c hostid.c cpuid.c disk.c