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

使用snmp-native进行SNMP操作时如何解决oid缺失错误?

问题解决与SNMP操作实现

1. 修复"Missing required option oid."错误

报错核心原因是snmp-native库要求OID必须是数字数组格式,而非字符串。修改你的Set操作代码,将字符串OID转为数字数组即可解决:

const snmp = require('snmp-native');

const options = {
     host: "192.168.2.80",
     community: "public",
     port: 161,
     version: snmp.Version2c 
};

const session = new snmp.Session(options);

const oidsAndValues = [
    { oid: [1, 3, 4, 6, 7], value: 23 }, // 字符串OID转为数字数组
    { oid: [1, 3, 4, 6, 8], value: 25 }  // 字符串OID转为数字数组
];

oidsAndValues.forEach(item => {
    session.set([{
        oid: item.oid,
        type: snmp.DataTypes.Integer,
        value: item.value
    }], (error, varbinds) => {
        if (error) {
            console.error('Set操作错误:', error);
        } else {
            console.log('Set操作结果:', varbinds);
        }
    });
});

2. 实现Next、Walk、GetNext操作

GetNext操作

获取指定OID的下一个节点值:

// 示例:获取1.3.4.6.7的下一个OID对应值
const targetOid = [1, 3, 4, 6, 7];
session.getNext(targetOid, (error, varbinds) => {
    if (error) {
        console.error('GetNext操作错误:', error);
    } else {
        varbinds.forEach(varbind => {
            console.log(`OID: ${varbind.oid.join('.')}, 值: ${varbind.value}, 类型: ${snmp.DataTypes[varbind.type]}`);
        });
    }
});

Walk操作

遍历指定OID下的所有子节点:

// 示例:遍历1.3.4.6节点下的所有子节点
const rootOid = [1, 3, 4, 6];
session.walk(rootOid, (error, varbinds) => {
    if (error) {
        console.error('Walk操作错误:', error);
    } else {
        varbinds.forEach(varbind => {
            console.log(`OID: ${varbind.oid.join('.')}, 值: ${varbind.value}, 类型: ${snmp.DataTypes[varbind.type]}`);
        });
    }
});

Next操作(GetNext别名)

部分版本中next是getNext的方法别名,用法完全一致:

session.next(targetOid, (error, varbinds) => {
    if (error) {
        console.error('Next操作错误:', error);
    } else {
        varbinds.forEach(varbind => {
            console.log(`OID: ${varbind.oid.join('.')}, 值: ${varbind.value}, 类型: ${snmp.DataTypes[varbind.type]}`);
        });
    }
});

注意事项

  • 确保目标SNMP设备开启对应权限(读写权限需与配置的community字符串匹配)
  • OID必须严格对应设备支持的节点,否则会返回"noSuchName"错误
  • 批量操作时控制并发量,避免触发设备的SNMP请求频率限制

内容的提问来源于stack exchange,提问作者Ömer Faruk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:35:25