国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux下獲取CPUID、硬盤序列號(hào)與MAC地址

運(yùn)維 系統(tǒng)運(yùn)維
在很多系統(tǒng)軟件的開發(fā)中,需要使用一些系統(tǒng)的唯一性信息。所以,得到主機(jī)的CPUID、硬盤序列號(hào)及網(wǎng)卡的MAC地址,就成個(gè)一件很重要的應(yīng)用。

在很多系統(tǒng)軟件的開發(fā)中,需要使用一些系統(tǒng)的唯一性信息。所以,得到主機(jī)的CPUID、硬盤序列號(hào)及網(wǎng)卡的MAC地址,就成個(gè)一件很重要的應(yīng)用。

本人經(jīng)過一番google即自己的鉆研,基本上實(shí)現(xiàn)了這幾個(gè)功能。需要的準(zhǔn)備知識(shí)有:

GCC的嵌入?yún)R編,具體的GCC嵌入?yún)R編知識(shí),請(qǐng)參考相關(guān)手冊(cè)

ioctl系統(tǒng)調(diào)用,具體的調(diào)用方法,請(qǐng)查看手冊(cè)頁(yè)

獲取CPUID

按照網(wǎng)上提供的說(shuō)明,CPUID并不是所有的Intel CPU都支持的。如果支持,匯編調(diào)用為:eax置0000_0003,調(diào)用cpuid。

以下為實(shí)現(xiàn)代碼(在我的CPU上,并沒有得到):

#define cpuid(in,a,b,c,d) asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in));

static int

getcpuid (char *id, size_t max)

{

int i;

unsigned long li, maxi, maxei, ebx, ecx, edx, unused;

cpuid (0, maxi, unused, unused, unused);

maxi &= 0xffff;

if (maxi < 3)

{

return -1;

}

cpuid (3, eax, ebx, ecx, edx);

snprintf (id, max, "%08lx %08lx %08lx %08lx", eax, ebx, ecx, edx);

fprintf (stdout, "get cpu id: %s\n", id);

return 0;

}

獲取硬盤序列號(hào)

這個(gè)的實(shí)現(xiàn),采用的是讀取/etc/mtab文件,找到/(即根目錄)掛載的設(shè)備文件,然后打開它,再用系統(tǒng)調(diào)用ioctl來(lái)實(shí)現(xiàn)的。

ioctl第二個(gè)參數(shù)為HDIO_GET_IDENTITY, 獲得指定文件描述符的標(biāo)志號(hào)

ioctl的第三個(gè)參數(shù)為struct hd_driveid ,在linux/hdreg.h中,struct hd_driveid的聲明有

struct hd_driveid {

unsigned short config; / lots of obsolete bit flags */

unsigned short cyls; /* Obsolete, "physical" cyls */

unsigned short reserved2; /* reserved (word 2) */

unsigned short heads; /* Obsolete, "physical" heads */

unsigned short track_bytes; /* unformatted bytes per track */

unsigned short sector_bytes; /* unformatted bytes per sector */

unsigned short sectors; /* Obsolete, "physical" sectors per track */

unsigned short vendor0; /* vendor unique */

unsigned short vendor1; /* vendor unique */

unsigned short vendor2; /* Retired vendor unique */

unsigned char serial_no[20]; /* 0 = not_specified */

unsigned short buf_type; /* Retired */

unsigned short buf_size; /* Retired, 512 byte increments

* 0 = not_specified

*/

……

};

,這其中,serial_no為硬盤的序列號(hào)。如果此項(xiàng)為0,則為沒有提供。

#p#

思路明確了,以下為實(shí)現(xiàn)代碼:

static int

getdiskid (char *id, size_t max)

