获取mac地址

 1 #include    <errno.h>
 2 #include    <math.h>  
 3 #include    <stdio.h> 
 4 #include    <stdlib.h>
 5 #include    <string.h>
 6 #include    <net/if.h>
 7 #include    <sys/ioctl.h>
 8 
 9 
10 /* 
11  * ===  FUNCTION  ======================================================================
12  *         Name:  get_mac_addr
13  *  Description:  
14  * =====================================================================================
15  */
16 int get_mac_addr( char *mac_addr )
17 {
18     int sockfd;
19     struct ifreq ifr;
20     
21     sockfd = socket( AF_INET, SOCK_STREAM, 0);
22     if ( sockfd < 0 ) {
23         printf ( "errno%d: %s\n", errno, strerror( errno ) );
24         return -1;
25     }
26 
27     memset( &ifr, 0, sizeof(ifr) );
28     strncpy( ifr.ifr_name, "eth0", sizeof(ifr.ifr_name)-1 );
29     if ( ( ioctl( sockfd, SIOCGIFHWADDR, &ifr) ) < 0 ) {
30         printf ( "errno%d: %s\n", errno, strerror( errno ) );
31         return -1;
32     }
33 
34     if ( !mac_addr ) {
35         printf ( " mac_addr error \n" );
36         return -1;
37     } else {
38         sprintf( mac_addr, "%02X:%02X:%02X:%02X:%02X:%02X",
39                 (unsigned char)ifr.ifr_hwaddr.sa_data[0],
40                 (unsigned char)ifr.ifr_hwaddr.sa_data[1],
41                 (unsigned char)ifr.ifr_hwaddr.sa_data[2],
42                 (unsigned char)ifr.ifr_hwaddr.sa_data[3],
43                 (unsigned char)ifr.ifr_hwaddr.sa_data[4],
44                 (unsigned char)ifr.ifr_hwaddr.sa_data[5]
45                 );
46     }
47 
48     return 0;
49 }       /* -----  end of function get_mac_addr  ----- */
posted @ 2012-07-08 10:20  kimiz  阅读(275)  评论(0)    收藏  举报