[C] Problema con ioctl para cambiar mac

Iniciado por C_1^N, 26 Noviembre 2012, 01:10 AM

0 Miembros y 1 Visitante están viendo este tema.

C_1^N

Hola gente! Quiero cambiar la mac pero me da error Invalid Argument y no puedo saber por que..



int main(void)
{
struct ifreq net_dev;
int sockd;

if ((sockd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
perror("Socket");
exit(EXIT_FAILURE);
}

memset(&net_dev, 0, sizeof(net_dev));
memcpy(net_dev.ifr_name, "eth0", 4);

net_dev.ifr_hwaddr.sa_data[0] = (unsigned char) 0x00;
net_dev.ifr_hwaddr.sa_data[1] = (unsigned char) 0x11;
net_dev.ifr_hwaddr.sa_data[2] = (unsigned char) 0x22;
net_dev.ifr_hwaddr.sa_data[3] = (unsigned char) 0x33;
net_dev.ifr_hwaddr.sa_data[4] = (unsigned char) 0x44;
net_dev.ifr_hwaddr.sa_data[5] = (unsigned char) 0x55;

if (ioctl(sockd, SIOCSIFHWADDR, &net_dev) < 0){
perror("Ioctl");
close(sockd);
exit(EXIT_FAILURE);
}

printf("%s\n", net_dev.ifr_name);

        int i;

for (i = 0; i < 6; ++i)
printf("%02d:", (unsigned char) net_dev.ifr_hwaddr.sa_data[i]);
printf("\b \n");

close(sockd);

return 0;
}



Probe de bajar la interface pero siempre obtengo el mismo error..

Gracias de antemano!  :D
La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo