pysnmp v3 ПОЛУЧИТЬ

В настоящее время у меня есть сценарий, который опрашивает несколько oid на нескольких устройствах с помощью PySNMP. Он считывает список хостов из файла, и для некоторых хостов необходимо опросить 3 или 4 идентификатора, на данный момент он делает это последовательно, поэтому, чтобы сделать его более эффективным, я хочу выполнить getbulk, поэтому я опрашиваю только каждый хост один раз.

Я провел несколько поисков по этому поводу и могу найти множество примеров с использованием pysnmp и snmp v2, но я не могу найти пример с snmpv3. Я пробовал приведенный ниже тестовый сценарий, но он вызывает ошибку, так что может кто-нибудь взглянуть и сообщить мне, что я делаю не так, пожалуйста? Мой тестовый сценарий выглядит так:

from pysnmp.entity.rfc3413.oneliner import cmdgen
host='10.0.0.1'
incount = '.1.3.6.1.2.1.31.1.1.1.6.16'
outcount ='.1.3.6.1.2.1.31.1.1.1.10.16'

errorIndication, errorStatus, errorIndex,
varBindTable = cmdgen.CommandGenerator().bulkCmd(
                UsmUserData('snmp_user', 'password', 'password',
                          authProtocol=usmHMACSHAAuthProtocol,
                          privProtocol=usmAesCfb128Protocol),
                UdpTransportTarget((host, 161)),         
            0,    
            25,
            (incount),
            (outcount),
        )

if errorIndication:
   print errorIndication
else:
    if errorStatus:
        print '%s at %s\n' % (
            errorStatus.prettyPrint(),
            errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
            )
    else:
        for varBindTableRow in varBindTable:
            for name, val in varBindTableRow:
                print '%s = %s' % (name.prettyPrint(), val.prettyPrint())

и ошибка:

Traceback (most recent call last):
  File "./multiget.py", line 7, in <module>
    errorIndication, errorStatus, errorIndex, 
NameError: name 'errorIndication' is not defined

Это в значительной степени падает на первом препятствии, поэтому я, очевидно, ошибся синтаксисом, но, как я уже сказал, я не смог найти пример этого с snmpv3.

Спасибо

Ed


person user10777941    schedule 11.12.2018    source источник


Ответы (1)


Во-первых, это похоже на ошибку форматирования. Попробуйте этот макет:

from pysnmp.entity.rfc3413.oneliner import cmdgen

host='10.0.0.1'
incount = '.1.3.6.1.2.1.31.1.1.1.6.16'
outcount ='.1.3.6.1.2.1.31.1.1.1.10.16'

cmdGen = cmdgen.CommandGenerator()

(errorIndication, errorStatus, errorIndex,
     varBindTable) = cmdGen.bulkCmd(
                UsmUserData('snmp_user', 'password', 'password',
                            authProtocol=usmHMACSHAAuthProtocol,
                            privProtocol=usmAesCfb128Protocol),
                UdpTransportTarget((host, 161)),         
            0,    
            25,
            incount,
            outcount,
    )
...

Кроме того, создание CommandGenerator (т. Е. Нижележащего объекта SnmpEngine) требует больших затрат. Поэтому имеет смысл держать его под рукой до тех пор, пока вы планируете его использовать.

person Ilya Etingof    schedule 12.12.2018