Python解析器适用于Unix的“ip address”命令(iproute2)

3

简短版本:

是否有一个库可以解析Unix命令的输出:

ip address

如果回答是否定的,你知道我可以使用哪些Python网络库来加速解析器开发吗?
详细说明:
我正在尝试构建一个开源抽象层,用于从具有不同协议(SSH、SNMP、HTTP)的网络设备中检索信息,以在无线社区网络中使用。我从SSH(此处为原型)开始,并最初找到了一个“ifconfig”命令的解析器,但解析器没有考虑到许多情况,而且我的网络朋友告诉我“ifconfig”已被弃用,“iproute2”是未来。
因此,在开始开发自己的解析器之前,我询问是否有人知道是否有任何开源Python解析器可用于“ip address”Unix命令的输出。 我只需要检索接口列表,每个接口都是字典或对象,其中包含命令输出中包含的所有详细信息(名称、类型、IP、MAC、MTU、ECC)。
我找到的唯一资料是这个未经记录和未完成的github仓库: https://github.com/nwhalen/python-iproute2

1
不要解析命令行工具的输出,我会先尝试直接从 /proc/net 获取信息 - 这就是 ifconfigip 命令获取大部分信息的地方。 - Lukas Graf
2
关于网络库来帮助您完成此操作,请查看netifaces模块 - Lukas Graf
谢谢Lukas,请记住我不是在尝试检索安装Python的机器上的接口,而是在远程机器上。 - nemesisdesign
没问题,我想现在我明白了。然后解析 ip addressifconfig 的输出可能是您使用 SSH 后端的最佳选择。pyparsing 模块可以帮助解析该输出。我猜正则表达式也可以工作,但很快就会变得难以阅读。 - Lukas Graf
2
还有一个提示:ip 命令的 -o 选项(单行输出)可能会给您更容易解析的输出。很抱歉把所有这些都放在注释中,但我目前没有时间编写一个可移植、涵盖大多数情况并经过测试的体面答案。 - Lukas Graf
显示剩余5条评论
3个回答

1
请使用Python的netifaces库。 pip install 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'}]}

1

0

我使用Scapy进行数据包伪造和网络技巧,对于解析器,我总是使用ast库和re(正则表达式)库,它们都在Python标准库中。

除此之外,你也可以这样做:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接