如题
谢谢!
如何用C获得MAC Address?
- gootoo
- 帖子: 51
- 注册时间: 2006-07-30 15:31
-
- 帖子: 18
- 注册时间: 2007-02-03 6:25
其实可以C和shell 练习起来就好整了!
我自己写了一个,在Kubuntu 上实验成功~
希望能给您帮助。
我想如果是,仅是让他输出显示出来本机MAC地址么
就用这个system()这个库函数然后挂接上shell那些命令就行~
1.直接输出法
直接在你的main函数里面
2.重定向法
这种么可以对得出的结果再作处理。
如果您有什么好方法~记得发给我一份~呵呵~
哦~对了!忘了说~要先在你想运功程序的系统上运行shell 命令看看!
如果脸shell 命令都不行~就要改了~ 反正哪个命令能只显示出来Mac add就用哪个~
而且还要看 grep 后面的关键字~英文版的也要改为对应的 E文~
如果找不到命令还可以找网络配置的文档直接获取!
kUbuntu 的配置文件我没找~Suse 的网卡配置文件 在/etc/sysconfig/network/if*** (记不得了~)
而且system();sprintf();tmpnam();unlink();可以在windows下使用的~ Windows 下我不用C的~没实验过~
我自己写了一个,在Kubuntu 上实验成功~
希望能给您帮助。
我想如果是,仅是让他输出显示出来本机MAC地址么
就用这个system()这个库函数然后挂接上shell那些命令就行~
1.直接输出法
直接在你的main函数里面
代码: 全选
system("ifconfig eth0 | grep ""硬件地址"" |awk '{print $4 }'");
代码: 全选
main()
{
char fname[256],cmd[256],buf[256];
FILE *f;
tmpnam(fname);
sprintf(cmd,"ifconfig eth0 | grep ""硬件地址"" |awk '{print $4 }'>%s",fname);
printf("正在获取MAC地址...\n");
system(cmd);
system("ifconfig eth0 | grep ""硬件地址"" |awk '{print $4 }'");
f =fopen(fname,"r");
while(fgets(buf,sizeof buf,f))
printf("%s",buf);
fclose(f);
unlink(fname);
}
如果您有什么好方法~记得发给我一份~呵呵~
哦~对了!忘了说~要先在你想运功程序的系统上运行shell 命令看看!
如果脸shell 命令都不行~就要改了~ 反正哪个命令能只显示出来Mac add就用哪个~
而且还要看 grep 后面的关键字~英文版的也要改为对应的 E文~
如果找不到命令还可以找网络配置的文档直接获取!
kUbuntu 的配置文件我没找~Suse 的网卡配置文件 在/etc/sysconfig/network/if*** (记不得了~)
而且system();sprintf();tmpnam();unlink();可以在windows下使用的~ Windows 下我不用C的~没实验过~
-
- 帖子: 18
- 注册时间: 2007-02-03 6:25
代码: 全选
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/if_ether.h>
int main(int argc, char **argv)
{
int nSocket;
struct ifreq struReq;
nSocket = socket(PF_INET,SOCK_STREAM,0);
memset(&struReq,0,sizeof(struReq));
if(argc < 2)
strncpy(struReq.ifr_name, "eth0", sizeof(struReq.ifr_name));
else
strncpy(struReq.ifr_name, argv[1], sizeof(struReq.ifr_name));
ioctl(nSocket,SIOCGIFHWADDR,&struReq);
fprintf(stderr, "%d-%s\n", __LINE__, strerror(errno));
printf("%s\n", ether_ntoa(struReq.ifr_hwaddr.sa_data));
close(nSocket);
}