精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>unix,linux,free bsd>>UNIX下怎样获取网卡的 MAC 地址 ?

主题:UNIX下怎样获取网卡的 MAC 地址 ?
发信人: kevintz()
整理人: kevintz(2000-10-25 16:13:48), 站内信件
【 在 tinyworm (小虫子) 的大作中提到: 】
                         UNIX下怎样获取网卡的MAC地址 

    这是我写的程序,在Linux下编译通过,大家拿去参考吧。另外也可以参考

R. Stevens 《Unix Networking Programming》volume 1.
    
/**************************************************************
   getha.c 
   kevintz 2000.9.6
 *************************************************************/
#include <net/if.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        struct ifreq ifr;
        int fd;
        char* pa;
        char* pa1;
        int c;
        int i;
        if( argc != 2 ) {
                fprintf(stderr, "usage:%s interfacename\n", argv[0]);

                exit(1);
        }
        bzero(&ifr, sizeof(ifr));
        strncpy(ifr.ifr_name, argv[1],16);
        fd=socket(PF_INET, SOCK_DGRAM,0 );
        if( fd < 0) {
perror("socket()");
exit(1);
}
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
perror("ioctl() get hardware address error:");
exit(1);
} else {
pa1=pa=(char*) &ifr.ifr_hwaddr.sa_data;
printf("Interface:%s Hardware Address:\n", ifr.ifr_nam
e);
for(i=0; i<5; i++) {
c=*pa;
c&=0x000000ff;
printf("%02x",c);
printf(":");
pa++;
}
c=*pa;
c&=0x000000ff;
printf("%02x",c);
printf("\n");

pa=pa1;
for(i=0; i<5; i++) {
c=*pa;
printf("%02x",c);
printf(":");
pa++;
}
c=*pa;
printf("%02x",c);
printf("\n");
}
exit(0);
}

例子:getha eth0
程序中第一种打印形式和ifconfig命令的一样,但原来的数据就不一样,不过我
认为
是printf和数据类型的差异。大家可以探讨一下这个奇怪问题。





--
If you understand unix, you understand the world.
If you understand NT, you JUST understand NT.

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.140.71.100]

[关闭][返回]