如何用C获得MAC Address?

软件和网站开发以及相关技术探讨
回复
头像
gootoo
帖子: 51
注册时间: 2006-07-30 15:31

如何用C获得MAC Address?

#1

帖子 gootoo » 2007-03-11 1:03

如题
谢谢!
Sliphades
帖子: 18
注册时间: 2007-02-03 6:25

#2

帖子 Sliphades » 2007-03-12 4:44

其实可以C和shell 练习起来就好整了!
我自己写了一个,在Kubuntu 上实验成功~
希望能给您帮助。
我想如果是,仅是让他输出显示出来本机MAC地址么
就用这个system()这个库函数然后挂接上shell那些命令就行~
1.直接输出法
直接在你的main函数里面

代码: 全选

 
system("ifconfig eth0 | grep ""硬件地址"" |awk '{print $4 }'");
2.重定向法

代码: 全选

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的~没实验过~
头像
gootoo
帖子: 51
注册时间: 2006-07-30 15:31

#3

帖子 gootoo » 2007-03-13 19:41

windows下如何?
谢谢
Sliphades
帖子: 18
注册时间: 2007-02-03 6:25

#4

帖子 Sliphades » 2007-03-13 20:40

代码: 全选


#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);
}

回复