我正在做一个小脚本来获取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的实际值。
感谢。
答案 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)