-1

Python easysnmp模块分两部分返回 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右移两个,以便. 这可能吗?我已尝试使用,并使用各种会话参数,例如or ,但我无法修改此行为。oid_id192.0.2.1session.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:]内容),但也许有一个技巧可以在easysnmpoid和返回之间移动“线”。oid_index

4

1 回答 1

-1

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

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)
  

检查这个答案

于 2021-01-30T10:12:38.383 回答