首页 > 解决方案 > pysnmp v3 获取批量

问题描述

我目前有一个脚本,它使用 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 的例子。

谢谢

埃德

标签: pythonpysnmp

解决方案


首先它看起来像一个格式错误。试试这个布局:

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对象)的创建成本很高。因此,只要您打算使用它,就一直保留它是有意义的。


推荐阅读