python - 如何在 pysnmp 中为 sysObjectID 获取正确的 MIB
问题描述
当我将所有必要的 MIB 文件编译并加载到 pysnmp 时,sysObjectID 应该返回一个完全解析的 MIB。但它没有
到目前为止我所做的是,我创建了一个 mib_builder 并将预编译的 mib 源添加到构建器,通过提供 MibInstrumController 的 MsgAndPduDispatcher 从 hlapi 将 mib 构建器传递给 SnmpEngine。然后请求 sysObjectID。
考虑以下代码块:
from pysnmp.smi import builder, view, compiler, error, instrum
from pysnmp.proto.rfc3412 import MsgAndPduDispatcher
from pysnmp.hlapi import *
mib_builder = builder.MibBuilder()
mib_builder.addMibSources(builder.DirMibSource('/path/to/compiled/mibs/'))
engine = SnmpEngine(msgAndPduDsp=MsgAndPduDispatcher(mibInstrumController=instrum.MibInstrumController(mib_builder)))
oid = ObjectIdentity("SNMPv2-MIB", "sysObjectID")
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in nextCmd(
self.engine,
CommunityData('public', mpModel=1),
UdpTransportTarget(('192.168.0.222', 161)),
ContextData(),
ObjectType(oid),
lexicographicMode=False
):
if errorIndication:
print(errorIndication)
break
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
break
else:
for varBind in varBinds:
print(varBind)
它应该为 sysObjectID 返回正确的 MIB。但它回来了,
SNMPv2-MIB::sysObjectID.0 = SNMPv2-SMI::enterprises.9.1.1047
然后我尝试了,
for varBind in varBinds:
print(varBind)
if type(varBind[1]) == type(oid):
_oid, label, suffix = view.MibViewController(mib_builder).getNodeName(varBind[1].getOid())
print(_oid, label, suffix)
返回
SNMPv2-MIB::sysObjectID.0 = SNMPv2-SMI::enterprises.9.1.1047
1.3.6.1.4.1 ('iso', 'org', 'dod', 'internet', 'private', 'enterprises') 9.1.1047
正确的 MIB 位于 CISCO-PRODUCTS-MIB 中,我已对其进行编译。
那么,我该怎么做才能为 sysObjectID 获得正确的 MIB?
解决方案
TL;博士; - 尝试将.loadMibs('CISCO-PRODUCTS-MIB')添加到您的ObjectIdentity
对象。
您可能需要它的原因是 pysnmp 不会自动将 OID 映射到 MIB。因此,当 pysnmp 获得要翻译的 OID 时,它只会尝试使用它已经加载的 MIB。
顺便说一句,你不需要那么多代码来实现你想要的。只需一个基线SNMP get/walk(加上.loadMibs()
您预期使用的 MIB)就足够了。
推荐阅读
- c# - 无法使用 C# 获取 GoogleTrends 数据
- android - Android Studio 北极狐中缺少 Jetpack Compose 的“预览配置选择器”选项 2020.3.1 测试版 3
- json.net - 无法使用 azure 函数将 json 存储在 azure blob 存储中的单行中
- python - Colab:将 Python 模块收集到一个笔记本中
- java - 如何使用 for-each 循环在 Java 中打印字符串对象的每个字符?
- python - Django无法保存表单尝试在字段中设置用户
- python - 如何将格式 00:00 更改为 0:00,日期时间
- java - 如何解决此 JavaFX 版本错误?
- html - 我在课堂上使用的“fas”改变了文本的字体系列
- javascript - 如何使用 App 脚本在表格中显示列表