Надеюсь, что у всех все хорошо и безопасно.
Я пытаюсь создать приложение в 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 отсюда. Какие-либо предложения?? Большое спасибо!