0

使用 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

4

1 回答 1

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类实例,其行为类似于两个元素的元组。第一个元素是具有.getOid方法的ObjectIdentity :

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

如果您希望 MIB 对象及其值完全用 MIB 术语表示(即解析为枚举的值),那么您只需要使用.loadMibs( )方法。您可能还需要设置搜索路径,让 pysnmp 找到您引用的 MIB。

于 2018-12-04T07:11:07.890 回答