QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1232|回复: 2

[b][求助] 关于C写的更改IP的程序问题?[/b]

[复制链接]
发表于 2005-4-12 14:31:49 | 显示全部楼层 |阅读模式
关于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的问题。

我想问一下,通过什么方法可以更改相关权限,也就是在一般用户下, 也可以实现在超级用户下所做的事情? 比如通过写一个什么样的函数等等。

其实,这个问题也是一个一般性问题:怎么在一般用户下做超级用户下才能做的事情?

请高人指点 ,先谢谢你。
发表于 2005-4-12 16:24:46 | 显示全部楼层
首先这个文件的所有者是root,然后在控制台下 chmod a+s 文件名。
回复

使用道具 举报

发表于 2005-4-13 13:53:45 | 显示全部楼层
用sudo吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 07:26 , Processed in 0.045535 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表