pysnmp命令响应程序 - 处理托管对象值类

时间:2015-09-01 16:51:40

标签: python snmp pysnmp

我正在开发一个基于pysnmp的命令响应器 http://pysnmp.sourceforge.net/examples/current/v3arch/agent/cmdrsp/v2c-custom-scalar-mib-objects.html

我的目的是通过从文本文件中读取snmp数据(随时间更新)来回答我的托管对象的获取消息。

我使用snmpB轮询响应者,绘制轮询对象值进化的图表。

我已成功修改导出我的第一个托管对象的示例,将其添加到mibBuilder.exportSymbols()并从修改后的getvalue方法中的txt文件中检索值。我能够成功地轮询这个对象。它是Counter32类型的对象。

下一步是处理其他对象,其值类型不同于"支持"类,如Integer32,Counter32,OctetString

我需要处理MIB文件中定义的浮点值或其他特定数据格式,因为snmpB期望这些特定格式正确绘制图形。 不幸的是,我无法找到实现这一目标的方法。

希望有人能提供帮助,

标记

编辑1

我需要实现的文本约定是来自RFC6340的FLOAT-TC-MIB中定义的Float32TC:

Float32TC ::= TEXTUAL-CONVENTION
      STATUS       current
      DESCRIPTION  "This type represents a 32-bit (4-octet) IEEE
                    floating-point number in binary interchange format."
      REFERENCE    "IEEE Standard for Floating-Point Arithmetic,
                    Standard 754-2008"
      SYNTAX       OCTET STRING (SIZE(4))

1 个答案:

答案 0 :(得分:0)

SNMP中没有本机浮点类型,您无法向协议添加全新的类型。但是您可以通过TEXTUAL-CONVENTION对现有类型添加其他约束或修改值表示。

要表示浮点数,您有两个选项:

  • 将浮点数编码为八位字节流并将其作为OCTET STREAM类型(RFC6340)传递
  • 使用INTEGER类型以及represent integer as float
  • 的一些TEXTUAL-CONVENTION

无论在MIB中定义了什么值,它们总是基于一些内置的SNMP类型。

您可以使用pysmi工具从ASN.1 MIB自动生成pysnmp MibScalar 类,然后您可以手动添加具有特定系统功能的 MibScalarInstance 类代码因此将pysnmp链接到您的数据源(如文本文件)。