Загрузка локальных пользовательских файлов MIB в pysnmp - TouchDesigner - PullRequest
0 голосов
/ 31 марта 2020

Надеюсь, что у всех все хорошо и безопасно.

Я пытаюсь создать приложение в TouchDesigner, которое получает SNMP-сообщения от различных устройств, в том числе трехполюсного блока распределения питания (PDU). Я скачал соответствующие файлы MIB tripplite и пользуюсь библиотекой pysnmp.

Однако у меня возникли проблемы с загрузкой этих файлов MIB и их работой. Вот что я пробовал:

(1) Добавить эти файлы MIB, используя addAsn1MibSource () с указанием c локального URI:

from pysnmp import *
from pysnmp.hlapi import *

for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(snmpEngineID='80003520300066742b0b9'),
                          UsmUserData('localadmin', '123456789', '123456789',
                       authProtocol=usmHMACSHAAuthProtocol,
                       privProtocol=usmAesCfb128Protocol),
                          UdpTransportTarget(('192.168.10.232', 161)),
                          ContextData(),
                          ObjectType(ObjectIdentity('TRIPPLITE-MIB', 'tripplite', 0).addAsn1MibSource('file:///C:/Users/user/Downloads/tripplite-mib/MIBs/TRIPPLITE.MIB'))):

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

Я получил сообщение об ошибке, сказав:

Traceback (most recent call last):
  File "</project1/SNMP_test1:op('/project1/SNMP_test1').run()>", line 1
td.Error: File "/project1/SNMP_test1", line 13
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\asyncore\sync\cmdgen.py", line 349, in nextCmd
    initialVars = [x[0] for x in vbProcessor.makeVarBinds(snmpEngine, varBinds)]
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController, ignoreErrors=False))
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 853, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 481, in resolveWithMib
    self.__modName, self.__symName
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\builder.py", line 444, in importSymbols
    'No module %s loaded at %s' % (modName, self)
pysnmp.smi.error.MibNotFoundError: No module TRIPPLITE-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x000001B0182E3A90>
Results of run operation resulted in exception. 

(2) Затем я попытался с помощью mibdump.py скомпилировать эти файлы MIB в формат pysnmp:

mibdump.py --mib-source file:///C:/Users/user/Downloads/tripplite-mib/MIBs/TRIPPLITE.MIB --destination-format pysnmp --generate-mib-texts TRIPPLITE-MIB

Но получил сообщение об ошибке: MISSING SOURCE MIBs

(3) Также попытался использовать libsmi Web Interface и преобразовал файлы MIB в файлы .py, а затем поместил файлы .py в C: .... \ Python \ Python37 \ Lib \ site-packages \ pysnmp \ smi \ mibs, а затем загрузите их:

from pysnmp import *
from pysnmp.hlapi import *

for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(snmpEngineID='80003520300066742b0b9'),
                          UsmUserData('localadmin', '123456789', '123456789',
                       authProtocol=usmHMACSHAAuthProtocol,
                       privProtocol=usmAesCfb128Protocol),
                          UdpTransportTarget(('192.168.10.232', 161)),
                          ContextData(),
                          ObjectType(ObjectIdentity('TRIPPLITE-MIB', 'tripplite', 0).loadMibs())):

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

Но получил ошибку, показанную ниже:

Traceback (most recent call last):
  File "</project1/SNMP_test1:op('/project1/SNMP_test1').run()>", line 1
td.Error: File "/project1/SNMP_test1", line 13
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\asyncore\sync\cmdgen.py", line 349, in nextCmd
    initialVars = [x[0] for x in vbProcessor.makeVarBinds(snmpEngine, varBinds)]
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController, ignoreErrors=False))
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 853, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 481, in resolveWithMib
    self.__modName, self.__symName
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\builder.py", line 444, in importSymbols
    'No module %s loaded at %s' % (modName, self)
pysnmp.smi.error.MibNotFoundError: No module TRIPPLITE-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x000001B0182E3400>
Results of run operation resulted in exception.

(4) Наконец я обнаружил, что для MIB TrippLite они на самом деле хранятся также в базе данных snmplab, поэтому я попытался загрузить их оттуда:

from pysnmp import *
from pysnmp.hlapi import *


for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(snmpEngineID='80003520300066742b0b9'),
                          UsmUserData('localadmin', '123456789', '123456789',
                       authProtocol=usmHMACSHAAuthProtocol,
                       privProtocol=usmAesCfb128Protocol),
                          UdpTransportTarget(('192.168.10.232', 161)),
                          ContextData(),
                          ObjectType(ObjectIdentity('TRIPPLITE-MIB', 'tripplite', 0).addAsn1MibSource('http://mibs.snmplabs.com/asn1/').loadMibs())):

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

Получил то же сообщение об ошибке, что и метод (3):

Traceback (most recent call last):
  File "</project1/SNMP_test1:op('/project1/SNMP_test1').run()>", line 1
td.Error: File "/project1/SNMP_test1", line 14
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\asyncore\sync\cmdgen.py", line 349, in nextCmd
    initialVars = [x[0] for x in vbProcessor.makeVarBinds(snmpEngine, varBinds)]
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\hlapi\varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController, ignoreErrors=False))
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 853, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\rfc1902.py", line 481, in resolveWithMib
    self.__modName, self.__symName
  File "C:/Users/mitch/AppData/Local/Programs/Python/Python37/Lib/site-packages\pysnmp\smi\builder.py", line 444, in importSymbols
    'No module %s loaded at %s' % (modName, self)
pysnmp.smi.error.MibNotFoundError: No module TRIPPLITE-MIB loaded at <pysnmp.smi.builder.MibBuilder object at 0x000001B01428BB38>
Results of run operation resulted in exception.

Итак, я достиг точки, где я Я не уверен, где go отсюда. Какие-либо предложения?? Большое спасибо!

...