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

自定义MIB可被snmptranslate识别但snmpget/snmpwalk无法调用

解决net-snmp自定义标量MIB无法被snmpwalk/snmpget获取的问题

核心原因

snmptranslate返回的是标量对象的OID,而SNMP中访问标量必须使用实例OID(在对象OID后追加.0),直接用对象OID访问会提示实例不存在。此外,net-snmp代理需要明确配置如何返回标量对应的值。

解决步骤

1. 使用正确的实例OID访问

假设你的MIB中标量对象helloWorldString的OID是1.3.6.1.4.1.12345.1.1,访问时必须追加.0,示例命令:

snmpget -v2c -c public localhost .1.3.6.1.4.1.12345.1.1.0
# 或通过MIB名称直接访问
snmpget -v2c -c public localhost HELLO-WORLD-MIB::helloWorldString.0

2. 配置snmpd代理绑定标量值

修改/etc/snmp/snmpd.conf配置文件,添加以下内容:

  • 确保自定义MIB被加载:
    mibs +HELLO-WORLD-MIB
    
  • 用pass命令将标量绑定到自定义脚本(灵活适配不同值返回需求):
    pass .1.3.6.1.4.1.12345.1.1 /usr/local/bin/hello-world-scalar.sh
    

3. 编写处理请求的脚本

创建/usr/local/bin/hello-world-scalar.sh脚本,内容如下:

#!/bin/bash
case "$1" in
    get)
        # 返回数据类型和对应值,此处以字符串类型为例
        echo "STRING"
        echo "Hello from my custom MIB!"
        ;;
    *)
        exit 0
        ;;
esac

给脚本添加执行权限:

chmod +x /usr/local/bin/hello-world-scalar.sh

4. 重启snmpd服务并验证

# systemd系统
systemctl restart snmpd
# SysVinit系统
service snmpd restart

再次执行snmpget/snmpwalk命令,即可获取到自定义标量的值。

额外注意事项

  • 自定义MIB文件需放在net-snmp默认MIB路径(如/usr/share/snmp/mibs/),或通过MIBDIRS环境变量指定路径
  • 用snmpd -C -c /etc/snmp/snmpd.conf -v检查配置文件语法是否正确
  • 确保snmpd进程有权限执行你的自定义脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:51:08