IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Envoi de trap SNMP avec Net-SNMP


Sujet :

Réseau C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Points : 311
    Points
    311
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    snmptrap -v 2c -c public 127.0.0.1 "" 1.2.3 1.2.3.4 s test
    Et me donne le retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Points : 311
    Points
    311
    Par défaut
    Bonjour!

    Après plusieurs jours à chercher une solution à ce problème, j'ai trouvé... mais c'est bizarre!

    En fait, l'utilisation de la librairie préalablement installée dans /usr/include/ à l'aide d'inclusion de type #include <net-snmp/> ne fonctionne tout simplement pas!
    Les commandes de base de la librairie fonctionne mais pas le code que l'on peut produire avec (exemple ci dessus).

    J'ai donc téléchargé le code source complet de Net-SNMP v5.7.2, j'ai lancé la compilation puis exécuté mon code en likant avec les .o produits et ça marche.

    Voila, donc mon problème est résolu mais si quelqu'un a une explication, je suis preneur!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 14
    Points
    14
    Par défaut 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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2003] Envoi d'un fichier avec Net send
    Par dari68 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 30/10/2013, 15h40
  2. Réponses: 0
    Dernier message: 04/08/2010, 16h31
  3. Réponses: 3
    Dernier message: 08/06/2009, 11h09
  4. [net-SNMP] commande DOS pour récupérer un trap
    Par Emcy dans le forum Développement
    Réponses: 0
    Dernier message: 16/10/2008, 14h22
  5. [snmp] envoi de trap en C++
    Par cisou dans le forum Développement
    Réponses: 1
    Dernier message: 31/08/2007, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo