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

pysnmp Command Responder - handling managed objects value classes

我正在使用 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

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

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))

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

要表示浮点数,您有两种选择:

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

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

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