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 ----- */