红联Linux门户
Linux帮助

求助!Linux下C++程序如何修改系统IP?

发布时间:2014-11-19 19:00:55来源:红联作者:firespout
项目是用C++做的,需要修改系统IP,本以为这种很通用的功能已经有成熟的方法了,没想到被卡住了。

系统版本是 NeoKylin 3.2.2(Carambola)x86_64
内核版本是 Linux 2.6.32-220.2.1.2.ky3.2.x86_64

需求:
1、在我们的界面上列出系统中所有的网卡和网卡上已有的地址(IP和掩码);
2、用户在我们的界面上选一个网卡,添加一个新的地址,或者替换一个已有地址(程序需要删除已有的IP地址);
3、程序执行修改,修改立刻生效,系统重启后修改不能消失。

如果通过 shell 中 的 ifconfig、ip addr命令,或者系统API ioctl(),系统重启后修改就消失了。用户可能在我们的界面上反复的改来改去,所以也不想在系统启动时执行一堆的添加、删除IP命令。

现在我们的做法是通过C++代码修改 /etc/sysconfig/network-scripts/ifcfg-eth* 文件,但是也有问题:
1、有时ifcfg-eth* 文件不存在
系统图形界面的右下角提供一个网络连接的配置工具,可以编辑连接。在该工具的界面中去掉一个连接的“对所有用户可用”选项后,network-scripts 目录下就没有 ifcfg-eth* 文件了,满硬盘也没找到被藏到哪里去了。我就这样被坑了。。。
2、有时ifcfg-eth* 文件有多个
还是用上边的工具,对一个网卡可以添加多个连接,然后只启用一个连接。这样,一个网卡就有多个ifcfg-eth* 文件,还不知道当前使用的是哪个文件,这些文件中可能有相同的IP。又被坑了。。。
3、ifcfg-eth* 文件名多种多样
谁说文件名只有ifcfg-eth0、ifcfg-eth1?还对应第0块网卡,第1块网卡。。。
实际的文件名有:ifcfg-eth0、ifcfg-System_eth0、ifcfg-有线连接_1。这么丰富的文件名,要与eth0、eth1对应起来,又又被坑。。。

难道这个很通用的功能,就没有标准的实现方式吗?等待高手指教,谢谢!
文章评论

共有 0 条评论