首页 > 解决方案 > 如何使用 pysnmp 遍历子表

问题描述

我想走一下enterprise.35604.2.3.5.7.2 oid下的snmp表。这将返回一个日志列表。

当我执行代码时,它不会在最后一个表格元素之后停止。我如何确保它会在所有子表完成后停止?

from pysnmp.hlapi import *
logoid='1.3.6.1.2.1.69.1.5.8.1.7'


def scan_cm_log(ipaddress, oid):
    for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
               CommunityData('<key>'),
               UdpTransportTarget((ipaddress, 161)),
               ContextData(),
               ObjectType(ObjectIdentity(oid)),
               ):

        if not errorIndication and not errorStatus:
            for varBind in varBinds:
                result=' = '.join([x.prettyPrint() for x in varBind])
                print(result)


scan_cm_log('<ip>', logoid)

标签: python-3.xsnmppysnmp

解决方案


尝试按照此处lexicographicMode=False的说明添加标志。

iterator = nextCmd(
    SnmpEngine(),
    CommunityData('<key>'),
    UdpTransportTarget((ipaddress, 161)),
    ContextData(),
    ObjectType(ObjectIdentity(oid)),
    lexicographicMode=False)

for (errorIndication, errorStatus, errorIndex, varBinds) in iterator:
    ...

一旦您查询的所有 OID 离开其各自的初始 OID 前缀,这应该会耗尽迭代器。


推荐阅读