我正在尝试将snmpset命令移植到snmp4j,但是得到的错误代码5通用错误告诉我的内容不多。变量类型为b(二进制)。我在所有示例的结尾处查看了SnmpRequest.java源,发现b参数按如下所示转换为OctetString:
case 'b':
variable = OctetString.fromString(value, ' ', 2);
当我toString变量时,我分别获得以下值“ 0”和“ 1”:00、01
当我从命令行设置OID时,它回显80和40。
jgaer@ljgaer2_~: snmpset -t 60 192.168.60.105 cwNetStgSvrWriteEnable.0 b 0
CW-NET-STG-SVR-MIB::cwNetStgSvrWriteEnable.0 = BITS: 80 hwWriteEn(0)
jgaer@ljgaer2_~: snmpset -t 60 192.168.60.105 cwNetStgSvrWriteEnable.0 b 1
CW-NET-STG-SVR-MIB::cwNetStgSvrWriteEnable.0 = BITS: 40 fsWriteEn(1)
如果我在snmp4j和toString的OID上获得响应响应事件中的variableBindings,则分别将OID设置为0和1时会看到以下内容:
[1.3.6.1.4.1.27675.20.1.6.0 = 80]
[1.3.6.1.4.1.27675.20.1.6.0 = c0]
当我运行以下代码段(值为“ 1”)时,出现通用错误。
Object result = null;
PDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.27675.20.1.6.0"), OctetString.fromString("1", ' ', 2)));
pdu.setType(PDU.SET);
ResponseEvent event = snmp.send(pdu, userTarget);
if (event != null) {
pdu = event.getResponse();
if (pdu.getErrorStatus() == PDU.noError) {
LOG.debug("SNMPv3 SET Successful for " + oid + " ObjectType " + pdu.get(0).getVariable().getClass() + " value " +
pdu.get(0).getVariable() + ":" + pdu.getVariableBindings());
result = pdu.get(0).getVariable();
} else {
LOG.debug("SNMPv3 SET Unsuccessful. Error Code " + pdu.getErrorStatus() + " " + pdu.getErrorStatusText());
}
} else {
LOG.debug("SNMP send unsuccessful.");
}
return result;
output
SNMPv3 SET Unsuccessful. Error Code 5 General variable binding error
如果我使用值“ 0”运行它,它将运行而不会出错,并且该对象在远程代理上得到更新,但是返回的变量值为00而不是80。
[1.3.6.1.4.1.27675.20.1.6.0 = 00]
我对返回的80和C0值感到完全困惑。我还没有弄清楚如何为二进制文件1创建OctestString。
答案 0 :(得分:0)
使用xC0(11000000)和x80(10000000)的值而不是1和0重复该集合是可行的。在MIB .txt文件中,它指示已设置MSB。多数民众赞成在MSB始终不是1。某种程度上,snmpset理解了区别,并且知道将0和1解释为x80和xC0,我猜想snmpset的.cds或.cmi文件中有些东西必须理解。假设我可以从snmpRequest.java剪切并粘贴是一个错误。仍在学习snmp。