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++Builder Discussion :

obtenir l'adresse mac [Non suivi]


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 31
    Points
    31
    Par défaut obtenir l'adresse mac
    bonjour,
    j'aimerais savoir comment obtenir l'adresse mac d'un pc.
    si quelqu'un a des infos...
    merci

  2. #2
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    bjr,
    moi j'ai cherché adresse MAC sur le forum...j'ai trouvé ça...
    http://www.developpez.net/forums/vie...ht=adresse+mac

    tch'o
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    ok merci,
    j'avais fait la meme chose et effectivement je suis tombé sur le lien de borland. Masi en fait j'ai du copier coller de la deuxieme solution et ça ne marche pas. J'ai du mal à faire le débugage car je n'arrive pas à comprendre le 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
     
    #include <windows.h>
    #include <iostream>
    #include <conio.h>
     
    using namespace std;
     
    int main()
    {
        cout << "MAC address is: ";
     
        // Ask COM to create a UUID for us.  If this machine has an Ethernet
        // adapter, the last six bytes of the UUID (bytes 2-7 inclusive in
        // the Data4 element) should be the MAC address of the local
        // Ethernet adapter.
        GUID uuid;
        CoCreateGuid(&uuid);
        // Spit the address out
        char mac_addr[18];
        sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",
                uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],
                uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]);
        cout << mac_addr << endl;
        getch();
        return 0;
    }
    j'ai une erreur de compilation en me disant qu'il ne connait pas la fonction
    CoCreateGuid(&uuid);

    Que faire ?
    merci

  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    pour utiliser CoCreateGUID il faut inclure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <vcl\OleAuto.hpp>
    pour utiliser sprintf :
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            GUID uuid;
            CoCreateGuid(&uuid);
            // Spit the address out
            char mac_addr[18];
            sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]);
            ShowMessage(String(mac_addr));
    }
    mais chez moi ça donne de résultats plus que douteux ...

  5. #5
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    il y a une autre méthode qui semble donner des résultats plus pertinents chez moi : ( methode directement pompée sur le site de codeguru et adaptée à BCB)

    il faut cependant ajouter à ton projet la librairie Iphlpapi.lib ( trouvable dans le répertoire $BCB\lib\psdk )


    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
     
    #include <Iphlpapi.h>
    #include <Assert.h>
     
    //---------------------------------------------------------------------------
    String __fastcall AdapterInfoAdressToString(unsigned char MACData[])
    {
            String res;
    	res.sprintf("%02X:%02X:%02X:%02X:%02X:%02X",
    		MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
            return res;
    }
    //---------------------------------------------------------------------------
    static void GetMACaddress(TStringList * LMAcAddresses)
    {
      if(LMAcAddresses==NULL) return;
     
      IP_ADAPTER_INFO AdapterInfo[16];
      DWORD dwBufLen = sizeof(AdapterInfo);
     
      DWORD dwStatus = GetAdaptersInfo(
        AdapterInfo,
        &dwBufLen);
      assert(dwStatus == ERROR_SUCCESS);
     
     
      PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
      do {
        LMAcAddresses->Add(AdapterInfoAdressToString(pAdapterInfo->Address));
     
        pAdapterInfo = pAdapterInfo->Next;
     
      }
      while(pAdapterInfo);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
        TStringList *LMAcAddresses = new TStringList();
        GetMACaddress(LMAcAddresses);
        Memo1->Lines=LMAcAddresses;
    }
    //---------------------------------------------------------------------------
    avec cette méthode j'ai des résultats plus cohérents

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    j'ai essayé les deux méthodes et aucune des deux me donne véritablement mon adresse mac
    bizard non ?

  7. #7
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    ah bizzare chez moi
    2 carte reseau une classique et wifi,
    j'ai les 2 adresses conformes aux résultats donnés par "ipconfig /all "

    tu as quoi comme résultat pour la 2eme méthode ? quelque chose qui commence par 00 ? ou autre chose ...

    sous quel OS tourne tu ?

  8. #8
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    J'ai testé aussi
    sur un poste sous windows 2000
    toujours des bons résultats,

    si plusieurs personnes pouvaient tester ...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Je suis sous XP pro. Mon adresse mac est : 00-08-02-D6-B6-73
    A chaque fois que je clique sur mon bouton j'ai des adresses différentes à chaque fois.
    Pour info je n'arrive pas avoir la mienne
    merci

  10. #10
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    J'ai le même phénomène quand j'utilise la méthode 1.

  11. #11
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut lire la mac adresse de la carte reseau
    #
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <strstream>
    #include <string>
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "File1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    using namespace std;
     
    //========= C++ Code : BEGIN =========
     
     LANA_ENUM AdapterList;
     NCB Ncb;
     memset(&Ncb, 0, sizeof(NCB));
     Ncb.ncb_command = NCBENUM;
     Ncb.ncb_buffer = (unsigned char *)&AdapterList;
     Ncb.ncb_length = sizeof(AdapterList);
     Netbios(&Ncb);
     
     
     string sMAC;
     cout << "MY INFO : AdapterList.length = " << static_cast<int>(AdapterList.length) << endl;
     for (int i = 0; i < AdapterList.length; ++i)
     {
      if (GetAdapterInfo(AdapterList.lana[i], sMAC))
      {
       List->Items->Add(sMAC.c_str());
       cout << "Adapter " << int (AdapterList.lana[i]) << "'s MAC is " << 
       sMAC << endl;
      }
      else
      {
       cerr << "Failed to get MAC address! Do you" << endl;
       cerr << "have the NetBIOS protocol installed?" << endl;
       break;
      }
     }
     //return 0;
    }
    //------------------------------------------------------
     
    bool TForm1::GetAdapterInfo(int nAdapterNum, string & sMAC)
    {
      NCB Ncb;
      memset(&Ncb, 0, sizeof(Ncb));
      Ncb.ncb_command = NCBRESET;
      Ncb.ncb_lana_num = nAdapterNum;
      if (Netbios(&Ncb) != NRC_GOODRET)
      {
       char acTemp[80];
       ostrstream outs(acTemp, sizeof(acTemp));
       outs << "error " << Ncb.ncb_retcode << " on reset" << ends;
       sMAC = acTemp;
       return false;
      }
     
      memset(&Ncb, 0, sizeof(Ncb));
      Ncb.ncb_command = NCBASTAT;
      Ncb.ncb_lana_num = nAdapterNum;
      strcpy((char *) Ncb.ncb_callname, "*");
     
      struct ASTAT
      { ADAPTER_STATUS adapt;
        NAME_BUFFER NameBuff[30];
      }Adapter;
     
      memset(&Adapter, 0, sizeof(Adapter));
      Ncb.ncb_buffer = (unsigned char *)&Adapter;
      Ncb.ncb_length = sizeof(Adapter);
     
     if (Netbios(&Ncb) == 0)
     {char acMAC[18];
      sprintf(acMAC, "%02X %02X %02X %02X %02X %02X",
      int (Adapter.adapt.adapter_address[0]),
      int (Adapter.adapt.adapter_address[1]),
      int (Adapter.adapt.adapter_address[2]),
      int (Adapter.adapt.adapter_address[3]),
      int (Adapter.adapt.adapter_address[4]),
      int (Adapter.adapt.adapter_address[5]));
      sMAC = acMAC;
      return true;
     }
     else
     {char acTemp[80];
      ostrstream outs(acTemp, sizeof(acTemp));
      outs << "error " << Ncb.ncb_retcode << " on ASTAT" << ends;
      sMAC = acTemp;
      return false;
     }
    }
    ///////////////////////////////
    le Unit1.h
    //////////////////////////////
     
    #ifndef File1H
    #define File1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
            TGroupBox *GroupBox1;
            TListBox *List;
    private:	// Déclarations utilisateur
     
      bool GetAdapterInfo(int,string &);
     
    public:		// Déclarations utilisateur
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

  12. #12
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut suite
    en faite , tu peux retirer les cout <<

    creer une interface et tu y place une Tlist , si tu as x carte reseau tu aura x adresse mac.


    @++

Discussions similaires

  1. Obtenir l'adresse mac de sa carte reseau
    Par kivoch dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/11/2009, 18h30
  2. obtenir son adresse mac
    Par MonsieurAk dans le forum Windows
    Réponses: 6
    Dernier message: 24/08/2005, 11h01
  3. [Info] obtenir l'adresse MAC d'une machine
    Par bigboomshakala dans le forum C++
    Réponses: 3
    Dernier message: 27/02/2005, 17h07
  4. obtenir l'adresse MAC
    Par acastor dans le forum Développement
    Réponses: 2
    Dernier message: 18/04/2004, 13h19
  5. Obtenir l'adresse MAC réelle
    Par gpetto dans le forum Réseau
    Réponses: 16
    Dernier message: 03/11/2003, 16h56

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