Java 如何在snmp4j中实现二进制(b)变量
我试图将一个snmpset命令移植到snmp4j,但得到一个错误代码5,这并不能告诉我多少。变量类型为b(二进制)。我查看了SnmpRequest.java源代码的所有示例的末尾,发现b参数被转换为OctetString,如下所示:Java 如何在snmp4j中实现二进制(b)变量,java,snmp,snmp4j,Java,Snmp,Snmp4j,我试图将一个snmpset命令移植到snmp4j,但得到一个错误代码5,这并不能告诉我多少。变量类型为b(二进制)。我查看了SnmpRequest.java源代码的所有示例的末尾,发现b参数被转换为OctetString,如下所示: case 'b': variable = OctetString.fromString(value, ' ', 2); 当我字符串化变量时,我分别得到“0”和“1”的值:00,01 当我从命令行设置OID时,它会回显80和40 jgaer@ljgaer
case 'b':
variable = OctetString.fromString(value, ' ', 2);
当我字符串化变量时,我分别得到“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中获取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创建八进制字符串。使用xC0(11000000)和x80(10000000)的值而不是1和0来重复设置。在MIB.txt文件中,它指示设置的是MSB。这不完全是MSB,它总是1。不知何故,snmpset理解这种区别,并且知道如何将0和1解释为x80和xC0,我猜在.cds或.cmi文件中,snmpset必须理解某些东西。假设我可以从snmpRequest.java中剪切和粘贴是一个错误。仍在学习snmp。使用xC0(11000000)和x80(10000000)的值而不是1和0重复设置有效。在MIB.txt文件中,它指示设置的是MSB。这不完全是MSB,它总是1。不知何故,snmpset理解这种区别,并且知道如何将0和1解释为x80和xC0,我猜在.cds或.cmi文件中,snmpset必须理解某些东西。假设我可以从snmpRequest.java中剪切和粘贴是一个错误。仍在学习snmp