Проблемы с установкой PYSNMP в Python 3.4

Python 3.4 - последняя версия PYSNMP (pip --update)

Возникли проблемы с установкой значений ifAlias ​​с использованием библиотеки PYSNMP. Надеюсь, что кто-то сможет пролить свет на то, почему я получаю ошибки во второй функции.

Проверено, что этот OID настраивается с помощью стандартного браузера MIB (iReasoning)

Этот отлично работает. Вам просто нужно вставить строку new sys contact value в функцию, и это хорошо.

def SNMP_SET_SYSCONTACT(syscontact):
            errorIndication, errorStatus, errorIndex, varBinds =  cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('.1.3.6.1.2.1.1.4.0'), syscontact), 
lookupNames=False, 
lookupValues=True)

Этот вообще не работает.

def SNMP_SET_IFALIAS(ifAlias):
                errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
cmdgen.CommunityData('private'),
cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),
lookupValues=False, 
lookupNames=False)

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

Traceback (most recent call last):
  File "<pyshell#632>", line 1, in <module>
    SNMP_SET_IFALIAS('Check this out')
  File "<pyshell#629>", line 2, in SNMP_SET_IFALIAS
    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(cmdgen.CommunityData('private'),cmdgen.UdpTransportTarget(('10.101.0.221', 161)),(cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1'), ifAlias),lookupValues=False, lookupNames=False)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 452, in setCmd
    kwargs.get('contextName', null)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 314, in setCmd
    self.makeVarBinds(varBinds),
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 212, in makeVarBinds
    varVal = varName.getMibNode().getSyntax().clone(varVal)
AttributeError: 'MibIdentifier' object has no attribute ‘getSyntax'

Если потребуется, я с радостью предоставлю дополнительную информацию.


Еще два быстрых вопроса

1) Я попытался загрузить последнюю версию pysnmp 4.2.6.2, но установка блокируется из-за следующей ошибки

Не удалось найти версию, удовлетворяющую требованию pyasn1> = 0.1.8
(из pysnmp) (из версий: 0.0.9a0, 0.0.10a0, 0.0.11a0, 0.0.12a0,
0.0.13a0, 0.0 .13b0, 0.0.13, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7) Соответствующее распределение не найдено для pyasn1> = 0.1.8 (из pysnmp)

2) Могу ли я неправильно понять приведенные выше lookupValues ​​= False и lookupNames = False kwargs? Я подумал, что это должно было позволить мне получить доступ к OID напрямую, без необходимости импортировать MIB. По возможности я хотел избежать любых зависимостей.


person netmanchris    schedule 18.05.2015    source источник


Ответы (1)


Похоже на ошибку в pysnmp - последняя версия CVS может не сработать таким образом.

Однако основная причина этой ошибки заключается в том, что pysnmp не смог найти объект MIB, соответствующий OID 1.3.6.1.2.1.31.1.1.1.18.1. Это может произойти либо потому, что MIB, который определяет, что OID не загружен, либо потому, что рассматриваемый OID не соответствует какому-либо объекту MIB.

Чтобы загрузить IF-MIB, вы можете сделать это явно:

cmdgen.MibVariable('1.3.6.1.2.1.31.1.1.1.18.1').loadMibs('IF-MIB')

или используйте синтаксис MIB :: object.index:

cmdgen.MibVariable('IF-MIB', 'ifAlias', 1)

Вы можете взять IF-MIB.py из пакета pysnmp-mibs, доступного на pypi, или скомпилировать его из ASN.1 MIB с помощью [экспериментального] компилятора pysmi (http://sf.net/projects/pysmi/)

person Ilya Etingof    schedule 19.05.2015