Объясните разницу между v1, v2c и v3 Ловушками PDU/format.
Разность ловушек SNMP v1, v2c и v3
Ответ 1
Это требует, чтобы вы просмотрели документы RFC, что означает, что это не связано с программированием и, вероятно, относится к ServerFault.
Дать вам несколько советов:
- SNMP v1 определяет специальный формат сообщений TRAP, отличный от других сообщений (таких как GET). http://tools.ietf.org/html/rfc1157#page-27 Этот формат сообщения больше не используется в SNMP v2 и v3. Если агент SNMP отправляет такие сообщения TRAP для v2 или v3, это может быть ошибкой.
- Начиная с версии v2, TRAP начинает использовать общий формат сообщений (такой же, как GET и т.д.). Так называется SNMPv2-Trap-PDU. http://tools.ietf.org/search/rfc3416#page-22
- SNMP v3 представляет модель безопасности для всех сообщений, поэтому TRAP также получает такие обновления. Он все еще основан на SNMPv2-Trap-PDU.
Ответ 2
SNMPv2 определяет ловушки несколько иначе.
В MIB ловушки SNMPv1 определены как Trap-PDU, ловушки SNMPv2 определены как NOTIFICATION-TYPE. SNMPv2 также устраняет понятие общих ловушек вместо этого, он определяет множество специальных ловушек (собственно говоря, уведомление) в публичных MIB.
Ловушки SNMPv3, которые являются просто ловушками SNMPv2 с добавленной аутентификацией (на основе учетных данных) (общие методы проверки подлинности MD5 или SHA) и функциями конфиденциальности (методы шифрования - DES, 3DES, AES128/192/256).
Большинство реализаций SNMP поддерживают только v1.
Ниже приведен код SNMP4j для отправки ловушки snmpv3.
public void sendTrap_Version3() {
//TrasportMapping
TransportMapping transport;
try {
transport = new DefaultUdpTransportMapping();
transport.listen();
//Creating SNMP object
snmp = new Snmp(transport);
//Creating USM
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
// Add user to the USM
snmp.getUSM().addUser(
new OctetString("MD5DES"),
new UsmUser(new OctetString("MD5DES"), AuthMD5.ID, new OctetString("MD5DESUsrAuthPwd"), PrivDES.ID,
new OctetString("MD5DESUsrPrivPwd")));
// Create the target
Address targetAddress = GenericAddress.parse("udp:10.120.7.107/162");
UserTarget target = new UserTarget();
target.setAddress(targetAddress);
target.setRetries(3);
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(new OctetString("MD5DES"));
// Create PDU
ScopedPDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTic(new Date().toString())));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,SnmpConstants.linkDown));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress("127.3.4.1")));
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1.1"), new Integer32(1)));
pdu.setType(ScopedPDU.TRAP);
snmp.send(pdu, target);
} catch (IOException e) {
e.printStackTrace();
}
}
Ответ 3
Вышеприведенный код работает только тогда, когда все устройства, отправляющие прерывания, имеют уникальное имя пользователя.
Можно ли добавить идентификатор двигателя вместе с именем пользователя и отправить ловушку? Если да, можно ли поделиться фрагментом кода?
Я попытался сделать это, и я получаю "Ошибка обработки модели 3 сообщения: неизвестное имя безопасности".