- 论坛徽章:
- 0
|
自己写的通过ioctl()来修改IP地址的程序,结果在运行(root)的时候报错, 不知道是memcpy(&ifr->ifr_addr,(struct sockaddr *)&addr, sizeof(addr));的问题,还是ioctl()调用的时候需要额外的参数,
- int set_ipaddr(int sockfd, struct ifreq *ifr, char *ifname, char *ip)
- {
- struct sockaddr_in addr;
- bzero(&addr, sizeof(addr));
- addr.sin_family = PF_INET;
- addr.sin_addr.s_addr = inet_addr(ip);
- printf("Interface:%s\n",ifname);
- strncpy(ifr->ifr_name, ifname, IFNAMSIZ);
- memcpy(&ifr->ifr_addr,(struct sockaddr *)&addr, sizeof(addr)); //运行到此报段错误
- printf("IP:%s\n",ifr->ifr_ifru.ifru_addr);
- if(ioctl(sockfd, SIOCSIFADDR, &ifr) < 0)
- perror("Ioctl Error"), exit(1);
- return 0;
- }
复制代码 |
|