Как реализовать бинарные (б) переменные в snmp4j - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь перенести команду 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) 

Если я получаю OID в snmp4jи toString 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.Я не понял, как создать OctestString для двоичного файла 1.

1 Ответ

0 голосов
/ 09 апреля 2019

Повтор набора с использованием значений xC0 (11000000) и x80 (10000000) вместо 1 и 0 сработало. В MIB-файле .txt указано, что установлен MSB. Это не совсем MSB, то есть всегда 1. Каким-то образом snmpset понимает различие и знает, как интерпретировать 0 и 1 как x80 и xC0, я предполагаю, что в файле .cds или .cmi есть что-то, что snmpset должен понимать. Предполагая, что я мог просто вырезать и вставить из snmpRequest.java, было ошибкой. Все еще учусь snmp.

...