Estou tentando enviar snmptrap da minha máquina centos para outra máquina centos. Estou vendo o seguinte nos logs, snmptrap V3 com net-snmp não funcionando "usm: no match on engineID"
trace: sc_hash(): scapi.c, 464:
trace: sc_get_properlength(): scapi.c, 138:
trace: set_enginetime(): lcd_time.c, 393:
lcd_set_enginetime: engineID 7A 7A 7D 80 7A 7A 7A 83 86 89 8C 8F : boots=0, time=0
trace: usm_get_user_from_list(): snmpusm.c, 3527:
usm: match on user doit
trace: usm_get_user_from_list(): snmpusm.c, 3533:
**usm: no match on engineID (7A 7A 7D 80 7A 7A 7A 83 86 89 8C 8F )**
trace: usm_get_user_from_list(): snmpusm.c, 3527:
usm: match on user doit
trace: usm_get_user_from_list(): snmpusm.c, 3533:
Meu arquivo snmptrapd.conf se parece com o seguinte
[root@localhost crash]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity log,execute,net public
# traphandle SNMPv2-MIB::coldStart /usr/bin/bin/my_great_script cold
createUser -e 00002E390000005056877fb3 doit MD5 doitpassword DES
authUser log doit AuthNoPriv
Eu usei o módulo net-snmp de C e abaixo está o bloco de código para criar o ID do mecanismo,
char engineID[13];
engineID[0]= "0x00";
engineID[1]= "00";
engineID[2]= "2e";
engineID[3]= "39";
engineID[4]= "00";
engineID[5]= "00";
engineID[6]= "00";
engineID[7]= "50";
engineID[8]= "56";
engineID[9]= "87";
engineID[10]= "7f";
engineID[11]= "b3";
engineID[12]= "\0";
session.securityEngineID = (u_char *)engineID;
session.securityEngineIDLen = 12;
Além disso, não fiz nenhuma configuração na máquina TARGET que está recebendo a armadilha.
O principal problema é que a máquina de destino recebe traps mostrando uma descrição em branco. Verifique a captura de tela abaixo. Não tenho certeza do que estou fazendo de errado aqui. Conselho por favor.
Em primeiro lugar, não é assim que strings C ou arrays de caracteres funcionam. Cada elemento de um char[] é um char ; ou seja, um único número no [-128; 127] intervalo, ou [0; 255] se for unsigned char. Por exemplo,
0x41
or'A'
é um valor válido para char , mas"A"
não é – e definitivamente"0x41"
não é (isso é um ponteiro para char[5], grosso modo).Segundo: "Octet string" é o termo ASN.1 para uma matriz de bytes (um 'octeto' sendo um byte de 8 bits), também conhecido como
unsigned char[]
C. Em outras palavras, significa apenas dados binários simples.Dados binários podem ser representados de várias maneiras – como séries de caracteres ASCII, ou como séries de números hexadecimais, ou como um único número hexadecimal longo, ... Por exemplo,
ABC
e0x414243
(com ou sem o 0x) e{0x41, 0x42, 0x43}
e{'A', 'B', 'C'}
são formas diferentes de escrever os mesmos dados.Portanto, se você tiver uma string hexadecimal como
00002E390000005056877fb3
(você sabe que é hexadecimal porque o manual do snmpd.conf diz isso), você pode escrevê-la em C assim:Alternativamente assim: