Pysnmp 加载 MIB 文本和 py 文件时出现问题

Pysnmp problem loading MIB text and py files

我在使用 pysnmp 包时遇到问题。

我想连接华为MA5600的OLT设备。我有他的文本格式的 MIB * .mib 这个想法是为了获得温度、能源消耗等

我有以下代码

from pysnmp.hlapi import *
from pysmi import debug
#debug.setLogger(debug.Debug('compiler'))


errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('MyCommunity'),
           UdpTransportTarget(('192.168.1.2', 161)),
           ContextData(),
           ObjectType(ObjectIdentity('1.3.6.1.2.1.1.6.0')),
           ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')),
           ObjectType(ObjectIdentity('1.3.6.1.2.1.2.2.1.10')),
           ObjectType(ObjectIdentity('1.3.6.1.4.1.2011.2.6.7.1.1.1.1.11'))\
           .addAsn1MibSource('file:///home/devel/mib/',
                 'file:///home/devel/mib'
                 'http://mibs.snmplabs.com/asn1/@mib@',
                 'http://mibs.snmplabs.com/asn1/',
                 'file:///home/devel/mib/public/',
                 'file:///home/devel/mib/public')
           )

)



if errorIndication:
    print(errorIndication)
elif errorStatus:
    print('%s at %s' % (errorStatus.prettyPrint(),
                        errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
    for varBind in varBinds:
        print(' = '.join([x.prettyPrint() for x in varBind]))

在这种情况下,我有以下答案:

(sent) C:\DESARROLLOS\system>python v2c-get.py
SNMPv2-MIB::sysLocation.0 = EPL
SNMPv2-MIB::sysDescr.0 = Huawei Integrated Access Software
SNMPv2-SMI::mib-2.2.2.1.10 = No Such Instance currently exists at this OID
SNMPv2-SMI::enterprises.2011.2.6.7.1.1.1.1.11 = No Such Instance currently exists at this OID

我也尝试过使用 addMibSource 函数添加 python mib,我有 pysnmp_mibs 包,但它也不起作用。

应该注意的是,通过命令我得到了我请求的信息:

snmpwalk -v 2c -c MyCommunity 192.168.1.2 1.3.6.1.4.1.2011.2.6.7.1.1.1.1.1

应该注意的是,通过命令我得到了我请求的信息。

snmpwalk -v 2c -c MyCommunity 192.168.1.2 1.3.6.1.4.1.2011.2.6.7.1.1.1.1.1

如果有人遇到类似的事情并且知道该怎么做,我将不胜感激。我正在使用 python 3.6,pysmi == 0.3.2,pysnmp == 4.4.6 和 pysnmp-mibs == 0.1.6

如果您认为您应该在响应中获得一些值而不是 'No such instance',那么问题是您正在查询设备上不存在的对象 (OID) 或者您没有访问权限

如果您希望响应的 OID 被解析为人类友好的名称,您应该预加载定义这些 OID 的 MIB,例如ObjectType(ObjectIdentity('1.3.6.1.2.1.2.2.1.10')).loadMibs('MY-MIB', 'MY-OTHER-MIB').

无论哪种方式,最好的解决方案可能是按名称查询对象:

ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0))

...而不是通过 OID。按名称查询会自动加载您引用的 MIB。

快速文档是here