将varBinds中的OID转换为MIB的最有效方法

时间:2019-02-08 16:57:56

标签: python-3.x pysnmp

完成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=' => ')

此方法的优缺点是什么?

1 个答案:

答案 0 :(得分:0)

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

所以尝试一下:

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

如果碰巧遇到未为其加载MIB​​的OID,则需要致电loadMibs()