unix“ip address”命令的Python解析器(iproute2)

时间:2013-11-24 17:41:32

标签: python parsing unix networking

简短版本:

是否有一个库来解析unix命令的输出:

ip address

如果答案是否定的,您是否知道我可以用来加速解析器开发的任何python网络库?

详细说明:

我正在尝试构建一个开源抽象层,以便从使用不同协议(SSH,SNMP,HTTP)的网络设备中检索信息,以便在无线社区网络中使用,我从SSH(prototype here)开始,最初我找到了“ifconfig”命令的解析器,但解析器没有考虑到很多情况,而且我的网络朋友告诉我“ifconfig”已被弃用,“iproute2”是未来。

所以,在开始自己开发之前,我问是否有人知道是否有任何开源python解析器用于输出“ ip address ”unix命令。 我只需要检索一个接口列表,每个接口都是一个字典或一个对象,所有细节都包含在命令输出中(name,type,ip,mac,mtu,ecc)。

我发现的唯一一件事就是这个没有文档和未完成的github回购: https://github.com/nwhalen/python-iproute2

3 个答案:

答案 0 :(得分:1)

您可以使用python pyroute2库:

from pyroute2 import IPRoute
ip = IPRoute()
ip.get_addr(label='eth0')[0].get_attr('IFA_ADDRESS')

有关详情,请点击此处查看:http://pyroute2.org/pyroute2-0.3.14p4/iproute.html

答案 1 :(得分:1)

请只使用python netifaces库。

pip安装netifaces

用法

>>>import netifaces
>>>netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']
>>>netifaces.ifaddresses('lo0')
{18: [{'addr': ''}], 2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}], 30: [{'peer': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'addr': '::1'}, {'peer': '', 'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::1%lo0'}]}

答案 2 :(得分:0)

我使用scapy进行包伪造和网络技巧, 对于解析器我总是使用ast库e re(regexp)库,它们都在python stdlib中。

而不是你总能做到的:

import socket
socket.gethostbyname(socket.gethostname())

...以及所有套接字方法。