Ошибки PySNMP при работе с файлами MIB - PullRequest
2 голосов
/ 26 января 2012

Я пытаюсь использовать файлы MIB в PySNMP. Код довольно прост. Ничего сложного. Просто пытаюсь получить информацию под OID. Код, который я использую, выглядит следующим образом:

#!/usr/local/bin/python2.7

from pysnmp.smi import builder, view, error
from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibPath() + ( '/path/to/command/mibs', )
mibBuilder.setMibPath( *mibPath )
mibBuilder.loadModules( 
    'MIB-File',
    )
mibView = view.MibViewController( mibBuilder )
errorIndication, errorStatus, errorIndex, \
                 varBindTable = cmdGen.nextCmd( 
    cmdgen.CommunityData( 'Name', 'Community' ),
    cmdgen.UdpTransportTarget( ( 'IP Address', 161 ) ),
    ( ( '', 'serverName' ), ),
    )

print varBindTable

Я знаю, что данные, введенные в это, точны, так как когда я использую asynCommandGenerator.asyncNextCmd, используя те же udpTransportTarget и CommunityData, это работает без проблем. Кроме того, ошибка, которую я вижу, очень специфична для компонентов MibBuilder.

Ошибка, которую я вижу:

Traceback (последний вызов был последним):

Файл "./snmpcollectortest.py", строка 11, в

NS-MIB-SMIv2 ',

Файл "/usr/lib/python2.7/site-packages/pysnmp-4.2.1-py2.7.egg/pysnmp/smi/builder.py", строка 221, в loadModules

pysnmp.smi.error.SmiError: модуль MIB "/path/to/command/mibs/MIB-File.py" ошибка загрузки: файл MIB "ASN1.py [co]" не найден в пути поиска

Обновление:

Я обнаружил, что у меня не установлен M2Crypto, поэтому я не смог найти ASN1.py. Однако я исправил это, и я все еще получаю ту же ошибку.

1 Ответ

7 голосов
/ 28 января 2012

Методы getMibPath() / setMibPath() устарели. Они не работают, если вы не используете .egg pysnmp или его модули MIB.

Вы всегда должны использовать методы getMibSources() / setMibSources(). Они работают как для .egg, так и для файловой установки.

mibPath = mibBuilder.getMibSources() + (builder.DirMibSource('/path/to/command/mibs'),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules(
    'MIB-File',
)

Кстати, pysnmp не требует M2Crypto, требуется pyasn1 и pycrypto (только для шифрования SNMPv3).

...