如何通过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
相关产品推荐
相关产品推荐

