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 :

SNMP API windows valeur en char*


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut SNMP API windows valeur en char*
    Bonjour à tous,

    Je travail sous VisualC++ 2008.
    Je developpe une application qui interroge les mibs des routeurs et utilise les résultats par la suite, voici 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
     
    SnmpVarBindList snmpVarList; 
    			AsnInteger errorStatus,errorIndex;
    			snmpVarList.list = NULL;
    			snmpVarList.len = 1;
    			snmpVarList.list = (SnmpVarBind *)realloc(snmpVarList.list, sizeof(SnmpVarBind) *snmpVarList.len); 
     
    			LPSNMP_MGR_SESSION session;  
    			char resultat[MAX_PATH];  
    			//ouverture de session  (ip + type: private/public)
    			session = SnmpMgrOpen("192.168.12.3","com_tmp",1000,3);
    			if (session!=0)
    			{	SnmpMgrStrToOid(".1.3.6.1.3.59.1.1.1.1.5.10102",&snmpVarList.list->name);
    				if (SnmpMgrRequest(session,SNMP_PDU_GET,&snmpVarList,&errorStatus,&errorIndex)!=0)
    				{	if (errorStatus==SNMP_ERRORSTATUS_NOERROR)
    					{	SnmpUtilPrintAsnAny(&snmpVarList.list->value);
    					}
    				}
    				char test[200];
    				initialise_tableau_char(test,sizeof(test),'\0');
                              strcpy(test,(char*)snmpVarList.list->value.asnValue.address.stream);
    				//fermeture
    				SnmpMgrClose(session);
    }
    Je voudrais recuperer la valeur de la variable ayant cet OID ".1.3.6.1.3.59.1.1.1.1.5.10102". J'essaye de travailler sur "snmpVarList.list->value.asnValue.address.stream" qui est un BYTE*, du moins c'est l'info que me donne visual lorsque je passe mon curseur de souris dessus!
    Car lorsque je lance en mode pas à pas, je me rend compte que cette variable est en fait un "unsigned char":



    Le resultat que je doit trouver est une adresse ip commencant par 172.x.x.x
    J'ai donc essayé de faire tout simplement un casting, le problème: je ne recupère pas le "172" mais le '¬', comment faire?
    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    J'ai trouvé:
    itoa(*snmpVarList.list->value.asnValue.address.stream, test, 10);
    je recupère bien 172 dans test, maintenant je voudrais recuperer l'ensemble de l'IP, pas simplement le premier digit.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Olala... une chose etrange!

    J'interroge la mib et suivant les OID interrogés, la réponse a différent aspects. Par exemple:
    OID1 = 10150
    OID2 = 172.153.2.1

    pour le premier OID, "snmpVarList.list->value.asnValue.address.stream" est nul
    pour le deuxième, il vaut 172,
    je comprend vraiment pas ou exactement récuperer la valeur de l'OID quelle que soit la forme!!

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut !

    Citation Envoyé par Persnip77 Voir le message
    J'ai trouvé:
    itoa(*snmpVarList.list->value.asnValue.address.stream, test, 10);
    je recupère bien 172 dans test, maintenant je voudrais recuperer l'ensemble de l'IP, pas simplement le premier digit.
    Je vois que ton système utilise un système de liste pas très fiable. Quoi qu'il en soit, lorsque tu récupères 172, tu récupères le premier élément d'une liste qui en fait 4 (je vois dans le débuggueur length = 4). Donc pour récupérer la suite, il faut incrémenter le pointeur.

    De plus itoa est du C et pas du C++. Je te donne le code pour faire ça en C++ proprement.

    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
     
    unsigned char * myStream = snmpVarList.list->value.asnValue.address.stream;
    int length = snmpVarList.list->value.asnValue.address.length;
     
      std::ostringstream out;
      for(int i = 0; i < length; i++)
      {
        out << static_cast<int>(*myStream);
        if(i < length - 1)
          out << '.';
     
        myStream++;
      }
     
      std::cout << out.str() << std::endl;
    Find me on github

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Merci jblecanard,
    ça marche nikel crome

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

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. Réponses: 5
    Dernier message: 16/04/2009, 17h00
  3. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  4. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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