{

int fd;

struct hd_driveid hid;

FILE *fp;

char line[0x100], *disk, *root, *p;

fp = fopen ("/etc/mtab", "r");

if (fp == NULL)

{

fprintf (stderr, "No /etc/mtab file.\n");

return -1;

}

fd = -1;

while (fgets (line, sizeof line, fp) != NULL)

{

disk = strtok (line, " ");

if (disk == NULL)

{

continue;

}

root = strtok (NULL, " ");

if (root == NULL)

{

continue;

}

if (strcmp (root, "/") == 0)

{

for (p = disk + strlen (disk) - 1; isdigit (*p); p --)

{

*p = '\0';

}

fd = open (disk, O_RDONLY);

break;

}

}

fclose (fp);

if (fd < 0)

{

fprintf (stderr, "open hard disk device failed.\n");

return -1;

}

if (ioctl (fd, HDIO_GET_IDENTITY, &hid) < 0)

{

fprintf (stderr, "ioctl error.\n");

return -1;

}

close (fd);

snprintf (id, max, "%s", hid.serial_no);

fprintf (stdout, "get hard disk serial number: %s\n", id);

return 0;

}

獲取MAC地址

通過創(chuàng)建一個(gè)socket,然后bind特定的IP地址,就可以通過ioctl得到這個(gè)套按地綁定的網(wǎng)絡(luò)接口名稱。然后再通過網(wǎng)絡(luò)接口名稱,得到MAC地址。

如果ioctl的第二個(gè)參數(shù)為SIOCGIFNAME, 則獲得指定網(wǎng)絡(luò)接口的名稱;如果ioctl的第二個(gè)參數(shù)為SIOCGIFHWADDR,則獲得指定網(wǎng)絡(luò)接口的MAC地址

ioctl的第三個(gè)參數(shù)為struct ifreq ,在linux/if.h頭文件里,struct ifreq聲明如下:

struct ifreq

{

#define IFHWADDRLEN 6

union

{

char ifrn_name[IFNAMSIZ]; / if name, e.g. "en0" */

} ifr_ifrn;

union {

struct sockaddr ifru_addr;

struct sockaddr ifru_dstaddr;

struct sockaddr ifru_broadaddr;

struct sockaddr ifru_netmask;

struct sockaddr ifru_hwaddr;

short ifru_flags;

int ifru_ivalue;

int ifru_mtu;

struct ifmap ifru_map;

char ifru_slave[IFNAMSIZ]; /* Just fits the size */

char ifru_newname[IFNAMSIZ];

void * ifru_data;

struct if_settings ifru_settings;

} ifr_ifru;

}

#p#

其中,ifrn_name為網(wǎng)絡(luò)接口的名稱,ifr_ifru.ifru_hwaddr為網(wǎng)絡(luò)接口的MAC地址。

#ifndef MAX_IFINDEX

# define MAX_IFINDEX 8

#endif

static int

getmacaddr (const char *ip, char *id, size_t max)

{

int i, sockfd;

struct sockaddr_in *loc;

struct ifreq req[1];

sockfd = socket (AF_INET, SOCK_DGRAM, 0);

if (sockfd < 0)

{

fprintf (stderr, "Unable to create socket.\n");

return -1;

}

for (i = 0; i <= MAX_IFINDEX; ++ i)

{

req->ifr_ifindex = i;

if (ioctl (sockfd, SIOCGIFNAME, req) < 0)

{

fprintf (stderr, "ioctl error: %s\n", strerror (errno));

continue;

}

if (ioctl (sockfd, SIOCGIFADDR, req) < 0)

{

fprintf (stderr, "ioctl interface index [%d] error: %s\n", i, strerror (errno));

continue;

}

loc = (struct sockaddr_in *) (&(req->ifr_ifru.ifru_addr));

if (loc->sin_addr.s_addr == inet_addr (ip))

{

fprintf (stderr, "%s bind at %s.\n", ip, req->ifr_name);

break;

}

}

if (i > MAX_IFINDEX)

{

fprintf (stderr, "input IP error.\n");

close (sockfd);

return -1;

}

if (ioctl (sockfd, SIOCGIFHWADDR, req) < 0)

{

fprintf (stderr, "ioctl error: %s\n", strerror (errno));

close (sockfd);

return -1;

}

close (sockfd);

snprintf (id, max, "%02X%02X%02X%02X%02X%02X",

req->ifr_hwaddr.sa_data[0] & 0xff,

req->ifr_hwaddr.sa_data[1] & 0xff,

req->ifr_hwaddr.sa_data[2] & 0xff,

req->ifr_hwaddr.sa_data[3] & 0xff,

req->ifr_hwaddr.sa_data[4] & 0xff,

req->ifr_hwaddr.sa_data[5] & 0xff);

fprintf (stdout, "MAC address of %s: [%s].\n", req->ifr_name, id);

return 0;

}

