pysnmp不处理大字符串返回

2024-05-17 18:01:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用bulkget commandgenerator遍历sysORTable,使用以下基于示例的代码:

cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.bulkCmd(
    cmdgen.UsmUserData(user, 
                    authKey=authKey, 
                    privKey=privKey, 
                    authProtocol=authProto, 
                    privProtocol=privProto, 
                    securityEngineId=None
            ),
    cmdgen.UdpTransportTarget((sHost, 161)),
    0 , 25, 
    *[cmdgen.MibVariable(oid) for oid in sOID] )

但是,从代理返回的结果超过了MIB查找施加的255个字符的限制。我找到了解决这个问题的两个方法:

  1. 更改pysnmp/smi/mibs/SNMPv2中DisplayString的最大长度的值-热带气旋:subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(0, 512)
  2. 使用lookupMib=False禁用cmdgen中的MIB查找

然而,这两个修复在允许脚本完成的同时,似乎截断了输出。例如:

[ObjectType(ObjectIdentity(<ObjectName value object at 0x7f1c04686cd0 tagSet <TagSet object at 0x7f1c0c88dad0 tags 0:0:6> payload [1.3.6.1.2.1.1.9.1.3.106]>), <DisplayString value object at 0x7f1c04623150 subtypeSpec <ConstraintsIntersection object at 0x7f1c04a64490 consts <ValueSizeConstraint object at 0x7f1c0756c510 consts 0, 65535>, <ValueSizeConstraint object at 0x7f1c04a64450 consts 0, 512>> tagSet <TagSet object at 0x7f1c0c88d5d0 tags 0:0:4> encoding iso-8859-1 payload [Agent capabiliti...B
File name: sys]>)]

注意省略号和换行符。你知道吗

两个问题:

  1. 如何修复输出的截断?你知道吗
  2. 这封邮件是什么格式的?我该如何解包?(与带有键和值的标准get输出完全不同)

Tags: objectvalueatmibauthkeyprivkeyoidconsts
1条回答
网友
1楼 · 发布于 2024-05-17 18:01:52

首先,这看起来像是SNMP代理中的一个bug—它们不应该溢出字符串。从这个意义上说,我们做得很好。;—)

回答您的问题:

  1. 省略号只出现在repr()中,如果对值执行str.prettyPrint(),则不会发生省略号
  2. 本质上,它是一个sequence of tuples。每个元组是(名称、值)。所以要打印出来你可以这样做:

地址:

for varBind in varBinds:
    print(' = '.join([x.prettyPrint() for x in varBind]))

示例可以在here中找到。你知道吗

相关问题 更多 >