J'essaie d'obtenir l'adresse MAC d'une interface avec laquelle je veux travailler.socket cru: inapproprié ioctl
J'utiliser ce code pour le faire, mais je reçois toujours le message d'erreur « ioctl inappropriée pour le dispositif »
je l'ai déjà essayé d'utiliser une autre prise, à savoir AF_INET avec SOCK_DGRAM (si je besoin de la prise première pour utilisation ultérieure) sans aucune différence.
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if_ether.h>
#include <net/if.h>
int main()
{
char if_name[] = "eth0";
char mac[ETH_ALEN];
struct ifreq ifr;
int sock;
if(sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ARP)) < 0)
{
perror("SOCKET");
return 1;
}
// get mac address of our interface
memset(&ifr, 0, sizeof(struct ifreq));
memcpy(ifr.ifr_name, if_name, 4);
if(ioctl(sock, SIOCGIFHWADDR, &ifr) == -1)
{
perror("SIOCGIFHWADDR");
return 1;
}
memcpy(mac, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
printf("%x.%x.%x.%x.%x.%x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
Vous savez que vous copiez beaucoup plus que le nom de l'interface à 'ifr.ifr_name'? –
@JoachimPileborg Je suis maintenant, fixe, mais il n'a rien changé – Horstinator