Adresse MAC de l’interface sous OS X (C)

C’est peut-être une question stupide et je m’excuse si cela a déjà été abordé ici, mais j’ai cherché un peu sans trop de chance. J’essaie d’obtenir l’adresse matérielle de mon interface en C et j’utilise OS X (x86-64). Je sais comment l’obtenir avec ifconfig , mais je veux que mon programme l’obtienne automatiquement pour tous les ordinateurs, du moins les ordinateurs OS X. J’ai trouvé un autre fil qui a posté ce lien qui fait à peu près ce que je veux (avec quelques modifications), mais je ne peux pas faire le lien des fonctions iokit dans ld (mon compilateur est gcc ). J’ai essayé d’append les drapeaux -lIOKit et -framework IOKit à la ligne de commande gcc , mais les erreurs de lien sont toujours les mêmes. Voici un lien vers mon code: en- tête et source .

Ce petit programme fonctionnera sans changement sur OSX.

Code: (crédits à Alecs King de la liste freebsd)

 #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  int main(int argc, char *argv[]) { int mib[6], len; char *buf; unsigned char *ptr; struct if_msghdr *ifm; struct sockaddr_dl *sdl; if (argc != 2) { fprintf(stderr, "Usage: getmac \n"); return 1; } mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; if ((mib[5] = if_nametoindex(argv[1])) == 0) { perror("if_nametoindex error"); exit(2); } if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { perror("sysctl 1 error"); exit(3); } if ((buf = malloc(len)) == NULL) { perror("malloc error"); exit(4); } if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { perror("sysctl 2 error"); exit(5); } ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl); printf("%02x:%02x:%02x:%02x:%02x:%02x\n", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)); return 0; } 

Vous devriez cependant changer d' int len; to size_t len;