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

Visual C++ Discussion :

Recuperer Adresse MAC dans un Edit Control


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Recuperer Adresse MAC dans un Edit Control
    Bonjour tout le monde,

    Je vous ecrit car j'ai un gros problème, je vous l'explique tout de suite:

    Je souhaiterai créer un envoyeur de trame Ethernet avec la librairie Winpcap, L'envoyeur aura une interface graphique réalisé avec l'API Win 32 sous Visual 2008.

    J'ai reussi a créer la connexion a mes differentes interface et a envoyer un packet.
    Mon soucis est que je souhaiterai configurer l'adresse MAC Source et destination manuellement via une boite de dialogue.

    Pourtant très simple a premiere vu... SA FAIT 1 semaine que je tourne en rond

    J'ai créer deux edit control ou je rentre l'adresse mac voulu et je la recupere dans une chaine de caractere, mais je n'arrive pas a la recuperer en hexa afin de l'envoyer en trame direct.


    Pouvez vous m'aidez s'il vous plait ?

    Merci beaucoup !

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Je vais peut être dire une bêtise, mais les adresses MAC sont encapsulées en dernier dans la trame IP par la carte réseau elle-même, il me semble. C'est nécessaire pour identifier la source et le destinataire du paquet, mais c'est surtout géré par la carte réseau, donc inaccessible logiciellement.

    Je ne suis pas sûr à 100% de mes propos, mais ça me paraît logique.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 116
    Points
    116
    Par défaut
    Si j'ai bien compris, tu veux transformer une chaine de ce style "aa:bb:cc:dd:ee:ff" en code hexa (0xaa, 0xbb...).

    Si c'est ce que tu cherches il faudra utiliser la fonction sscanf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char buf[2];
    BYTE b;
    // Lecture de la valeur dans buf
     
    // par exemple buf vaut "aa";
     
    sscanf(buf, "%x", &b);

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Réponse
    En répouse a Spout, effectivement la logique voudrait que le N.A fasse sa, niveau securité sa serait logique (bien que l'adresse MAC est modifiable)

    Sauf que la fonction pcap_sendpacket n'envoi sans detecter l'adresse MAC Source donc il faut la donné ce qui peut permettre de te faire passer pour n'importe quel pc dans un reseau si tu connais son adresse MAC (ce n'est pas ce que je cherche a faire !)

    Réponse a Coincoin: Si je suis ton raisonement tu traite octet par octet, mais en verité je souhaiterai tout ecrire dans le meme Edit Control. donc récuperer par exemple aabbccddeeff en caractere et le transformer en 0xAABBCCDDEEFF afin de l'envoyer dans ma trame. n'y a t-il pas moyen de faire tout d'un coup que de faire octet par octet a ta maniere ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 116
    Points
    116
    Par défaut
    Si on peut récupérer tout d'un coup avec la même fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buf[] = "0A1B32F56D";
    BYTE b[5];
    sscanf(buf, "%x%x%x%x%x", &b);
    Attention les valeurs dans b sont en ordre inverse de la chaine de caractère.
    C'est à dire : b[0] = 0x6D, b[1] = 0xF5....

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Lyrix30 Voir le message
    Réponse a Coincoin: Si je suis ton raisonement tu traite octet par octet, mais en verité je souhaiterai tout ecrire dans le meme Edit Control. donc récuperer par exemple aabbccddeeff en caractere et le transformer en 0xAABBCCDDEEFF afin de l'envoyer dans ma trame. n'y a t-il pas moyen de faire tout d'un coup que de faire octet par octet a ta maniere ?
    Sous windows avec win32, l'edit est soit numérique (0 à 9) soit alphabétique. Il ne sait pas faire hexadécimal. Donc tu pourras aussi bien saisir 'aa' que 'zz'.
    Pour convertir ta chaîne, tu peux voir de ce côté ou ici

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Ok le sscanf marche pas mal mais j'ai un soucis avec, je vous montre une partie de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BYTE b[6];
    char tempo[] = "AABBCCDDEEFF";
    sscanf(tempo, "%x%x%x%x%x%x",&b);
    le pas a pas me donne ceci sur b:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0x0 : 0xff
    0x1 : 0xee
    0x2 : 0xdd
    0x3 : 0xcc
    0x4 : 0xcc
    0x5 : 0xcc
    j'ai essayeé de changer tempo par "001122DDEEFF" et le pas a pas me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0x0 : 0xff
    0x1 : 0xee
    0x2 : 0xdd
    0x3 : 0x22
    0x4 : 0xcc
    0x5 : 0xcc
    pourquoi a partir du 0x4 il ne converti plus ma chaine ? au debut je penser qu'il bouclait sur "CC" mais quand j'ai changer la chaine par 001122 au lieu AABBCC j'ai remarquer que CCCC ne changer pas en 0x4 et 0x5 donc j'aimerai comprendre pourquoi ! :'(

    Quelqu'un aurait une idée sur le problèmes ?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Lyrix30 Voir le message
    au debut je penser qu'il bouclait sur "CC"
    C'est la valeur par défaut utilisé par le debugger visual pour les zones mémoires non initialisées. Rien à voir avec la lecture.

    Citation Envoyé par Lyrix30 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BYTE b[6];
    char tempo[] = "AABBCCDDEEFF";
    sscanf(tempo, "%x%x%x%x%x%x",&b);
    Grosse boulette: ça ne risque pas de marcher!
    1/%x demande une adresse sur un int et non un octet!
    2/%x%x%x%x%x%x demande donc 6 adresses sur des int et non pas une adresse sur un tableau de 6 int!
    3/%x va lire un hexa sur l'ensemble de la chaîne de caractère et pas sur seulement 2 caractères.
    Donc, ce devrait être plutôt quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int b[6]={0,0,0,0,0,0};
    char tempo[] = "AABBCCDDEEFF";
    sscanf(tempo, "%2x%2x%2x%2x%2x%2x",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5]);

Discussions similaires

  1. Recuperer adresse Mac en vb.net
    Par niceen dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2008, 12h43
  2. texte dans un edit control
    Par boboz2 dans le forum MFC
    Réponses: 1
    Dernier message: 14/08/2007, 16h22
  3. Recuperation adresse IP dans un batch
    Par Breizh.Bezzi dans le forum Windows
    Réponses: 5
    Dernier message: 13/02/2007, 15h35
  4. Réponses: 12
    Dernier message: 01/06/2006, 15h32
  5. recuperer adresse MAC d'un pc sur un reseau local
    Par LineLe dans le forum Développement
    Réponses: 3
    Dernier message: 25/03/2005, 16h37

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