1

「 pysnmp を使用して MIB テキスト規則から OID 値のペアを変換する」の問題で説明されている方法を使用して、 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()

Textual-Convention は次のとおりです。

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)
          }

このエラーのヘルプをいただければ幸いです。

4

1 に答える 1

0

NORTEL-ALARM-EXT-MIB が見つからなかったため、問題を再現できません。

一般に、このエラーは、参照した OID (1.3.6.1.4.1.562.29.6.1.1.1.1) が何らかの SNMP テーブルに属していることを意味します。そのテーブルにはインデックス/インデックス (INDEX 句) があり、それらのインデックスの 1 つに NnExtAlarmEventType (例: INTEGER) の構文があります。ただし、指定した OID は、そのインデックスをエンコードするすべてのサブ OID が含まれているわけではないという意味で不完全です。解決策は、末尾のサブ OID をいくつか削除するか、さらに追加することです。

おそらく pysnmp は、そのような状況を無視し、OID の解析されていない部分をそのまま返すために、その点でも強化する必要があります。

ところで、最新の pysnmpを試してコードを簡素化することを検討してください。

于 2015-10-19T13:49:43.057 に答える