首页 > 解决方案 > Pysnmp 加载 MIB 文本和 py 文件的问题

问题描述

我在使用 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 mibs,我有 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 我的社区 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

标签: python-3.xpysnmphuawei-mobile-services

解决方案


如果您认为您应该在响应中获得一些值而不是“没有这样的实例”,那么问题是您正在查询设备上不存在的对象 (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。

快速文档在这里


推荐阅读