- gethostid()
首先,unistd.h中有提供一个获取主机标识的函数: gethostid(); 可以返回一个以32位整数表示的标识符,它是由机器的IP经过移位后得到的。
long hostid = gethostid();
正因为这个hostid是由IP地址转换得来的,我们可以用它来快速获得当前机器的主IP:
如hostid为:AABBCCDD,则IP为 BB.AA.DD.CC,当然各个部分还得转换成二进制数。
- Get harddisk Product ID
这步的关键是ioctl的使用。首先,以只读的方式打开硬盘设备,给ioctl的第一个参数传递fd, 第二个参数传递HDIO_GET_IDENTITY,第三个地址是out类型参数,给它一个struct hd_driveid的结构体指针即可。
ioctl(fd, HDIO_GET_IDENTITY, &hid);
- Get MAC address
MAC地址的获取也是通过ioctl。
- Get CPU ID
这个就是汇编了。
见附件。