pysnmp v3 GETBULK

时间:2018-12-11 22:18:47

标签: python pysnmp

我目前有一个脚本,该脚本使用PySNMP轮询多个设备上的多个oid。它从文件中读取主机列表,对于某些主机,需要按顺序轮询3或4个oid,因此要使其效率更高,我想做个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

1 个答案:

答案 0 :(得分:0)

首先看起来像是格式错误。试试这种布局:

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对象)的创建成本很高。因此,只要计划使用一个,就可以保留一个。