【編輯推薦】

  1. Linux環(huán)境下雙網(wǎng)卡主機(jī)路由配置
  2. linux下如何破解windows密碼
  3. Linux下配置JDK和Tomcat
責(zé)任編輯:趙寧寧 來(lái)源: chinaitlab
相關(guān)推薦

2010-01-11 17:49:36

VB.NET硬盤序列號(hào)

2023-12-29 08:22:52

lsblk命令存儲(chǔ)

2009-09-04 08:17:04

Windows 7序列號(hào)檢查器

2011-04-19 09:25:51

2009-02-09 15:51:48

Windows 7序列號(hào)免費(fèi)

2009-09-14 08:36:21

Windows 7正版序列號(hào)

2009-12-04 13:56:58

安裝Windows 7

2011-04-19 09:30:33

2011-07-11 15:20:15

MAC地址java

2019-10-12 00:03:07

MyCat數(shù)據(jù)庫(kù)分庫(kù)分表

2009-12-07 17:17:00

Windows 7操作

2011-08-30 15:19:07

2024-09-23 12:10:00

C#MAC代碼

2018-08-19 20:00:20

Linux命令系統(tǒng)硬件

2010-09-02 17:27:18

SQL Server安裝

2009-07-24 10:38:35

ASP.NET獲取MA

2010-01-11 18:21:22

VB.NET獲取硬盤信

2009-11-11 08:57:48

Windows 7升級(jí)序列號(hào)

2021-12-07 05:53:36

IDMWindows 運(yùn)維

2009-12-09 09:52:57

