Разрешение OID pysnmp

Как с помощью pysnmp выполнять разрешение запросов, возвращающих OID вместо значения?

Я написал инструмент поиска, используя pysnmp, вот входные данные и результаты:

./run_snmp_discovery.py --host 1.1.1.1 --community XXXXXX --command get --mib_oid_index  '{ "mib" : "SNMPv2-MIB", "oid" : "sysObjectID", "index" : "0"  }' --verbose
Debug: 'varBind': SNMPv2-MIB::sysObjectID.0 = SNMPv2-SMI::enterprises.9.1.222
{"0": {"sysObjectID": "SNMPv2-SMI::enterprises.9.1.222"}}

Как можно преобразовать результат в текстовое значение cisco7206VXR (ссылка http://www.circitor.fr/Mibs/Html/C/CISCO-PRODUCTS-MIB.php#cisco7206VXR)


person aaron williams    schedule 04.12.2018    source источник


Ответы (1)


Если вы используете код подобный этому:

from pysnmp.hlapi import *

errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('public'),
           UdpTransportTarget(('demo.snmplabs.com', 161)),
           ContextData(),
           ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
)

for varBind in varBinds:
    print(' = '.join([x.prettyPrint() for x in varBind]))

И вы хотите, чтобы объект MIB был представлен как OID, тогда varBind в приведенном выше коде на самом деле является ObjectType, который ведет себя как кортеж из двух элементов. Первый элемент — это ObjectIdentity, который имеет Метод .getOid:

>>> objectIdentity = ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)
>>> objectIdentity.resolveWithMib(mibViewController)
>>> objectIdentity.getOid()
ObjectName('1.3.6.1.2.1.1.1.0')

Если вы хотите, чтобы объект MIB и его значение были полностью представлены в терминах MIB (т. е. значение, преобразованное в перечисление), вам просто нужно загрузить MIB, который определяет этот объект MIB (возможно, CISCO-PRODUCTS-MIB), используя .loadMibs(). Вам также может потребоваться настроить путь поиска. чтобы позволить pysnmp найти MIB, на который вы ссылаетесь.

person Ilya Etingof    schedule 04.12.2018
comment
это сработало. Я отметил ваш ответ как ответ на вопрос. Спасибо за быстрый ответ! еще немного информации - мы не будем знать заранее перечисляемое устройство - при таком подходе я считаю, что необходимо загрузить все исследуемые MIBS с помощью метода loadMibs(). - person aaron williams; 04.12.2018