pysnmp OID解析
pysnmp OID resolution
使用 pysnmp,如何对 return 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)
如果您使用代码 like this:
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 class instance which behaves like a tuple of two elements. The first element is ObjectIdentity which has the .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() method. You might also need to set up a search path 让 pysnmp 找到您引用的 MIB。
使用 pysnmp,如何对 return 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)
如果您使用代码 like this:
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 class instance which behaves like a tuple of two elements. The first element is ObjectIdentity which has the .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() method. You might also need to set up a search path 让 pysnmp 找到您引用的 MIB。