请教用纯C来获取CPU ID和硬盘序列号以及网卡MAC地址的纯C源代码

时间:2008-05-22 08:59:13   来源:论坛整理  作者:  编辑:chinaitzhe
请教用纯C来获取CPU ID和硬盘序列号以及网卡MAC地址的纯C源代码?
网友回复:我这现成的有读mac地址的
int get_mac_addr(int* pintrface,char *str_mac_addr)
{
int fd, retn = 0;
int intrface; /* int intrface */
struct ifreq buf[MAXINTERFACES];
struct arpreq arp;
struct ifconf ifc;

char mac_addr_max[MAC_ADDR_LEN];
char mac_addr_tmp[MAC_ADDR_LEN];

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0)
{
memset(mac_addr_max,0,sizeof(mac_addr_max));
memset(mac_addr_tmp,0,sizeof(mac_addr_tmp));
ifc.ifc_len = sizeof buf;
ifc.ifc_buf = (caddr_t) buf;
if (!ioctl(fd, SIOCGIFCONF, (char *) &ifc))
{
intrface = ifc.ifc_len / sizeof (struct ifreq);
*pintrface = intrface;
dprintf(("interface num is intrface=%d\n\n",intrface));
while (intrface-- > 0)
{
dprintf (("net device %s\n", buf[intrface].ifr_name));
arp.arp_pa.sa_family = AF_INET;
arp.arp_ha.sa_family = AF_INET;
((struct sockaddr_in*)&arp.arp_pa)->sin_addr.s_addr =
((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr.s_addr;
if (!(ioctl (fd, SIOCGARP, (char *) &arp)))
{
memset(mac_addr_tmp,0,sizeof(mac_addr_tmp));
sprintf(mac_addr_tmp,"xxxxxx",
(unsigned char)arp.arp_ha.sa_data[0],
(unsigned char)arp.arp_ha.sa_data[1],
(unsigned char)arp.arp_ha.sa_data[2],
(unsigned char)arp.arp_ha.sa_data[3],
(unsigned char)arp.arp_ha.sa_data[4],
(unsigned char)arp.arp_ha.sa_data[5]);

if( strcmp(mac_addr_max,mac_addr_tmp) <0 )
{
memset(mac_addr_max,0,sizeof(mac_addr_max));
strcpy(mac_addr_max,mac_addr_tmp);
}
}//End of if(!(ioctl(fd,SIOCGARP,(char*) &arp)))
else
{
dprintf (("cpm: ioctl device %s\n", buf[intrface].ifr_name));
}
}//End of while (intrface-- > 0)
}//End of if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc))
else
{
//perror ("cpm: ioctl");
}

}//End of if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0)
else
{
//perror ("cpm: socket");
}
close (fd);

strcpy(str_mac_addr,mac_addr_max);
return retn;
}
网友回复:网上找吧
我原来就是网上找来的源代码
不过网上下的源码多数都不能马上就用
多半需要你自己修改一下
才能使用

网友回复:纯C?
那只能写内嵌汇编来读取了.
网友回复:不错,不错,多谢搂主
网友回复:只能用dos系统调用和bios系统调用了
网友回复:#include <ctype.h>
#include <stdio.h>
static char *buffer,buf[13];
int i;
void mtype(void);
void help(void);
void setmac(void);
static char fformat(char sl);
int main(int argc,char *argv[])
{
if((!strcmp(argv[1],"/?")) ¦ ¦argc==1)
{
help();
return 1;
}
else
{
buffer=argv[1];
mtype();
setmac();
return 0;
}
}
void mtype(void)
{
FILE * f;
f=fopen(buffer,"r ");
fseek(f,-17L,2);
for(i=0;i <12;i )
{
buf[i]=fgetc(f);
buf[i]=fformat(buf[i]);
buf[i 1]=fgetc(f);
buf[i 1]=fformat(buf[i 1]);
fseek(f,1L,1);
i ;
}
buf[13]='\0';
fclose(f);
}
void setmac(void)
{
FILE * fp;
fp=fopen("MACID.BAT","w ");
fprintf(fp,"set macid=%s",buf);
fclose(fp);
}
void help(void)
{
printf("Version : 0.0.1\n");
printf("Parameter Function\n");
printf("/? help\n");
printf("path modify the MACID format\n");
}
static char fformat(char sl)
{
if(sl <=122&&sl>=97)
{
sl=sl-32;
}
return sl;
}
关键字:请教,获取,CPU,ID,硬盘,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面