根据文档,setCmd
varBinds引用是一系列托管对象。但是,我尝试传递列表[(oid0, value0), (oid1, value1)]
或元组((oid0, value0), (oid1, value1))
或集合set([(oid0, value0), (oid1, value1)])
,并且所有这些都失败并显示错误“要解压的值太多”。我需要能够使用多个varbind发送单个set请求。我可以成功地将每个托管对象(例如,(oid0,value0))作为单独的setCmd
发送。我有什么想法可以做到这一点吗?
答案 0 :(得分:1)
如图on the examples page所示,将可变数量的(oid,value)元组传递给setCmd()是一种向请求消息添加多个var-binds的方法。
以下代码将构建并发送带有三个var-binds的SNMP SET消息:
cmdGen.setCmd(
cmdgen.CommunityData('public'),
cmdgen.UdpTransportTarget(('localhost', 161)),
('1.3.6.1.2.1.1.2.0', rfc1902.ObjectName('1.3.6.1.4.1.20408.1.1')),
('1.3.6.1.2.1.1.2.0', '1.3.6.1.4.1.20408.1.1'),
('1.3.6.1.2.1.1.5.0', rfc1902.OctetString('new system name'))
)
答案 1 :(得分:1)
尝试星号
abc = ((oid0, value0), (oid1, value1), (oid2, value2))
errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().setCmd(
self.authData, cmdgen.UdpTransportTarget((host_addr, 161)), *abc)