发信人: 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]
  | 
 
 
 |