Envoi de trap SNMP avec Net-SNMP
Bonjour à tous!
Je dois faire une application simple d'envoi de trap SNMP en C en utilisant l'api Net-SNMP mais il semblerait que cela ne fonctionne pas.
Je suis sous OpenSuse 13.1 x86_64 et j'utilise la bibliothèque NET-SNMP version 5.7.2. J'ai lancé un démon snmptrap sur ma machine à l'aide de la commande suivante:
Cela permet de voir en direct les traps reçus. La commande suivante fonctionne donc:
Code:
snmptrap -v 2c -c public 127.0.0.1 "" 1.2.3 1.2.3.4 s test
Et me donne le retour:
Code:
1 2
| 52014-02-11 16:00:38 localhost [UDP: [127.0.0.1]:45161->[127.0.0.1]:162]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2904325) 8:04:03.25 SNMPv2-MIB::snmpTrapOID.0 = OID: iso.2.3 iso.2.3.4 = STRING: "test" |
La bibliothèque semble donc fonctionner correctement.
J'ai fait un premier test avec un SNMP GET, en utilisant l'exemple suivant:
http://cuddletech.com/articles/snmp/node26.html
Cela fonctionne parfaitement.
Maintenant, en ce qui concerne les traps, je me suis inspiré du fichier snmptrap.c que l'on peut trouver ici (un des rares exemple fonctionnel que j'ai pu trouver)
http://sourceforge.net/projects/net-...et-snmp/5.7.2/
Voici donc mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
int main(int argc, char** argv)
{
struct snmp_session session;
struct snmp_session* session_handler = NULL;
struct snmp_pdu* pdu = NULL;
oid name[MAX_OID_LEN];
size_t name_length;
int status;
long sysuptime;
char csysuptime[20];
char* uptime;
init_snmp("snmptrap");
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.community = (u_char*)"public";
session.community_len = strlen((char*)session.community);
session.peername = "127.0.0.1";
session_handler = snmp_open(&session);
if(session_handler == NULL)
{
snmp_sess_perror("snmptrap", &session);
LOGGER_ERROR("Bad Handler");
}
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
if (!pdu)
{
snmp_sess_perror("snmptrap", &session);
LOGGER_ERROR("Failed to create notification PDU!");
}
sysuptime = get_uptime();
sprintf(csysuptime, "%ld", sysuptime);
uptime = csysuptime;
if(snmp_add_var(pdu, objid_sysuptime, sizeof(objid_sysuptime) / sizeof(oid), 't', uptime) != 0)
{
snmp_perror(uptime);
LOGGER_ERROR("Uptime!");
}
if(snmp_add_var(pdu, objid_snmptrap, sizeof(objid_snmptrap) / sizeof(oid), 'o', "1.2.3") != 0)
{
snmp_perror("1.2.3");
LOGGER_ERROR("Bad OID!");
}
name_length = MAX_OID_LEN;
if(!snmp_parse_oid("1.2.3.4", name, &name_length))
{
snmp_perror("1.2.3.4");
LOGGER_ERROR("Bad Parsing!");
}
if(snmp_add_var(pdu, name, name_length, 's', "coucou") != 0)
{
snmp_perror("coucou");
LOGGER_ERROR("Bad Value!");
}
status = snmp_send(session_handler, pdu) == 0;
if(status)
{
snmp_sess_perror("snmptrap", session_handler);
}
/* snmp_free_pdu(pdu);*/
snmp_close(session_handler);
snmp_shutdown("snmptrap");
return EXIT_SUCCESS;
} |
Mon problème est que ce programme semble fonctionner mais le démon ne reçoit aucun trap. Qu'ai-je oublié ou mal fait? Pourquoi le snmp_send n'envoie rien?
Merci de votre aide!
Envoi de trap SNMP avec Net-SNMP
Bonjour JCD_31 ,
moi aussi je bosse sur cette partie , l'envoie des traps par net-snmp.
est-ce que c possible de me passer votre code sources avec les includes s'il vous plait ?
je code sur une distribution debian 5 et net-snmp-5.7.2.
Merci pour votre aide :) .
cordialement
maice.