0

根据文档,setCmdvarBinds 引用是一系列托管对象。但是,我尝试传递一个列表[(oid0, value0), (oid1, value1)]、一个元组((oid0, value0), (oid1, value1))或一个集合set([(oid0, value0), (oid1, value1)]),但它们都失败了,并出现错误“太多的值无法解包”。我需要能够发送带有多个 varbind 的单个集合请求。我可以成功发送每个托管对象,例如 (oid0, value0) 作为单独的setCmd. 任何想法我怎么能做到这一点?

4

2 回答 2

1

试试星号

abc = ((oid0, value0), (oid1, value1), (oid2, value2))
errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().setCmd(
    self.authData, cmdgen.UdpTransportTarget((host_addr, 161)), *abc)
于 2013-02-01T15:51:29.220 回答
1

示例页面所示,将可变数量的 (oid, value) 元组传递给 setCmd() 是一种向请求消息添加多个 var-bind 的方法。

以下代码将使用三个 var-bind 构建和发送 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'))
)
于 2012-11-13T07:14:46.127 回答