pysnmp只能返回octectstring值

时间:2016-10-19 18:15:40

标签: pysnmp

我正在做一个小脚本来获取PySnmp的SNMP陷阱。

我能够获得oid = value pairs,但是值太长,最后只有一小部分信息。我怎样才能只访问值的末尾的octectstring 。除了字符串操作之外还有其他方法吗?请评论。

  

OID = _BindValue(componentType = NamedTypes(NamedType(' value',ObjectSyntax -------------------- ----------------------------(删除)-----------------(无,OctetString(b' 新警报'))))

是否可以获得如下所示的输出,如另一个SNMP客户端所提供的那样:

  

.iso.org.dod.internet.private.enterprises.xxxx.1.1.2.2.14:CM_DAS警报陷阱:

编辑 - 代码为:

**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的实际值。

感谢。

2 个答案:

答案 0 :(得分:0)

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

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

例如,一旦从SNMP PDU获得变量绑定序列,就可以访问value1:

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

要访问value1的尾部(假设它是一个字符串),您只需订阅它:

tail_of_value1 = value1[-10:]

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

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

答案 1 :(得分:0)

...谢谢 以下代码就像我正在寻找的somww。

f $ a = f a
f . g = \x -> f (g x)