使用Python正则表达式从SNMP Walk输出提取IP与子网掩码
从SNMP Walk输出中提取IP地址和子网掩码的正则方案
嘿,针对你要从SNMP Walk输出里提取IP地址和对应子网掩码的需求,我整理了一套直接能用的正则方案,帮你快速搞定!
先看你给出的输出结构,每一条<SNMPVariable>记录里都藏着两个关键信息:
- oid字段末尾的目标IP地址(比如
10.10.2.0) - value字段里的子网掩码(比如
255.255.255.0)
实用正则表达式
我们可以用这个正则来精准匹配每一组对应的IP和子网掩码:
<SNMPVariable value='([\d.]+)' \(oid='iso\.3\.6\.1\.2\.1\.4\.21\.1\.11\.([\d.]+)',.*\)>
正则各部分解释
value='([\d.]+)':捕获value里的子网掩码,[\d.]+专门匹配由数字和点组成的IP格式字符串oid='iso\.3\.6\.1\.2\.1\.4\.21\.1\.11\.([\d.]+)':捕获oid末尾的目标IP地址,这里固定匹配到iso.3.6.1.2.1.4.21.1.11.之后的部分,也就是我们要找的IP- 末尾的
.*用来匹配记录中其他无关内容,确保能完整覆盖整条<SNMPVariable>记录
示例代码(Python)
如果用Python来实现提取,代码可以这么写:
import re # 你的SNMP Walk输出内容 snmp_output = """[<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')>]""" # 定义正则模式 pattern = r"<SNMPVariable value='([\d.]+)' \(oid='iso\.3\.6\.1\.2\.1\.4\.21\.1\.11\.([\d.]+)',.*\)>" # 批量匹配所有结果 matches = re.findall(pattern, snmp_output) # 遍历输出提取到的信息 for subnet_mask, ip_addr in matches: print(f"IP地址: {ip_addr}, 子网掩码: {subnet_mask}")
运行结果
执行上面的代码后,会得到清晰的对应关系:
IP地址: 10.10.2.0, 子网掩码: 255.255.255.0 IP地址: 10.0.0.0, 子网掩码: 255.255.255.192 IP地址: 10.10.10.0, 子网掩码: 255.255.255.0
如果你的SNMP输出有格式变种(比如oid前缀不同),只需要调整正则里的oid固定匹配部分就可以适配啦。
内容的提问来源于stack exchange,提问作者Damon
相关产品推荐
相关产品推荐

