setCmd的托管对象上的pySNMP序列

时间:2012-11-12 20:17:47

标签: python snmp pysnmp

根据文档,setCmd varBinds引用是一系列托管对象。但是,我尝试传递列表[(oid0, value0), (oid1, value1)]或元组((oid0, value0), (oid1, value1))或集合set([(oid0, value0), (oid1, value1)]),并且所有这些都失败并显示错误“要解压的值太多”。我需要能够使用多个varbind发送单个set请求。我可以成功地将每个托管对象(例如,(oid0,value0))作为单独的setCmd发送。我有什么想法可以做到这一点吗?

2 个答案:

答案 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)