gpt4 book ai didi

Python - 正则表达式从 snmp walk 输出中提取 IP 和掩码

转载 作者:行者123 更新时间:2023-11-30 22:18:17 25 4
gpt4 key购买 nike

我正在努力使用正则表达式从 snmp walk 输出中提取 IP 和子网掩码信息。这是输出的样子。

[<SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.2.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.192' (oid='iso.3.6.1.2.1.4.21.1.11.10.0.0.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.10.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.252' (oid='iso.3.6.1.2.1.4.21.1.11.10.11.0.0', oid_index='', snmp_type='IPADDR')>,

我将输出组织在不同的行中,以便于理解(我的代码中的实际输出是上面没有行的输出):

[<SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.2.0', oid_index='', snmp_type='IPADDR')>, 
<SNMPVariable value='255.255.255.192' (oid='iso.3.6.1.2.1.4.21.1.11.10.0.0.0', oid_index='', snmp_type='IPADDR')>,
<SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.10.0', oid_index='', snmp_type='IPADDR')>,
<SNMPVariable value='255.255.255.252' (oid='iso.3.6.1.2.1.4.21.1.11.10.11.0.0', oid_index='', snmp_type='IPADDR')>,

因此,在每个 block 之间,我们有子网掩码 (value='255.255.255.0') 和 IP 地址 (oid='iso.3.6.1.2.1.4.21.1.11.10.10.2.0 ')

我需要提取该信息并将其保存在数组/列表中,因此它看起来像这样:

(10.10.2.0/255.255.255.0, 10.0.0.0/255.255.255.192, and so on ...)

我相信正则表达式将是最好的解决方案,但尽管经过许多小时的研究和尝试,我似乎找不到解决方案。

这是我到目前为止所拥有的:

<some code omitted ..>
# contains SNMP output displayed above
print snmp_output
str_result = ''.join(str(snmp_output))
regex = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", str_result)
print regex

它给了我这个输出:

['255.255.255.0', '3.6.1.2', '1.4.21.1', '11.10.10.2', '255.255.255.192', '3.6.1.2', '1.4.21.1', '11.10.0.0', '255.255.255.0', and so on ...]

我想第一步是摆脱只给我掩码和IP,而不是中间有#的情况。

任何帮助将不胜感激。

谢谢达蒙

编辑:

for item in system_items:
print '{oid}.{oid_index} {snmp_type} = {value}'.format(
oid=item.oid,
oid_index=item.oid_index,
snmp_type=item.snmp_type,
value=item.value

最佳答案

您可以使用以下正则表达式:

value='([\d.]+)'\s*\(oid='iso.*?\.(\d+\.\d+.\d+.\d+)'

Demo

在Python中:

>>> import re
>>> str = r"[<SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.2.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.192' (oid='iso.3.6.1.2.1.4.21.1.11.10.0.0.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.0' (oid='iso.3.6.1.2.1.4.21.1.11.10.10.10.0', oid_index='', snmp_type='IPADDR')>, <SNMPVariable value='255.255.255.252' (oid='iso.3.6.1.2.1.4.21.1.11.10.11.0.0', oid_index='', snmp_type='IPADDR')>,"
>>> re.findall(r"value='([\d.]+)'\s*\(oid='iso.*?\.(\d+\.\d+.\d+.\d+)'", str)
# => [('255.255.255.0', '10.10.2.0'), ('255.255.255.192', '10.0.0.0'), ('255.255.255.0', '10.10.10.0'), ('255.255.255.252', '10.11.0.0')]

然后您可以根据需要获取元组并将其格式化为字符串。

关于Python - 正则表达式从 snmp walk 输出中提取 IP 和掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com