Ошибки при попытке загрузить пользовательский файл 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