/* 参考 R.Stevens 《Unix Networking Programming》volume 1. */
#include <net/if.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
/* return 8 bytes value 6+2 */
int get_mac_addr(char *devname,char *mac)
{
struct ifreq ifr;
int fd;
char *pa;
unsigned int c;
int i;
bzero(&ifr,sizeof(ifr));
strncpy(ifr.ifr_name,devname,16);
fd=socket(PF_INET,SOCK_DGRAM,0);
if(fd<0){
return -1;
}
if(ioctl(fd,SIOCGIFHWADDR,&ifr)<0){
return -1;
} else {
pa=(char*)&ifr.ifr_hwaddr.sa_data;
for(i=0;i<8;i++) {
c=*pa;
c&=0x000000ff;
mac[i] = c;
pa ++;
}
}
return 0;
}
/* 可用测试get_mac_addr("eth0",out); */