修改Python easysnmp模块在“OID”和“OID_索引”中返回的OID部分

2024-06-08 16:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

Pythoneasysnmp模块返回SNMP OID,分为两部分:oidoid_index。例如,如果我遍历ipAddressIfIndex.ipv4.1.3.6.1.2.1.4.34.1.3.1数字形式)OID:

>>> from easysnmp import Session
>>> session = Session(hostname="r1", community='public', version=2, use_long_names=True, use_sprint_value=True)
>>> session.bulkwalk("ipAddressIfIndex.1")
[<SNMPVariable value='9' (oid='.iso.org.dod.internet.mgmt.mib-2.ip.ipAddressTable.ipAddressEntry.ipAddressIfIndex', oid_index='1.4.192.0.2.1', snmp_type='INTEGER')>,

/* rest of the output is removed for brevity */

>>>

。。然后oid.iso.org.dod.internet.mgmt.mib-2.ip.ipAddressTable.ipAddressEntry.ipAddressIfIndex(或.1.3.6.1.2.1.4.34.1.3数字),而oid_id1.4.192.0.2.1。我想将返回的oid右移两位,这样oid_id将是192.0.2.1。这可能吗?我尝试了session.bulkwalk("ipAddressIfIndex.1.4")session.bulkwalk(("ipAddressIfIndex", "1.4"))session.bulkwalk(".1.3.6.1.2.1.4.34.1.3.1.4")并使用了各种会话参数,如use_long_namesuse_enums,但我无法修改此行为

这显然不是什么大问题,因为我可以读取最后四个字段(例如oid_index.split('.')[-4:]),但可能有一个技巧可以在easysnmp返回的oidoid_index之间移动“行”


Tags: trueindexnamesvalueusesessioniso数字
1条回答
网友
1楼 · 发布于 2024-06-08 16:54:06

您可以使用正则表达式提取您的信息

import re
regex = re.compile(r'(?:\d+\.){3}\d+$')
tuple('{}/{}'.format(regex.search(item.oid).group(0), item.value)
      for item in system_items)

或者您可以使用PySNMP

class SNMPVariable(object):
    def __init__(self, value, oid):
       self.value = value 
       self.oid = oid  
#example      
s1 = SNMPVariable('255.255.255.0', 'iso.3.6.1.2.1.4.21.1.11.10.10.2.0')
prtin('{}/{}'.format(regex.search(s1.oid).group(0), s1.value)
  

检查此answer

相关问题 更多 >