изменить часть OID, возвращаемую в «oid» и «oid_index», модулем Python easysnmp

Модуль Python easysnmp возвращает OID SNMP в двух частях: и . Например, если я иду по 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 */

>>>

.. тогда это .iso.org.dod.internet.mgmt.mib-2.ip.ipAddressTable.ipAddressEntry.ipAddressIfIndex(или же .1.3.6.1.2.1.4.34.1.3численно) и 1.4.192.0.2.1. Я хотел бы сдвинуть возвращенное вправо на два, чтобы 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_namesили же use_enums, но я не могу изменить это поведение.

Это, очевидно, не большая проблема, так как я могу прочитать последние четыре поля (например, что-то вроде oid_index.split('.')[-4:]), но, возможно, есть хитрость, чтобы сместить "линию" между oidа также oid_indexвозвращается easysnmp.

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)
  

проверить этот ответ

Другие вопросы по тегам