Получение имени объекта из OID для пользовательского MIB в pysnmp - PullRequest
0 голосов
/ 05 июня 2019

У меня есть устройство, подключенное к сети, которое использует собственный .MIB-файл с различными «параметрами».Я могу использовать браузер MIB и найти OID для имени объекта, такого как 'powerSystemCompany'.

Но для написания моего кода мне нужна команда get, чтобы увидеть что-то похожее:

powerSystemCompany = CompanyName

Вместо:

SNMPv2-SMI::enterprises.12148.10.2.4 = CompanyName

Насколько я понимаю, мне нужно каким-то образом скомпилировать мой MIB-файл в формат pysnmp mib или JSON и использовать полученный OID для поиска параметра 'powerSystemCompany'.

Но я по-прежнему не могу использовать ни mibdump.py, ни pysnmi, чтобы получить .py или .json MIB.Когда я пытался использовать mibdump.py, я пытался выполнить следующее в моей подсказке Anaconda:

mibdump.py --mib-source='C:\\User\\$user$\\Documents\\pysnmp_Project\\mibs' --destination-format='json'
python mibdump.py --mib-source='C:\\User\\$user$\\Documents\\pysnmp_Project\\mibs' --destination-format='json'

Но первый просто открывает mibdump.py в моем редакторе VScode, а второй выдает ошибку:

'python" can't open file 'mibdump.py': [Errno 2] no such file or directory

Я также попробовал реализацию pysnmi, показанную ниже:

from pysmi.reader import FileReader
from pysmi.searcher import StubSearcher
from pysmi.writer import CallbackWriter
from pysmi.parser import SmiStarParser
from pysmi.codegen import JsonCodeGen
from pysmi.compiler import MibCompiler
# from pysmi import debug

# debug.setLogger(debug.Debug('reader', 'compiler'))

inputMibs = 'SNMPv2-SMI'
srcDirectories = 'C://User//$user$//Documents//pysnmp_Project//mibs'

def printOut(mibName, jsonDoc, cbCtx):
    print('\n\n# MIB module %s' % mibName)
    print(jsonDoc)

# Initialize compiler infrastructure
mibCompiler = MibCompiler(
    SmiStarParser(), JsonCodeGen(), CallbackWriter(printOut)
)

# search for source MIBs here
mibCompiler.addSources(*[FileReader(x) for x in srcDirectories])
# never recompile MIBs with MACROs
mibCompiler.addSearchers(StubSearcher(*JsonCodeGen.baseMibs))

# run recursive MIB compilation
results = mibCompiler.compile(*inputMibs)

print('\n# Results: %s' % ', '.join(['%s:%s' % (x, results[x]) for x in results]))

РЕДАКТИРОВАТЬ: Но, похоже, это застряло в файле mibCompiler.compile (* inputMibs).Использование примера кода с использованием HTTP-запроса заняло всего несколько секунд, в то время как я ждал несколько минут.

Целью этого является автоматизация моего лабораторного оборудования, использующего SNMP.

Iнадеюсь, я дал понять, иначе я бы хотел уточнить.

1 Ответ

0 голосов
/ 06 июня 2019

Я думаю, вы слишком усложняете дело!Простая команда SNMP GET с соответствующей загруженной MIB должна быть достаточной:

from pysnmp.hlapi import *

errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('public'),
           UdpTransportTarget(('your.snmp.enabled.device.address', 161)),
           ContextData(),
           ObjectType(ObjectIdentity('YOUR-COMPANY-MIB', 'powerSystemCompany', 0)).addAsn1MibSource('file:///your/snmp/mibs/location')),
)

if errorIndication:
    print(errorIndication)
elif errorStatus:
    print('%s at %s' % (errorStatus.prettyPrint(),
                        errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
    for varBind in varBinds:
        print(' = '.join([x.prettyPrint() for x in varBind]))

Вам также может понадобиться настроить путь к вашим MIB ASN.1 (не Python), чтобы pysnmpнайдет, загрузит и скомпилирует их.

...