Je voudrais lire l'adresse MAC de ma cible. Donc, je suis en utilisant le code suivantC lecture de l'adresse MAC - comportement indéfini
TS32 get_mac_address(TU8 ** aps8Mac)
{
TS32 fd;
struct ifreq ifr;
CHAR *iface = "eth0";
TU8 *mac;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name , iface , IFNAMSIZ-1);
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);
mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
*aps8Mac = mac;
return 0;
}
int main(int argc, char **argv)
{
TU8 *s8Mac = NULL;
get_mac_address(&s8Mac);
fprintf(stdout, "MAC address : %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n" , s8Mac[0], s8Mac[1], s8Mac[2], s8Mac[3], s8Mac[4], s8Mac[5]);
fprintf(stdout, "MAC address : %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n" , s8Mac[0], s8Mac[1], s8Mac[2], s8Mac[3], s8Mac[4], s8Mac[5]);
return 0;
}
Une fois exécuté sur la cible que je reçois:
MAC address : 00:1A:02:5F:00:76
MAC address : FE:76:9C:8C:AB:7E
Pourquoi je ne lis pas
MAC address : 00:1A:02:5F:00:76
MAC address : 00:1A:02:5F:00:76
EDIT 1: get_mac_address modifié en ce qui concerne la conseils donnés comme réponse
TS32 get_mac_address(TU8 ** aps8Mac)
{
TS32 fd;
struct ifreq ifr;
CHAR *iface = "eth0";
TU8 *mac = malloc(sizeof(TU8) * 17);
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name , iface , IFNAMSIZ-1);
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);
mac = (TU8 *)ifr.ifr_hwaddr.sa_data;
*aps8Mac = mac;
return 0;
}
Où avez-vous alloué de l'espace pour contenir l'adresse MAC? –
@DavidSchwartz J'ai modifié le sujet afin d'inclure la fonction modifiée. Cependant, j'obtiens toujours le même comportement – ogs
Vous jetez la valeur que vous avez obtenue de 'malloc' et renvoyez toujours un pointeur vers un temporaire. 'mac = (TU8 *) ifr.ifr_hwaddr.sa_data; * aps8Mac = mac; 'est juste un moyen détourné de définir' * aps8Mac' égal à 'ifr.ifr_hwaddr.sa_data'. –