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

如何在Python中将变量与SNMP OID关联并构建映射表?

用PySNMP实现Python变量与SNMP OID的映射

PySNMP确实支持将Python变量绑定到自定义OID,核心是通过自定义MIB instrumentation函数处理SNMP请求,把变量值返回给客户端。以下是具体实现方案:

核心思路

注册SNMP请求处理函数,当客户端请求指定OID时,直接返回对应Python变量的当前值。建议使用私有企业号段1.3.6.1.4.1.x作为自定义OID前缀,避免与标准MIB冲突。

完整代码示例

from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdrsp, context
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.smi import instrum, builder

# 定义要映射的Python变量
py_var1 = 123          # 整数类型
py_var2 = "Hello SNMP" # 字符串类型
py_var3 = False        # 布尔类型

# 初始化SNMP引擎与基础配置
snmp_engine = engine.SnmpEngine()

# 配置UDP监听(SNMP默认端口161)
config.addTransport(
    snmp_engine,
    udp.domainName,
    udp.UdpTransport().openServerMode(('0.0.0.0', 161))
)

# 添加SNMPv2c社区认证(社区名public)
config.addV1System(snmp_engine, 'my-snmp-area', 'public')

# 加载标准MIB并创建MIB控制器
mib_builder = builder.MibBuilder()
mib_builder.loadModules('SNMPv2-MIB')
mib_instrum = instrum.MibInstrumController(mib_builder)
snmp_context = context.SnmpContext(snmp_engine, mibInstrum=mib_instrum)

# 绑定OID与Python变量的处理函数
def handle_get_request(snmp_engine, context_name, var_binds, ac_info):
    # 遍历客户端请求的OID列表,匹配后返回对应变量值
    for oid, val in var_binds:
        # OID1 -> py_var1(私有企业号12345下的节点)
        if oid == (1, 3, 6, 1, 4, 1, 12345, 1, 1):
            val.setSyntax(val.getSyntax().clone(py_var1))
        # OID2 -> py_var2
        elif oid == (1, 3, 6, 1, 4, 1, 12345, 1, 2):
            val.setSyntax(val.getSyntax().clone(py_var2))
        # OID3 -> py_var3
        elif oid == (1, 3, 6, 1, 4, 1, 12345, 1, 3):
            val.setSyntax(val.getSyntax().clone(py_var3))
    return var_binds

# 注册GET请求处理函数
cmdrsp.GetCommandResponder(snmp_engine, snmp_context, handle_get_request)

# 启动SNMP代理
snmp_engine.transportDispatcher.jobStarted(1)
try:
    snmp_engine.transportDispatcher.runDispatcher()
except KeyboardInterrupt:
    snmp_engine.transportDispatcher.closeDispatcher()

关键说明

  1. OID规范:1.3.6.1.4.1.x是IANA分配的私有企业号段,x可替换为你的企业编号(示例用12345)。
  2. 类型兼容:确保Python变量类型与SNMP数据类型匹配(如整数对应SNMP Integer32,字符串对应OctetString)。
  3. SET扩展:如果需要允许客户端修改Python变量,可新增handle_set_request函数并注册cmdrsp.SetCommandResponder,在函数内更新变量值即可。

测试方法

安装PySNMP后运行代码,用SNMP工具验证:

# 遍历自定义OID节点
snmpwalk -v2c -c public localhost 1.3.6.1.4.1.12345.1
# 获取单个OID值
snmpget -v2c -c public localhost 1.3.6.1.4.1.12345.1.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:36