Récupérer son adresse MAC en C
by
samuel
@ 15/12/2005
Récupérer son adresse MAC en C avec les IOCTLs.
Il peut sembler bien ardu de récupérer son adresse MAC en C, en effet la première solution qui se présente necessite de parser la sortie de ifconfig...
Heureusement, il existe un autre moyen, qui utilise les IOCTLs.
Voici le code d'une fonction qui réalisera ce travail pour vous :
#include <netinet/if_ether.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
char *get_mac_addr( char *eth )
{
struct ifreq ifr;
char *hwaddr;
char buf[8];
hwaddr = ( char * )malloc(sizeof(char)*18);
if( !hwaddr )
return(NULL);
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
if( skfd < 0 )
printf("Can't open socket\n");
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
return(NULL);
if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0)
return(NULL);
memcpy(buf,ifr.ifr_hwaddr.sa_data,8);
snprintf(hwaddr, 18, "%02X:%02X:%02X:%02X:%02X:%02X",
(buf[0] & 0377), (buf[1] & 0377), (buf[2] & 0377),
(buf[3] & 0377), (buf[4] & 0377), (buf[5] & 0377)
);
return(hwaddr);
}
Cette fonction, à qui vous passerez le nom de l'interface en paramètre("eth0","eth1",... ) vous renverra un pointeur sur caractères contenant son adresse, pointeur qu'il faudra bien entendu libèrer après utilisation.