none
comment extrairele contenu d'un octet au milieu d'une trame reçu en C++ RRS feed

  • Discussion générale

  • bonjour,

     

    je travaille sous visual C++ 2010, je reçois des trames à l'aide de winpcap, mais j'ai besoin d'afficher le contenu d'un octet au milieu de chaque trame reçue.

    comment je fais pour extraire le contenu de cet octet?

    merci infiniment

    mercredi 1 juin 2011 14:54

Toutes les réponses

  • Wincap enregistre les trames recues dans un buffer, par exemple de type char *ptrIN

    Si vous connaissez la position exacte (en octets) de cet octet, il suffit de le sauvegarder dans une variable char OctetParticulier = ptrIN[ PositionOctet ]

    Ensuite, il suffit de choisir le format d'affichage de cet octet:

    ASCII:          sprintf( Message,'%c",  OctetParticulier  );

    Hexadécimal:     sprintf( Message,'%X",  OctetParticulier  );

    Décimal:     sprintf( Message,'%d",  OctetParticulier  );

     

    Pour l'affichage à l'écran: utilisez un champ Texte m_Text = _T( Message ); ou un EditBox   MyEditBox.AddString( _T(Message ));

     

    Est-cela que vous souhaitiez faire ?


    Delphine GARRO
    mercredi 1 juin 2011 15:44
  • merciiiiiiiii Delphine :)

    et si je veux l'enlever maintenant de la trame reçue, que 'est ce que je fais?


    mercredi 1 juin 2011 16:04
  • L'enlever dans le sens le remplacer par un caractère nul par exemple:  ptrIN[ PositionOctet ] = 0

    ou le supprimer en ayant une trame Ethernet plu courte ? Donc il faut décaler tous les autres octets de la trame ?


    Delphine GARRO
    mercredi 1 juin 2011 16:08
  • oui je veux le supprimer complétement de la trame et avoir une trame plus courte
    mercredi 1 juin 2011 16:13
  • Si L est la longueur de cette trame alors, et PositionOctet est la position de cet octet à supprimer alors:

    int i, PositionOctet , L;  // Ligne ajoutée pour la définition des variables


    for(i=PositionOctet ; i<L-1; i++)  ptrIN[i] = ptrIN[i+1];


    Delphine GARRO

    mercredi 1 juin 2011 16:16
  • pour capturer mes trame j'utilise pcap_next_ex() qui exige que le buffer ptrIN soit un const unsigned char.

    donc, quand j'utilise la dernière boucle "for" pour supprimer l'octet, on m'affiche que l'expression doit etre une valeur modifiable" il n'accepte pas une variable const.

    donc,comment je peux faire?

    mercredi 1 juin 2011 16:43
  • si vous avez une autre proposition de fonction de capture winpcap, je serai heureuse car avec cette fonction pcap_next_ex je suis obligée de l'utiliser dans une boucle while.
    mercredi 1 juin 2011 16:45
  • coucou, ya personne qui peut m'aider? :(
    jeudi 2 juin 2011 11:29
  • Jours fériés ;-).

    Je ne comprend pas trop votre problème.

    Le buffer que vous donnez à winpcap, c'est bien vous qui l'avez alloué ?

    Si c'est le cas, vous disposez donc d'un pointeur non const sur ce buffer.

    Si c'est winpcap qui l'alloue et qu'il ne sert qu'à vous, pourquoi ne pas le copier dans un autre buffer sous votre contrôle ?


    Paul Bacelar, Ex - MVP VC++
    lundi 6 juin 2011 07:41
    Modérateur