Как добавить новый текстовый файл MIB в pysnmp?

Невозможно получить MIB внешнего устройства.

У меня есть панель питания IP, которой можно управлять с помощью SNMP. Я пытаюсь выключать и включать розетки с помощью скрипта Python. Я сохранил новый mib в d:\mib. Я пытаюсь установить для OID значение 0. Я вызываю функцию setCmd, как показано ниже.

errorIndication, errorStatus, errorIndex, varBinds = next(setCmd(SnmpEngine(),CommunityData('write_public'),UdpTransportTarget(('xx.xx.xx.xx', 161)),ContextData(),ObjectType(ObjectIdentity('1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3',0).addAsn1MibSource('d:/mib'))))

Я получаю ошибки Traceback (последний последний вызов):

  File "<pyshell#11>", line 1, in <module>
    errorIndication, errorStatus, errorIndex, varBinds = next(setCmd(SnmpEngine(),CommunityData('write_public'),UdpTransportTarget(('xx.xxx.xx.x', 161)),ContextData(),ObjectType(ObjectIdentity('SNMPv2-MIB','1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3',0).addAsn1MibSource('d:/mib'))))
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\hlapi\asyncore\sync\cmdgen.py", line 217, in setCmd
    lookupMib=options.get('lookupMib', True)))
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\hlapi\asyncore\cmdgen.py", line 241, in setCmd
    contextData.contextName, vbProcessor.makeVarBinds(snmpEngine, varBinds),
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\hlapi\varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController))
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\smi\rfc1902.py", line 847, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\smi\rfc1902.py", line 368, in resolveWithMib
    ifNotAdded=self.__asn1SourcesOptions.get('ifNotAdded')
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\smi\compiler.py", line 55, in addMibCompiler
    compiler.addSources(*getReadersFromUrls(*kwargs.get('sources') or defaultSources))
  File "C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysmi\reader\url.py", line 68, in getReadersFromUrls
    raise error.PySmiError('Unsupported URL scheme %s' % sourceUrl)
pysmi.error.PySmiError: Unsupported URL scheme d:/mib

person mahemad    schedule 11.05.2019    source источник


Ответы (1)


Прежде всего, MIB не требуются с SNMP, пока вы используете голые OID и значения (это то, что вы, кажется, делаете).

Если вы хотите установить для этого OID значение 0, следующая спецификация управляемого объекта должна создать PDU SNMP SET, который вам может понадобиться:

ObjectType(ObjectIdentity('1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3'), 0)

Если вы хотите использовать MIB, вам следует addAsn1MibSource, но передайте ему действительный URL.

person Ilya Etingof    schedule 11.05.2019
comment
Я изменил на основе вашей рекомендации для errorIndication, errorStatus, errorIndex, varBinds = next(setCmd(SnmpEngine(),CommunityData('write_public'),UdpTransportTarget(('xx.xx.xx.xx', 161)),ContextData() ,ObjectType(ObjectIdentity('1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3'),0))) Все еще возникает ошибка - person mahemad; 12.05.2019
comment
Файл C:\Users\mahemad\AppData\Local\Programs\Python\Python37\lib\site-packages\pysnmp\smi\rfc1902.py, строка 855, в resolveWithMib поднять SmiError('объект MIB %r не OBJECT-TYPE (MIB не загружен?)' % (self.__args[0],)) pysnmp.smi.error.SmiError: объект MIB ObjectIdentity('1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3') не OBJECT-TYPE (MIB не загружен?) - person mahemad; 12.05.2019
comment
Также пробовал errorIndication, errorStatus, errorIndex, varBinds = next(setCmd(SnmpEngine(),CommunityData('write_public'),UdpTransportTarget(('xx.xx.xx.xx', 161)),ContextData(),ObjectType(ObjectIdentity( '1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3'),0).addAsn1MibSource('file:///d:/mib/pdu2_mib.txt'))) та же ошибка - person mahemad; 12.05.2019
comment
пробовал и это errorIndication, errorStatus, errorIndex, varBinds = next(setCmd(SnmpEngine(),CommunityData('write_public'),UdpTransportTarget(('xx.xxx.xx.xx', 161)),ContextData(),ObjectType(ObjectIdentity ('1.3.6.1.4.1.13742.6.4.1.2.1.2.1.3'),0).addAsn1MibSource('file:///d:/mib/'))) та же ошибка - person mahemad; 12.05.2019