Friday, May 19, 2006

Check ur Linux MAC address

On Linux, you can use the ioctl SIOCGIFHWADDR, an open socket and an ifreq structure to retrieve information on any network interface. The MAC address is stored on the ifr_hwaddr member of the ifreq structure:


#include
#include
#include
#include
#include
#include

int main(int argc,char** argv)
{
int fd;
struct ifreq ifbuf;
struct sockaddr_in sa;
unsigned char* hwaddr;

fd = socket(AF_INET, SOCK_DGRAM, 0);

strcpy(ifbuf.ifr_name,argv[1]?argv[1]:"eth0");
ioctl(fd,SIOCGIFHWADDR,&ifbuf);

hwaddr = (unsigned char*) ifbuf.ifr_hwaddr.sa_data;

printf("%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",hwaddr[0],hwaddr[1],hwaddr[2],hwaddr[3],hwaddr[4],hwaddr[5]);

return 0;
}

soumya@abracadabra:~/codes/cpp$ gcc -o sucket_out sucket.c
soumya@abracadabra:~/codes/cpp$ ./sucket_out
00:0E:A6:64:2D:39