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。
我在使用 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。