python - 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 的例子。
谢谢
埃德
解决方案
首先它看起来像一个格式错误。试试这个布局:
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
对象)的创建成本很高。因此,只要您打算使用它,就一直保留它是有意义的。