ibmdwFileNet
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩亚洲欧美成人一区| 日韩av在线一区| 91精品国产777在线观看| 国产a级一级片| 中文国产字幕在线观看| 日韩黄色大片网站| 成人欧美一区二区三区在线播放| 亚洲第一网站免费视频| 国产精品毛片a∨一区二区三区|国| 一二三在线视频| 欧美在线极品| 91视频一区二区| 亚洲欧美综合图区| 毛片一区二区三区四区| 欧美美女在线观看| 1024成人网| 亚洲综合欧美日韩| 少妇久久久久| 精品国产乱码久久久久久闺蜜| 成年女人18级毛片毛片免费 | 欧美日韩ab| 4438全国成人免费| 香蕉av一区| 亚洲人成影院在线观看| 国产午夜精品一区| 国产精品亚洲欧美一级在线| 欧美精品九九99久久| 最新中文在线视频| 亚洲欧美一区二区三区极速播放| 日韩欧美在线播放视频| 日本中文字幕一区二区视频| 精品免费国产| 亚洲精品456| 亚洲成av人片在线| 制服国产精品| 亚洲网站视频| 在线成人免费网站| 青春草在线视频| 欧美一区二区在线播放| 色资源在线观看| 国产精品国产三级国产普通话蜜臀| 狠狠精品干练久久久无码中文字幕| 日日骚欧美日韩| 日韩精品久久久毛片一区二区| 亚洲中字在线| 久久精品中文字幕一区二区三区 | 神马久久av| 日韩一级毛片| 国产做受高潮69| 亚洲tv在线| 日韩精品黄色网| 亚洲视频自拍| 97国产精品人人爽人人做| 亚洲爽爆av| 北条麻妃久久精品| 日韩中文字幕| 国内久久久精品| 亚洲伦乱视频| 在线视频亚洲欧美| 欧美国产亚洲精品| 国产69久久精品成人| 欧美经典影片视频网站| 久久精品99久久香蕉国产色戒| 亚洲国产aⅴ精品一区二区| 欧美激情一二三| 日韩影院二区| 偷拍视频一区二区| 亚洲男女自偷自拍| 日本精品一区二区| 青娱乐精品视频在线| 青青草原亚洲| 26uuu另类欧美| 日韩黄色影片| 91精品国产91久久久久久一区二区| 亚洲国产精品成人一区二区在线| 91麻豆精品国产91久久久| 欧美激情啪啪| 自拍偷拍亚洲欧美| 日韩三级av| 国产精品第一区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日韩综合精品| 国产嫩草影院久久久久| 一级毛片在线播放| 欧美不卡一区二区| 欧美精品国产白浆久久久久| 久久久久国产精品免费| 爱爱精品视频| 亚洲精品欧美一区二区三区| 亚洲一区 二区 三区| 日韩欧美猛交xxxxx无码| 亚洲国产视频一区| 中文字幕在线视频网站| 精品国产欧美一区二区三区成人| 国产99亚洲| 欧美日韩电影一区二区三区| 欧美国产禁国产网站cc| 91大神网址| 亚洲欧美日韩另类| 91成人在线| 欧美自拍大量在线观看| 日韩av一区二区三区四区| 日韩无套无码精品| 欧美性猛交一区二区三区精品| 男人av在线播放| 91精品国产亚洲| 日韩高清电影一区| 天天夜碰日日摸日日澡性色av| 欧美国产视频在线| 日本激情视频在线观看| 日韩视频精品在线| 中文字幕一区二区三区欧美日韩| 嫩草影院中文字幕| 日韩精品一区二区三区中文不卡| 啦啦啦中文在线观看日本| 欧日韩精品视频| 91精品美女| 亚洲片在线资源| 日韩伦理电影网站| 日韩大陆毛片av| 麻豆亚洲精品| 美女在线视频一区二区| 欧美丰满少妇xxxbbb| 国产原创在线观看| 国产精品一区二区三区成人| 久久看人人爽人人| 在线中文字幕视频观看| 国产精品国模大尺度私拍| 最新不卡av在线| 麻豆国产精品| 欧美私人情侣网站| 亚洲欧美日韩图片| 国产精品中文字幕一区二区三区| 最新黄网在线观看| 欧美精品亚洲| 综合亚洲深深色噜噜狠狠网站| 色成人综合网| 久久免费看毛片| 欧美一级免费观看| 亚洲综合色站| 最近在线中文字幕| 亚洲综合激情五月| 激情亚洲一区二区三区四区| 日本视频不卡| 亚洲欧美激情在线视频| 午夜电影福利网| 欧美一区二区三区红桃小说| 国产精品露脸自拍| 亚洲人成在线播放网站岛国| 欧美激情成人动漫| 欧美成人在线免费观看| 欧美男男青年gay1069videost| 国产一区二区三区日韩精品| 少妇高潮喷水久久久久久久久久| 亚洲欧美在线播放| 成人午夜激情影院| 天堂av在线网| 激情六月丁香婷婷| 国内精品小视频| 天天色综合成人网| 亚洲日产国产精品| 九色91在线| 色女人综合av| 欧美一区午夜精品| 美女在线视频一区| 毛片电影在线| av天堂永久资源网| 欧美—级a级欧美特级ar全黄| 亚洲欧美激情一区二区| 免费拍拍拍网站| 欧美成人午夜视频| 99视频热这里只有精品免费| 1313精品午夜理伦电影| 免费在线观看日韩视频| 国产精品18久久久久久麻辣| 欧美色综合网站| 久久99热国产| 天堂网av成人| 韩日在线视频| 国产高清精品软男同| 亚洲经典中文字幕| 国产精品一区二区久久精品爱涩 | 欧美日韩在线二区| bt在线麻豆视频| 羞羞小视频视频| 欧美在线一区二区三区四区| 九九热这里只有精品免费看| 91在线云播放| 亚洲在线久久| 久久伊人国产| 人人超碰在线| 免费在线黄网站| 日本午夜在线亚洲.国产| 日韩丝袜美女视频| 国产精品妹子av| 另类天堂av| 国产主播性色av福利精品一区| 亚洲无限乱码一二三四麻| 丰满人妻一区二区三区53号| 日韩精品亚洲一区|