免费注册 查看新帖 |

Chinaunix

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

[C] [已解决]如何用c编程获取linux系统的网卡网络配置是dhcp获得的还是静态设置的呢? [复制链接]

论坛徽章:
2
辰龙
日期:2014-04-06 20:46:07巨蟹座
日期:2014-11-15 23:08:51
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-18 21:40 |只看该作者 |倒序浏览
本帖最后由 see_3000 于 2013-04-20 10:34 编辑

linux  下,通过c编程如何获取网卡的ip是静态设置的还是动态dhcp获取的呢?

这个我自己已经实现了,代码如下,  很遗憾用的还是命令:

1. linux 版本:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. FILE *fp;
  5. char buffer[80];
  6. fp=popen("cat /etc/network/interfaces |grep ^iface\\ br-lan | awk -F ' ' '{print $4}'","r");
  7. fgets(buffer, sizeof(buffer), fp);
  8. printf("%s", buffer);
  9. pclose(fp);
  10. }
复制代码
2. openwrt版本:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     FILE *fp;
  5.     char buffer[80];
  6.     fp=popen("uci get network.lan.proto","r");
  7.     fgets(buffer, sizeof(buffer), fp);
  8.     printf("%s", buffer);
  9.     pclose(fp);
  10. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-04-18 22:37 |只看该作者
本帖最后由 txgc_wm 于 2013-04-18 22:57 编辑

Ubuntu系统下的配置情况供参考,可以读取配置文件中的相关参数。

(1)修改网络配置文件
网络配置信息存储在/etc/network/interfaces 文件中,打开的文件显示如下内容:
  1. # This file describes the network interfaces available on your system
  2. # and how to activate them. For more information, see interfaces(5).
  3. # The loopback network interface
  4. auto lo
  5. iface lo inet loopback
复制代码
网络配置文件中只有一个回环地址,即127.0.0.1。在下面添加:
  1. auto eth0                            #指明网卡eth0在系统启动时自动加载
  2. iface eth0 inet static             #指明eth0采用ipv4地址,inet表示ipv4地址,inet6表示ipv6地址; static表示静态,dhcp表示动态
  3. address 172.22.112.13        #静态ip
  4. netmask 255.255.255.128   #子网掩码
  5. gateway 172.22.112.1         #网关地址
复制代码
(2)设置DNS服务器
在静态ip下还要配置DNS服务器,DNS信息存储在/etc/resolv.conf 中,如果没有此文件则直接新建。打开文件,然后依次输入下面内容:
  1. nameserver 202.202.32.33 #首选DNS服务器
  2. nameserver 61.128.128.68 #备用DNS服务器
复制代码
(3)全部修改后,需要将网卡重启,让修改生效,输入以下命令:
  1. sudo ifdown eth0
  2. sudo ifup eth0     
  3. sudo /etc/init.d/networking restart
复制代码

论坛徽章:
2
辰龙
日期:2014-04-06 20:46:07巨蟹座
日期:2014-11-15 23:08:51
3 [报告]
发表于 2013-04-18 23:00 |只看该作者
回复 2# txgc_wm


    我知道如何修改配置, 我现在需要的是要使用linux c 系统编程方法获取这个网口是dhcp还是static, 要把这些信息呈现在web上的。

论坛徽章:
0
4 [报告]
发表于 2013-04-18 23:27 |只看该作者
回复 3# see_3000

根据/etc/network/interfaces的信息去判断嘛,或者可以找找是否有右上角“Edit Connection”配置的源码。
   

论坛徽章:
2
辰龙
日期:2014-04-06 20:46:07巨蟹座
日期:2014-11-15 23:08:51
5 [报告]
发表于 2013-04-19 09:09 |只看该作者
采用脚本的我已经实现了,不过我要在别的系统上运行,openwrt上, 不是通过linux系统api调用的话,不管用

论坛徽章:
0
6 [报告]
发表于 2013-04-19 09:34 |只看该作者
OpenWRT一般不都是有GUI界面来设置静态或者动态的么?你的需求感觉很奇怪。。。

一个思路是 ps一下,看DHCP client 进程是否存在,
       1.如果存在,则是动态IP
       2.如果不存在,则应该是静态。


回复 5# see_3000


   

论坛徽章:
0
7 [报告]
发表于 2013-04-19 09:55 |只看该作者
基于openwrt的路由开发?如果是的话,一般都是将ip分配的模式保存在flash中。

你所指的api还真没见过。

论坛徽章:
2
辰龙
日期:2014-04-06 20:46:07巨蟹座
日期:2014-11-15 23:08:51
8 [报告]
发表于 2013-04-19 15:28 |只看该作者
本帖最后由 see_3000 于 2013-04-20 10:32 编辑

这个我已经实现了,代码如下,  很遗憾用的还是命令:

1. linux 版本:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. FILE *fp;
  5. char buffer[80];
  6. fp=popen("cat /etc/network/interfaces |grep ^iface\\ br-lan | awk -F ' ' '{print $4}'","r");
  7. fgets(buffer, sizeof(buffer), fp);
  8. printf("%s", buffer);
  9. pclose(fp);
  10. }
复制代码
2. openwrt版本:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     FILE *fp;
  5.     char buffer[80];
  6.     fp=popen("uci get network.lan.proto","r");
  7.     fgets(buffer, sizeof(buffer), fp);
  8.     printf("%s", buffer);
  9.     pclose(fp);
  10. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP