Ошибки при попытке загрузить пользовательский файл MIB с помощью pysnmp

Для взаимодействия с Cordex от Alpha Technologies мне нужно использовать протокол SNMP. Я просматривал документацию и примеры из pysnmp, чтобы заставить работать некоторые аспекты, и у меня есть определенные проблемы при использовании внешних файлов MIB из альфа-технологий. Мой первый тест был следующим:

from pysnmp.hlapi import *
from pysnmp.smi import builder, view, compiler, rfc1902
from pysnmp import debug
#debug.setLogger(debug.Debug('all'))
debug.setLogger(debug.Debug('msgproc', 'mibbuild'))
mibBuilder = builder.MibBuilder()

mibViewController = view.MibViewController(mibBuilder)
test = ObjectIdentity('SNMPv2-MIB', 'sysDescr').addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/@mib@')
test.resolveWithMib(mibViewController)
test.getOid()

когда я делаю это, он правильно печатает правильный OID:

>>> ObjectName('1.3.6.1.2.1.1.1')

Однако, просматривая журналы отладки, он, похоже, использует скомпилированные файлы MIB из библиотеки pysnmp вместо файлов ASN.1, расположенных в "C:/Users/SLN9000/Repositories/cordex/MIB/@mib@". Когда я делаю что-то подобное для файла MIB от технологий Alpha

from pysnmp.hlapi import *
from pysnmp.smi import builder, view, compiler, rfc1902
from pysnmp import debug
#debug.setLogger(debug.Debug('all'))
debug.setLogger(debug.Debug('msgproc', 'mibbuild'))
mibBuilder = builder.MibBuilder()

mibViewController = view.MibViewController(mibBuilder)
test = ObjectIdentity('03409602D__Alpha_System_Controller', 'dcpower', 1).addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/')
test.resolveWithMib(mibViewController)
test.getOid()

Это терпит неудачу на шаге test.resolveWithMib(mibViewController) с ошибкой

pysnmp.smi.error.MibNotFoundError: 03409602D__Alpha_System_Controller Ошибка (и) компиляции: отсутствует

Мне не совсем понятно, что я делаю не так. Файл MIB, который я использую, можно скачать здесь. Любая помощь приветствуется!

2 ответа

Мой текущий способ - вручную скомпилировать все файлы MIB с помощью mibdump.py инструмент. Не очень масштабируемый, но, по крайней мере, он позволяет мне продолжать работу.

Похоже, каноническое название MIB, в который они отправляют 03409602D__Alpha_System_Controller файл AlphaPowerSystem-MIB (из первой строки этого файла). Я думаю, вам лучше переименовать этот файл в каноническое имя, чтобы упростить ситуацию.

Другие файлы в этом архиве.zip представляются копиями стандартных SNMP MIB. Это нормально, что pysnmp использует их самостоятельно - эти базовые MIB зависят от реализации. Поэтому вам не нужны остальные MIB из этого.zip.

Как только вы закончите с вышеописанным, вы сможете выполнить запрос MIB следующим образом:

test = ObjectIdentity('AlphaPowerSystem-MIB', 'dcpower', 1).addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/')

Работает с snmptranslate.py инструмент, основанный на pysnmp:

$ snmptranslate.py -On  AlphaPowerSystem-MIB::dcpower

1.3.6.1.4.1.7309.4

Другие вопросы по тегам