免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3377 | 回复: 15
打印 上一主题 下一主题

[C] 用C语言 实现 修改 LINUX网络参数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-26 14:10 |只看该作者 |倒序浏览
我想问一下 ,如果 用C语言 实现 修改 LINUX网络参数。
   比如修改  系统的  IP。NETMASK。DNS。网关 等等信息。
   用C编程实现,怎么实现。。

  我说下,我的思理
     1. 找LINUX源码中的ifconfig。然后挖出来。。
     2. 第二,打开/etc/sysconfig//networkk-scripts/ifcfg-eth0。按照要求 更改。,然后system("service network start")  /我的问题是。我不知道怎么去按照 要求 对文件进行 个更改
  
   知道的朋友 能不能指点下。。如果可以,给个 演示的 代码。感激不尽亚
     
还有。想搞的东西是 用C写CGI。完成一个B/S模式的 网络 管理的东西。。

thank you

[ 本帖最后由 寂寞游侠 于 2006-9-26 14:13 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-26 14:44 |只看该作者
演示代码?
你是不是没有ifconfig.c和routeadd.c的源代码?

直接打包FreeBSD6.1下的 /src/sbin/ifconfig目录,连makefile都有

ifconfig.rar

65.63 KB, 下载次数: 107

ifconfig

论坛徽章:
0
3 [报告]
发表于 2006-09-26 14:45 |只看该作者
route的源代码
就是route add啊,route delete之类的
分析完毕给俺写个学习报告吧

route.rar

16.74 KB, 下载次数: 74

route

论坛徽章:
0
4 [报告]
发表于 2006-09-26 14:51 |只看该作者
easy得很

  1. BOOL SetIP(const char *pcInterface, unsigned long ulIP, unsigned long ulNetmask)
  2. {
  3.         struct ifreq ifr;
  4.         int fd;
  5.         struct sockaddr_in *pAddr;

  6.         if (pcInterface == NULL)
  7.         {
  8.                 fprintf(stderr, "illegal call function SetGeneralIP!\n");
  9.                 return FALSE;
  10.         }

  11.         if ((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0) return FALSE;
  12.         strcpy(ifr.ifr_name, pcInterface);

  13.         pAddr = (struct sockaddr_in *)&(ifr.ifr_addr);
  14.         bzero(pAddr, sizeof(struct sockaddr_in));
  15.         pAddr->sin_addr.s_addr = ulIP;
  16.         pAddr->sin_family = AF_INET;
  17.         if (ioctl(fd, SIOCSIFADDR, &ifr) < 0)
  18.         {
  19.                 close(fd);
  20.                 return FALSE;
  21.         }

  22.         pAddr = (struct sockaddr_in *)&(ifr.ifr_addr);
  23.         bzero(pAddr, sizeof(struct sockaddr_in));
  24.         pAddr->sin_addr.s_addr = ulNetmask;
  25.         pAddr->sin_family = AF_INET;
  26.         if (ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
  27.         {
  28.                 close(fd);
  29.                 return FALSE;
  30.         }

  31.         close(fd);
  32.         return TRUE;
  33. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-09-26 16:00 |只看该作者
to  wuqing   看完后,肯定 发个 报告上来。

TO  飞灰橙   ,老大的 代码 信手沾来,艾。不知道我什么时间 水平能达到这一步阿。。

   老大的代码里面我有 几个地方不是很明白。
  const char *pcInterface  接口名称的参数。具体是指什么呢?艾 实在太菜

  
pAddr = (struct sockaddr_in *)&(ifr.ifr_addr);
        bzero(pAddr, sizeof(struct sockaddr_in));
        pAddr->sin_addr.s_addr = ulIP;
        pAddr->sin_family = AF_INET;
        if (ioctl(fd, SIOCSIFADDR, &ifr) < 0)
        {
                close(fd);
                return FALSE;
        }
这段代码。进行了IP和NETMASK 的赋值后。已经操作 系统的吗?对进行  配置了吗?

  估计大家都在 鄙视我,没办法。真的不会

论坛徽章:
0
6 [报告]
发表于 2006-09-26 16:12 |只看该作者
const char *pcInterface  接口名称的参数 是 指eth0  吧?

论坛徽章:
0
7 [报告]
发表于 2006-09-26 16:21 |只看该作者
是否Linux传入eth0,solaris下传入hme0, bge0,HP下传入lan0, lan1等等就可以奏效还有待测试

谁测试测试?

论坛徽章:
0
8 [报告]
发表于 2006-09-26 16:33 |只看该作者
上面的 代码。。 (ioctl(fd, SIOCSIFADDR, &ifr) < 0)  对 对系统进行设置吗?

论坛徽章:
0
9 [报告]
发表于 2006-09-26 16:36 |只看该作者
原帖由 寂寞游侠 于 2006-9-26 16:33 发表
上面的 代码。。 (ioctl(fd, SIOCSIFADDR, &ifr) < 0)  对 对系统进行设置吗?


对系统进行设置,是指下次开机就变成这个IP了吗?
这个代码恐怕办不到。。

论坛徽章:
0
10 [报告]
发表于 2006-09-26 16:44 |只看该作者
不是的。不用重启。。直接 该IP。系统的IP就变了阿。

当然了。如果。退一步。重启 后。系统IP变了。那也可以的阿。

    老大的。这段代码实现了 什么功能呢?  我看的不太懂亚
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP