使用 pysnmp 获取单个 SNMP 值

Get a single SNMP value with pysnmp

我正在尝试将单个 OID 的值放入变量中。但是,我只能使用 pysnmp 走它。 如果我使用 SNMP 工具对其进行测试,我想获得 OID 1.3.6.1.4.1.2.3.51.2.2.7.1.0 的值 returns 值为 255。

使用这段代码我没有得到任何输出:

def getsnmp(host, oid):

    for (errorIndication,
         errorStatus,
         errorIndex,
         varBinds) in nextCmd(SnmpEngine(),
                              CommunityData('public', mpModel=0),
                              UdpTransportTarget((host, 161)),
                              ContextData(),
                              ObjectType(ObjectIdentity(oid)),
                              lookupMib=False,
                              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(' = '.join([x.prettyPrint() for x in varBind]))

getsnmp('10.100.11.30', '1.3.6.1.4.1.2.3.51.2.2.7.1.0')

但是,如果我删除最后一个 .0,结果是:

1.3.6.1.4.1.2.3.51.2.2.7.1.0 = 255

如何在不走的情况下直接访问特定的OID?

谢谢!

nextCmd returns 下一个 OID 相对于给定的。它永远不会 returns 给定 OID 的值。

如果您需要查询特定的 OID,您应该使用 getCmd 函数而不是 nextCmd