You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pysnmp获取OID的数据类型(如COUNTER、INTEGER等)

使用pysnmp通过OID名称获取对应数据类型

要实现传入OID名称并获取对应SNMP数据类型,可以借助pysnmp加载目标MIB文件,解析OID节点的元数据信息。以下是具体实现步骤:

1. 安装依赖

首先确保安装pysnmp及相关MIB处理包:

pip install pysnmp pysmi

2. 核心实现代码

以下代码以包含ssCpuRawSystem、ssCpuRawUser、ssErrorName的UCD-SNMP-MIB为例,实现OID名称到数据类型的查询:

from pysnmp.smi import builder, view, compiler
from pysnmp.proto.rfc1902 import ObjectIdentity

# 初始化MIB构建器与视图控制器
mib_builder = builder.MibBuilder()
mib_view = view.MibViewController(mib_builder)

# 编译加载目标MIB,可替换为你的MIB路径
compiler.addMibCompiler(mib_builder, sources=['/usr/share/snmp/mibs'])
mib_builder.loadModules('UCD-SNMP-MIB')

def get_oid_datatype(oid_name):
    try:
        # 解析OID名称对应的MIB节点
        oid_identity = ObjectIdentity(oid_name).resolveWithMib(mib_view)
        # 获取节点语法类(即数据类型)的名称
        mib_node = mib_builder.importSymbols(oid_identity.getMibModule(), oid_identity.getMibSymbol())[0]
        return mib_node.syntax.__class__.__name__
    except Exception as e:
        return f"查询失败: {str(e)}"

# 测试示例
print(get_oid_datatype('ssCpuRawSystem'))  # 输出: Integer32
print(get_oid_datatype('ssCpuRawUser'))    # 输出: Counter32
print(get_oid_datatype('ssErrorName'))     # 输出: DisplayString

关键说明

  • MIB路径配置:如果默认系统MIB路径找不到目标文件,可手动替换sources参数中的路径为你的MIB存储目录。
  • 数据类型对应关系:pysnmp中SNMP标准数据类型对应pysnmp.proto.rfc1902下的类,类名与SNMP规范中的数据类型名称完全一致。
  • 异常处理:若传入的OID名称无效或MIB未正确加载,函数会返回具体错误信息。

内容的提问来源于stack exchange,提问作者Prashant Vanse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:04:52