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

C++ Discussion :

Problème variable snmp c++


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut Problème variable snmp c++
    Bonjour,
    j'essaie d’interroger un switch avec le snmp en c++,
    j'arrive a récupérer la valeur de l'oid que je cherche, mais le résultat est dans une structure "snmpVarBindList", que j'arrive a afficher avec un cout dans la console avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SnmpUtilPrintAsnAny(&snmpVarList.list[0].value)
    mais j'aimerais récupérer cette valeur afin de la mettre dans un tableau et de la retravailler plus tard, mais elle est de type "AsnAny",
    j'aimerais savoir une méthode pour récupéré cette valeur en dehors de cette structure,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if (SnmpMgrRequest(session,SNMP_PDU_GETNEXT,&snmpVarList,&errorStatus,&errorIndex)!=0)
            {
                    if (errorStatus==SNMP_ERRORSTATUS_NOERROR)
                    {
                            //printf("Lecture OK\n");
                            //printf("[%s]\n",id);       // AFFICHE L'OID CHERCHER
                            SnmpUtilPrintAsnAny(&snmpVarList.list[0].value);    //AFFICHE LA VALEUR DE L'OID
                    }
    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    AsnAny est une structure, cf http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    A toi de voir quel champ t'intéresse.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    AsnOctetString string;

    je pense que c'est dans celui la, vu que le résultat est l'adresse mac sous forme de string, mais comment est ce que je fais pour le récupérer dans un char ou une AnsiString ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pour savoir quel est le champ correct, tu as un premier champ BYTE asnType dont il faut vérifier le type.
    Ensuite, je viens de remarquer mais, il s'agit d'une union, donc ton champ sera accessible via asnValue (moyennant le cast du type probablement).

    Pour le type AsnOctetString, voir http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Lorceque je teste, Asntype, il me renvoi '\x04',je pense...

    tu pourais me donner un exemple pour acceder a un champ de la structure avec un union stp, de plus je ne vois pas comment je peux savoir dans quell champ ce trouve le résultat de mon oid,
    merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    je t'invite à cliquer sur ce lien http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx et lire la doc correspondant à la structure et union.

    Ensuite, cf mon message ci-dessus
    Ensuite, je viens de remarquer mais, il s'agit d'une union, donc ton champ sera accessible via asnValue (moyennant le cast du type probablement).
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    test = snmpVarList.list[0].value.asnValue.string.stream;

    j'ai essayé, mais le probleme est que test reste toujours null, je pense que je me trompe, car je ne sais pas ou trouver le resultat de mon oid, que j'arrive bien a afficher la,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SnmpUtilPrintAsnAny(&snmpVarList.list[0].value);
    si tu a une idée merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Il faudrait passer en debug pour tracer ta variable.

    Peut-être quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* szValue = (char*)((AsnOctetString)(snmpVarList.list[0].value.asnValue).stream)
    Pas sûr du tout de moi.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Lorceque j'essaye de compiler, il me dit que
    'stream' is not a member of 'struct'
    je vois vraiment pas, si tu as une autre idée

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Quid de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* szValue = (char*)(snmpVarList.list[0].value.asnValue.string.stream)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Maintenant tout compile bien, mais
    snmpVarList.list[0].value.asnValue.string.stream
    reste toujours =""

  12. #12
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Je met mon code en entier, si ca peut aider

    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
    LireMultOid(char* id, char *resultat , LPSNMP_MGR_SESSION session)
    {
        SnmpVarBindList snmpVarList;       //Structure variable Snmp
        AsnInteger errorStatus,errorIndex;
        int j = 1;
        char* test;
        char testbis[256];
     
     
        snmpVarList.list = NULL;
        snmpVarList.len = 1;
        snmpVarList.list = (SnmpVarBind *)realloc(snmpVarList.list, sizeof(SnmpVarBind) *snmpVarList.len);
        SnmpMgrStrToOid(id,&snmpVarList.list[0].name);
     
        do
        {
            if (SnmpMgrRequest(session,SNMP_PDU_GETNEXT,&snmpVarList,&errorStatus,&errorIndex)!=0)
            {
                    if (errorStatus==SNMP_ERRORSTATUS_NOERROR)
                    {
                            //printf("Lecture OK\n");
                            //printf("[%s]\n",id);       // AFFICHE L'OID CHERCHER
                            // SnmpUtilPrintAsnAny(&snmpVarList.list[0].value);    //AFFICHE LA VALEUR DE L'OID
                            //char* szValue = (char*)(snmpVarList.list[0].value.asnValue.string.stream);
                            char* szValue = (char*)(snmpVarList.list[0].value);
                    }
            }
            j=j++;
        }
        while(j!=125);
        return 0;
    }
     
    int main(int argc, char* argv[])
    {
      LPSNMP_MGR_SESSION session;
      char resultat[MAX_PATH];
      char* oid;
     
      oid = ".1.3.6.1.2.1.17.4.3.1.1"; // PORTNAME
      session = SnmpMgrOpen("192.168.2.82","public",1000,3); //ouverture de session
     
      if (session!=0)
      {
        printf("Connexion OK\n");
        LireMultOid(oid ,resultat,session);  //id racine
     
      }
      else printf("Erreur SnmpMgrOpen\n");
     
      SnmpMgrClose(session);    //fermeture
      system("PAUSE");
      return 0;
    }

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ouah...

    char* test, char* resultat non utilisés dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    snmpVarList.len = 1;
        snmpVarList.list = (SnmpVarBind *)realloc(snmpVarList.list, sizeof(SnmpVarBind) *snmpVarList.len);
    realloc en première alloc avec une multiplication par 1, dont on ne teste pas le code retour
    j=j++ ça pique les yeux
    while(j!=125); pourquoi 125 ? j non utilisé dans la boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* oid;
     
      oid = ".1.3.6.1.2.1.17.4.3.1.1"; // PORTNAME
    mauvaise initialisation d'un char*

    et je ne vois pas à quel moment tu récupères et utilises la valeur que tu cherches depuis le début, ni du coup comment tu peux dire qu'elle vaut "" (chaîne vide)

    Sans compter que... c'est du pur C

    Honnetement je ne connais pas l'utilisation de cette lib.
    Mais l'allocation de la list me paraissait étrange, et
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    variableBindings [in, out]
    Pointer to the variable bindings list.
    Note The SnmpVarBind array pointed to by the SnmpVarBindList structure must be allocated using the SnmpUtilMemAlloc function.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  14. #14
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Enfaite j'éssai d'interroger un switch afin de récupérer les addresses mac des poste relié dessus ainsi que les ports sur lesquell ils sont reliés.

    J =125 c'était juste pour tester car lorceque j'apelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SnmpMgrRequest(session,SNMP_PDU_GETNEXT,5 &snmpVarList,&errorStatus,&errorIndex)!=0
    sans la boucle do...while, je n'obtiens que la 1ere valeurs donc la 1ere adresse mac, il y a environ 115 poste donc 125 me permettait de tous les voirs.

    lorceque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SnmpUtilPrintAsnAny(&snmpVarList.list[0].value);
    j'obtiens bien les addresses mac

    Nom : impecran.png
Affichages : 67
Taille : 12,3 Ko

    je voudrais pouvoir recupéré ces addresses dans une autre variable afin de m'en resservir plus loin.
    pourquoi me dis tu que je fais une mauvaise initialisation d'un char*, et pourquoi j=j++ fais mal aux yeux.
    je suis débutant en c/c++
    merci de tes explications

    voila j'espere avoir été plus clair

  15. #15
    Membre du Club
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Points : 52
    Points
    52
    Par défaut Toujours le meme probleme !!!
    Je n'arrive toujours pas recuper les informations de snmpVarList.list[0].value dans une variable afin de m'en servir plus tard ...
    help me

Discussions similaires

  1. Problème variable.
    Par deviante dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2006, 17h27
  2. Problème variable et objet
    Par Hacken dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/09/2005, 14h10
  3. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41
  4. [Rave report 5.1.3][delphi 7] Probléme variable PIVar
    Par GILLESKLEIN dans le forum Rave
    Réponses: 2
    Dernier message: 05/02/2005, 15h27
  5. problème variable extern
    Par HeKaz dans le forum C
    Réponses: 14
    Dernier message: 08/01/2003, 01h44

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