首页 > 解决方案 > 将 varBinds 中的 OID 转换为 MIB 的最有效方法

问题描述

在我的 SNMP 事务完成并将结果存储在 varBinds 中之后,我想将 MIB 和值分配给它们自己的变量以进行进一步处理。当我尝试:

for x in varBinds
    print x

OID 已翻译,但是,当我尝试时,我需要将 mib 和值分配给各个变量:

for oid, val in varBinds
    print oid, val

OID 未翻译。我还没有弄清楚如何使用.loadMibs,所以我创建了一个函数来翻译我调用的 OID oid

T = oid2mib(oid)

def oid2mib(oid_str):

    oid_tuple = tuple(oid_str)
    mib_builder = builder.MibBuilder()
    compiler.addMibCompiler(mib_builder)
    mib_builder.loadModules('SNMPv2-MIB')
    mib_view = view.MibViewController(mib_builder)

    a, b, c = mib_view.getNodeName(oid_tuple)

    return b[-1] + '.' + '.'.join(map(str, c))

print('Mib:%s Value:%s' % (T, val))

这有效,它将我的 OID 转换为 MIB,但我想知道这是否是实现我想要的结果的最有效方法?也许.loadMibs可能更有效?


更新

我刚刚尝试了以下,

for x in varBinds
    a, b = str(x).split('=')
    print(a.rstrip(), b.rstrip(), sep=' => ')

这种方法的优点和缺点是什么?

标签: python-3.xpysnmp

解决方案


由于您在第一种情况下翻译了 var-bindings,我怀疑您已经加载了正确的 MIB。

所以试试这个:

for oid, val in varBinds
    a, b = str(oid), str(val)
    print(a, b, sep=' => ')

如果碰巧遇到未加载 MIB 的 OID,则需要调用loadMibs() 。


推荐阅读