Получить тип данных для OID с помощью PySNMP

Мне нужно найти имя объекта и тип данных для заданного OID. Я могу получить имя, но не могу найти в PySNMP функцию, которая также возвращает тип данных (целое число, строка октетов, счетчик...).

Что у меня есть до сих пор (пример):

from pysnmp.smi import builder, view, compiler

mibBuilder = builder.MibBuilder()
compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs'])
mibBuilder.loadModules('IF-MIB', ...)
mibView = view.MibViewController(mibBuilder)

oid, label, suffix = mibView.getNodeName((1,3,6,1,2,1,31,1,1,1,6))
print(label)

Это возвращает имя для oid (ifHCInOctets), но мне также нужно, чтобы он возвращал тип данных, который в данном случае будет Counter.

Есть ли в PySNMP функция для поиска типа данных?


person alena    schedule 10.01.2019    source источник
comment
Хм, как ни странно, не очевидно из ссылки   -  person Lightness Races in Orbit    schedule 10.01.2019
comment
Точно нет. Я был уверен, что эта функциональность где-то включена, но нигде не мог найти ее документально. Решено сейчас для меня.   -  person alena    schedule 11.01.2019


Ответы (1)


В модели pysnmp существует класс MibBuilder, который загружает объекты MIB в память и адресует их по имени MIB и имени объекта MIB.

Поверх MibBuilder есть класс MibViewController, который поддерживает несколько индексов для адресации тех же объектов MIB (которые содержатся в MibBuilder) по другим их атрибутам, таким как OID.

Следовательно:

from pysnmp.smi import builder, view, compiler

# Load MIB objects, index them by MIB::name
mibBuilder = builder.MibBuilder()

# If Pythonized MIB is not present, call pysmi parser to fetch
# and compile requested MIB into Python
compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs'])

# Load or compile&load this MIB
mibBuilder.loadModules('IF-MIB')

# Index MIB objects (as maintained by `mibBulder`) by OID
mibView = view.MibViewController(mibBuilder)

# Look up MIB name and MIB object name by OID
modName, symName, suffix = mibView.getNodeLocation((1,3,6,1,2,1,31,1,1,1,6))

# Fetch MIB object
mibNode, = mibBuilder.importSymbols(modName, symName)

# This might be an ASN.1 schema object representing one of SNMP types
print(mibNode.syntax.__class__)

Документации действительно не хватает... Хотя в следующей версии это будет улучшено.

Надеюсь это поможет.

person Ilya Etingof    schedule 10.01.2019
comment
Да, большое спасибо! Я пытался разобраться в документации, но не нашел ничего полезного. Это отлично решает мою проблему. - person alena; 11.01.2019