我正在使用问题Translate OID value pairs from MIB textual convention using pysnmp中描述的方法根据MIB文本约定翻译OID和OID值。
使用测试OID并测试OID值,我的代码如下:
from pysnmp.smi import builder, view
from pysnmp.entity.rfc3413.oneliner import mibvar
from pysnmp.proto import rfc1902
from pyasn1.type import univ
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibSources() + (builder.DirMibSource('/home/rong/NOP_Dev/test'),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules('NORTEL-ALARM-EXT-MIB')
mibViewController = view.MibViewController(mibBuilder)
varName = mibvar.MibVariable(univ.ObjectIdentifier('1.3.6.1.4.1.562.29.6.1.1.1.1')).resolveWithMib(mibViewController)
print(varName.getMibNode().getSyntax().clone(1).prettyPrint())
当我运行我的代码时,我收到以下错误:
Traceback (most recent call last):
File "./pysnmp_test.py", line 82, in <module>
varName = mibvar.MibVariable(univ.ObjectIdentifier('1.3.6.1.4.1.562.29.6.1.1.1.1')).resolveWithMib(mibViewController)
File "/home/rong/NOP_Dev/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/mibvar.py", line 169, in resolveWithMib
self.__indices = rowNode.getIndicesFromInstId(suffix)
File "<string>", line 1076, in getIndicesFromInstId
File "<string>", line 899, in setFromName
pysnmp.smi.error.SmiError: Short OID for index NnExtAlarmEventType()
文字公约如下:
NnExtAlarmEventType ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"Nortel version of IANA Event Type"
SYNTAX INTEGER
{
other (1),
communicationsAlarm (2),
qualityOfServiceAlarm (3),
processingErrorAlarm (4),
equipmentAlarm (5),
environmentalAlarm (6),
integrityViolation (7),
operationalViolation (8),
physicalViolation (9),
securityServiceOrMechanismViolation (10),
timeDomainViolation (11)
}
非常感谢帮助解决此错误!
答案 0 :(得分:0)
我无法找到NORTEL-ALARM-EXT-MIB,因此我无法重现您的问题。
通常,该错误意味着您引用的OID(1.3.6.1.4.1.562.29.6.1.1.1.1)属于某些SNMP表。该表具有索引/索引(INDEX子句),其中一个索引的语法为NnExtAlarmEventType(例如INTEGER)。但是你给出的OID是不完整的,因为它不包含编码该索引的所有子OID。解决方案是删除一些尾随的子OID或添加更多。
在这方面也应该加强pysnmp,以便忽略这种情况并按原样返回OID中未解析的部分。
顺便说一句,您可以考虑尝试使用latest pysnmp来简化代码。