SnmpSharpNet批量Get请求含单个无效OID返回空是否正常?
问题解答
现象是否正常?
该现象完全符合SNMPv1的标准规范,属于正常情况。
SNMPv1协议明确规定:当Get请求携带的OID列表中存在任意一个无效OID(设备不支持、无返回值等),设备会直接返回全局错误响应,不会携带其余有效OID的返回结果,因此SnmpSharpNet的SimpleSnmp.Get方法会直接返回Nothing。
是否需要逐个OID单独查询?
不需要直接采用逐个查询的方案,可按目标设备的支持情况选择更优的处理方式:
- 若目标设备支持SNMPv2c及以上版本:
直接修改代码中的SNMP版本参数即可,SNMPv2c引入了部分响应机制,无效OID会被单独标记错误,其余有效OID的结果会正常返回。仅需修改一行代码:
把原代码中的
修改为result = snmp.Get(SnmpVersion.Ver1, requestOid)
即可一次性拿到所有有效OID的返回结果,不需要拆分请求。result = snmp.Get(SnmpVersion.Ver2c, requestOid) - 若目标设备仅支持SNMPv1:
可按需选择方案:- OID数量少的场景:直接逐个OID发起查询,逻辑最简单
- OID数量多的场景:采用二分法批量校验,比如先批量查询所有OID,返回
Nothing就把OID列表拆成两组分别查询,递归跳过无效OID,相比逐个查询能大幅减少请求次数。
内容的提问来源于stack exchange,提问作者Dylan666
相关产品推荐
相关产品推荐

