用ioctl控制,通过SIOCGIFHWADDR获取MAC地址,SIOCSIFHWADDR设置MAC地址,不过在设 置MAC地址之前,要先把网卡down掉,设置好了以后,再UP起来。
#include /* for socket(2) and related bits and pieces */#include /* for socket(2) */#include /* for struct ifreq */#include /* for ARPHRD_ETHER */#include /* for IOCTL's */#include /* for fprintf etc */#include /* for close */
int main(int argc,char **argv){ struct ifreq ifr; int skfd; if (argc<3) { fprintf(stderr,"usage:/n%s interface hwaddr/n",argv[1]); return 1; } /* Fill in the structure */ snprintf(ifr.ifr_name, IFNAMSIZ, "%s", argv[1]); ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER; /* TODO: write some code to parse argv[2] into ifr.ifr_hwaddr.sa_data */ /* memcpy(&ifr.ifr_hwaddr.sa_data, argv[2], sizeof(ether.address)); */ /* Create a socket fd */ skfd = socket(PF_INET,SOCK_STREAM,0); /* call the IOCTL */ if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) { perror("ioctl(SIOCSIFHWADDR)"); return 1; }