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