如何在snmp4j中实现二进制(b)变量

问题描述 投票:1回答:1

我正在尝试将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中获取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。

java snmp snmp4j
1个回答
0
投票

使用xC0(11000000)和x80(10000000)而不是1和0的值重复该设置。在MIB .txt文件中,它表明它是已设置的MSB。这不是MSB,总是1.不知何故snmpset理解区别并知道将0和1解释为x80和xC0,我猜测.mpds或.cmi文件中有一些东西,snmpset必须理解。假设我可以从snmpRequest.java剪切和粘贴是一个错误。还在学习snmp。

© www.soinside.com 2019 - 2024. All rights reserved.