自定义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
相关产品推荐
相关产品推荐

