获取centos下的所有网卡配置信息

一.任务:

获取centos下的所有网卡的配置信息和dns记录,并返回json格式的数据

之所以选择了json格式,也是为了更方便的传数据给前端页面去处理。

再用Php写一个前端的页面,去接受这个python里的json数据 就可以在轻松地在前端对机器进行网络设置的修改


二.整体思路:

1.找到有哪几个网卡配置文件:

  • 在该目录下:/etc/sysconfig/network-scripts/
  • 一般网卡只有一个,虚拟机当中可以自己添加网卡

2.依次打开网卡配置文件 :

3.获取所要的配置项信息

  • 遍历配置项的每一行信息
  • 如果该行有想要的参数如IPADDR的话,就以=号为分隔符分割,提取后面的数据

4.用字典保存所要信息,最后再json化数据的格式


三.处理细节:

1.如何找到有哪几个网卡配置文件?

一开始想使用 output = os.popen('cat /etc/sysconfig/network-scripts/ifcfg-eth* ') 来打开网卡的所有配置文件,但是会打开多余的文件。 因为最后的*会匹配到类似ifcfg-eth0~结尾的备份文件

所以我要过滤掉~结尾的备份文件,并列出符合条件的文件。

(status,allfilename) = commands.getstatusoutput("ls /etc/sysconfig/network-scripts/ | grep '^ifcfg.*[0-9.*]$'")

现在就知道了有哪几个网卡配置文件,并且知道它的名字叫什么。

接下来就要

  • 依次打开配置文件
  • 获取所要的配置项信息
  • 保存到一个字典里

2.返回嵌套的json格式:

json后的初始数据:

目标数据:

要把黑色图中的数据转化为白色图中的数据。

方法1:

手动添加成类似二元数组的json格式,即白色图的格式:

  • 先把第一个黑色图的数据:一个一级字典,直接转为json格式。
  • 然后再拼接一些数据上去。。。手动形成所要的嵌套的json格式

这个方法有点重复造轮子的意味,但是由于一开始php开发那边说要给他传的json格式中的数据的键值对要顺序的。

而将直接一个嵌套的字典用方法json.dumps()转化为一个嵌套的json格式,这当中的数据是无序的~


方法2:

问了别的python牛同学,给了我一个似乎更好的解决方法 这个方法好像也是,另外一个php开发的同事暗示我的方法,奈何我没有get到。

将黑色图的数据分别拿出来,再放入一个字典,形成嵌套的字典。 最后再转换成嵌套的json格式

本质上就是:一个嵌套的python字典转化为一个嵌套的json格式

这个方法2,在获取wins server2008中用了,更方便快捷~ 毕竟如果用方法1去实现,有点重复造轮子的以为,还不如直接使用轮子来得方便**


四.关键概念:

json格式:

什么是json格式?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。

JSON 数据格式解析:

和 XML 一样,JSON 也是基于纯文本的数据格式

由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的

  • String
  • Number
  • Boolean

也可以传输

  • 数组

或者一个复杂的

  • Object 对象。

json如何表示数据?

Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map,而不是 Java 的 Class 。注意 Key 只能用 String 表示。

  • 例如,一个 Address 对象包含如下 Key-Value:
 city:Beijing 
 street:Chaoyang Road 
 postcode:100025(整数)
  • 用 JSON 表示如下:

    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
    
  • 其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:
{"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}

python&json:

json的表示方式很像python当中的字典,也是用无序的用键值对来进行表示。 因此,也能很轻易的将Python中的字典转为json格式的数据:

  • 实例:

用python中的字典表示的数据: eth_info_dict_result:

将该字典json化后的结果: eth_info_json_result = json.dumps(eth_info_dict_result)


五.代码:

https://github.com/jerrychan807/python-journey/blob/master/return_linux_eth_config.py


六.参考:

results matching ""

    No results matching ""