只能pysnmp return octectstring值

Can pysnmp return octectstring values only

我正在编写一个小脚本来使用 PySnmp 获取 SNMP 陷阱。

我可以得到oid = value pairs,但是值太长了,最后的信息很少。我如何才能 仅访问值末尾的 octectstring 。除了字符串操作之外还有其他方法吗?请评论。

OID =_BindValue(componentType=NamedTypes(NamedType('value', ObjectSyntax------------------------------------------------(DELETED)-----------------(None, OctetString(b'New Alarm'))))

是否可以从另一个 SNMP 客户端获得如下输出:

.iso.org.dod.internet.private.enterprises.xxxx.1.1.2.2.14: CM_DAS Alarm Traps:

编辑 - 代码是:

**for oid, val in varBinds:
      print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
      target.write(str(val))**

在屏幕上,它显示短,但在文件上,val 很长。

target.write( str(val[0][1][2])) 的使用并非对所有人都有效(程序因错误而停止),但第一个 oid(时间刻度)就可以了。

我如何从 tail 中获取值,因为所有 oid 的实际值都在那里。

谢谢。

SNMP 以称为变量绑定的 OID 值对序列的形式传输信息:

variable_bindings = [[oid1, value1], [oid2, value2], ...]

从 SNMP PDU 获得变量绑定序列后,例如,要访问值 1,您可以这样做:

variable_binding1 = variable_bindings[0]
value1 = variable_binding1[1]

要访问 value1 的尾部(假设它是一个字符串),您可以简单地订阅它:

tail_of_value1 = value1[-10:]

我想在你的问题中你操作的是单个 variable_binding,而不是它们的序列。

如果您希望 pysnmp 将 oid-value 对转换为人类友好的表示形式(MIB 对象名称、MIB 对象值),您必须将原始 OID-value 对传递给 ObjectType class 和 运行 它通过 MIB 解析器,如文档中所述。

谢谢... 以下代码的工作方式与我正在寻找的一样。

            if str(oid)=="1.3.6.1.2.1.1.3.0":
                target.write(" = str(val[0][1]['timeticks-value']) = " +str(val[0][1]['timeticks-value'])) # time ticks

            else:
                target.write("= val[0][0]['string-value']= " + str(val[0][0]['string-value']))