使用#SNMP Set命令设置OID值为1或0时遇‘error in response’异常求助
问题原因与修复方案
常见问题点及解决办法
- 数据类型不匹配:你用
OctetString传递"1",但多数控制类OID要求整数类型(比如Integer32),Agent收到类型不匹配的请求会返回错误。把OctetString("1")替换为Integer32(1)即可。 - 社区字符串权限不足:"public"通常是只读社区串,Set操作需要设备配置的可写社区串(比如常见的"private",具体以你的设备配置为准),只读串执行Set必然失败。
- OID不可写或路径错误:确认目标OID
1.3.6.1.4.1.1206.4.2.1.6.3.1.2.1是设备支持的可写OID,可以先用Get操作验证OID是否存在且可读,再尝试Set。 - SNMPv1的Set限制:v1版本要求变量绑定的类型、值必须完全符合Agent的MIB定义,任何不匹配都会触发错误响应。
修改后的示例代码
var result = Messenger.Set( VersionCode.V1, new IPEndPoint(IPAddress.Parse(IPAddress), SNMPPortNo), new OctetString("private"), // 替换为设备的可写社区串 new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.4.1.1206.4.2.1.6.3.1.2.1"), new Integer32(1)) }, // 使用Integer32类型传递数值 60000);
额外排查建议
- 用SNMP工具(比如snmpwalk/snmpset)先测试Set操作,确认设备端可以正常响应,再排查代码问题。
- 捕获异常的详细信息(比如错误状态码),#SNMP的异常通常会包含更具体的错误原因,有助于定位问题。
内容的提问来源于stack exchange,提问作者Nick Albert
相关产品推荐
相关产品推荐

