#java #header #snmp #snmp4j #snmp-trap
#java #заголовок #snmp #snmp4j #snmp-ловушка
Вопрос:
У меня есть Java-приложение, которое отправляет SNMP-ловушки с использованием SNMP4J. Проблема в том, что OID отправляется в теле ловушки. Все данные, которые я настраиваю, успешно отправлены, но в теле ловушки. Я хочу, чтобы Oid отправлялся в заголовке ловушки.
Как я могу отправить Oid в заголовке ловушки?
UdpAddress managerUdpAddress = new UdpAddress("address");
CommunityTarget ctarget = new CommunityTarget();
ctarget.setAddress(managerUdpAddress);
ctarget.setRetries(retryCount);
ctarget.setCommunity(new OctetString(community));
ctarget.setTimeout(timeout);
ctarget.setVersion(SnmpConstants.version2c);
PDU trap = new PDU();
OID oid = new OID(myOid);
trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid));
trap.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000)));
trap.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString(
"System Description")));
trap.add(new VariableBinding(oid, new OctetString(message)));
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
snmp.notify(trap, ctarget);
Когда UPS отправляет SNMP trap, OID отображается в заголовке SNMP trap. Вот примеры:
Ловушка от ИБП:
Пн, 18 марта, 04:13:18 2019 .
1.3.6.1.4.1.935.0.49
Обычное «СОБЫТИЕ SNMP» x.x.x.x — UPS_212_bypass_ac_normal SNMP TRAP: обычный обход переменного тока
Ловушка из JAVA:
Пн. 18 марта 05:25:36 2019
.0.00
Критическое «СОБЫТИЕ SNMP» x.x.x.x — ошибки snmp моего приложения: Общая ошибка описания системы. Размер =2″
Комментарии:
1. Вы не можете нарушать сам стандарт SNMP, поэтому то, что вы просили, невозможно.
2. @LexLi UPS также отправляет SNMP-ловушки, но в этом случае OID заполняется в заголовке SNMP-ловушки. В чем разница? Как UPS может отправлять OID в заголовке?
Ответ №1:
Формат SNMP TRAP имеет фиксированную структуру, определенную в RFC 1157 или RFC 3412 (в случае SNMPv3). Эта структура состоит из заголовка и PDU (блока пакетных данных). PDU в основном представляет собой набор так называемых привязок переменных. Каждая привязка имеет OID, синтаксис и значение. Таким образом, вы можете изменить только часть PDU. Структура заголовка не может быть изменена.
Комментарии:
1. UPS также отправляет SNMP-ловушки, но в этом случае OID заполняется в заголовке SNMP-ловушки. В чем разница? Как UPS может отправлять OID в заголовке?
2. Существует так называемый Trap OID и переменные trap. Oid trap, на который ссылается его собственный OID snmpcconstants.snmpTrapOID, также является частью PDU. Это первая привязка переменной. Таким образом, получатель Trap обрабатывает его как идентификатор TRAP. Остальные переменные в PDU можно рассматривать как дополнительную информацию. Я пытаюсь вам сказать, что если тип PDU — TRAP, то первые две привязки переменных обязательны. Первый — это OID ловушки, а второй — время безотказной работы системы. Остальное — пользовательские данные.
3. Спасибо за объяснение, теперь я понимаю, почему изменение типа PDU на trap решило мою проблему.
Ответ №2:
Я сделал это, добавив этот код:
trap.setType(PDU.TRAP);
trap.add(new VariableBinding(oid));
Теперь SNMP trap, отправляемый с Java, выглядит следующим образом:
Чт, март 21 15:16:51 2019 .1.3.6.1.6.3.1.1.7.1.6 Критическое «СОБЫТИЕ SNMP» x.x.x.x — ошибки snmp моего приложения: Общая ошибка системного описания. Размер =2″