|
关于linux下使用C写的修改IP的问题?
现在,我想动态实现ATMEL9200上跑的linux的IP, 前两天在网上看到一段关于通过c程序修改ip的代码,如下:
int main(int argc, char *argv[])
{
int sockfd;
struct ifreq ifr;
struct sockaddr_in *sin;
if (argc != 3) {
fprintf(stderr, "Usage: chip <interface> <IP>\n");
return 1;
}
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket error");
exit(2);
}
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name)-1);
sin = (struct sockaddr_in *)&ifr.ifr_addr;
sin->sin_family = AF_INET;
if (inet_pton(AF_INET, argv[2], &sin->sin_addr) < 0) {
perror("inet_pton error");
exit(3);
}
if (ioctl(sockfd, SIOCSIFADDR, &ifr) < 0) {
perror("ioctl SIOCSIFADDR error");
exit(4);
}
return 0;
}
上面这段程序以Root身份确实可以更改IP,但是以other身份就不行了,不能正确执行。
我查了一下,发现是(ioctl(sockfd, SIOCSIFADDR, &ifr) < 0) 的问题,就是ioctl的问题。
我想问一下,通过什么方法可以更改相关权限,也就是在一般用户下, 也可以实现在超级用户下所做的事情? 比如通过写一个什么样的函数等等。
其实,这个问题也是一个一般性问题:怎么在一般用户下做超级用户下才能做的事情?
请高人指点 ,先谢谢你。 |
|