原:http://topic.csdn.net/t/20061229/13/5264223.html

看到经常有人问如何在linux中获取MAC地址,我干脆把代码贴出来,方法就是用ioctl(   SIOCGIFHWADDR   ); 


#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <net/if.h> 
#include <sys/ioctl.h> 
#include <sys/types.h> 
#include <sys/socket.h> 

int GetMac(   const   char   *ifname,   unsigned   char   *mac   ) 

int sock,   ret; 
struct ifreq ifr; 
sock   =   socket(   AF_INET,   SOCK_STREAM,   0   ); 
if   (   sock   <   0   )   { 
perror(   "socket "   ); 
return   -1; 

memset(   &ifr,   0,   sizeof(ifr)   ); 
strcpy(   ifr.ifr_name,   ifname   ); 
ret   =   ioctl(   sock,   SIOCGIFHWADDR,   &ifr,   sizeof(ifr)   ); 
if   (   ret   ==   0   )   { 
memcpy(   mac,   ifr.ifr_hwaddr.sa_data,   6   ); 
}   else   { 
perror(   "ioctl "   ); 

close(   sock   ); 
return   ret; 


int main(   int   argc,   char   **argv   ) 

int ret; 
char ifname[IFNAMSIZ]; 
unsigned   char mac[6]; 
if   (   argc   ==   1   )   { 
strcpy(   ifname,   "eth0 "   ); 
}   else   { 
strcpy(   ifname,   argv[1]   ); 


memset(   mac,   0,   sizeof(mac)   ); 
ret   =   GetMac(   ifname,   mac   ); 
if   (   ret   ==   0   )   { 
printf(   "%s   mac   address   is:   [%02X:%02X:%02X:%02X:%02X:%02X]\n ",   ifname,   mac[0],   mac[1],   mac[2],   mac[3],   mac[4],   mac[5]   ); 
}   else   { 
fprintf(   stderr,   "Can 't   get   %s 's   mac   address\n ",   ifname   ); 

return   0; 

 

还有这里 http://www.iteye.com/problems/60540

-------------------------------------------------------------

博主注:官方的文档可以看这里:http://linux.die.net/man/7/netdevice