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

2024-04-26 17:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的目的是通过从文本文件中读取snmp数据(随着时间的推移而更新)来响应托管对象的get消息。在

我使用snmpB轮询响应程序,绘制被轮询对象值演变的图表。在

我成功地修改了导出第一个托管对象的示例,并使用mibBuilder.exportSymbols()并在修改后的getvalue方法中从txt文件中检索值。我能成功地调查这个对象。它是一个Counter32类型的对象。在

下一步是使用不同于Integer32、Counter32、OctetString等“受支持”类的值类型来处理其他对象

我需要处理MIB文件中定义的浮点值或其他特定的数据格式,因为snmpB需要这些特定的格式来正确地绘制图形。 不幸的是,我想不出办法来做这件事。在

希望有人能帮忙

马克

编辑1

我需要实现的文本约定是在FLOAT-TC-MIB中从RFC6340定义的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))

Tags: 文件对象命令程序类型定义绘制current
1条回答
网友
1楼 · 发布于 2024-04-26 17:21:47

SNMP中没有本机浮点类型,您不能向协议中添加全新的类型。但是,您可以对现有类型设置附加约束,或者通过文本约定修改值表示。

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

  • 将浮点数编码到八位字节流中,并将其作为八位字节流类型(RFC6340)进行传递
  • 使用整数类型和一些文本约定来represent integer as float

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

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

相关问题 更多 >