[c++] Récupérer une mac adresse (error au link)

Récupérer une mac adresse (error au link) [c++] - C++ - Programmation

Marsh Posté le 20-12-2008 à 13:25:23    

Voila, en fait je cherche un moyen de récupérer la mac adresse du pc sur lequel le code tournerai. J'ai un peu cherché sur le net après un moyen d'y arriver mais je n'ai rien de trouver de vraiment convainquant.
 
Comme compilo j'utilise Dev-C++, et je suis sous windows XP.
 
Pour le moment j'en suis avec ce code la :
Je vous avoue que je me fout un peu de la façon dont c'est codé du moment ou j'arrive à compiler un truc qui me renvera la mac adresse, c'est pourquoi si vous avez une toute autre solution valable et qui compile je me fout de la correction du code ci-dessous ^^
 

Code :
  1. #include <windows.h>
  2.    #include <wincon.h>
  3.    #include <stdlib.h>
  4.    #include <stdio.h>
  5.    #include <time.h>
  6.    typedef struct _ASTAT_
  7.    {
  8.       ADAPTER_STATUS adapt;
  9.       NAME_BUFFER    NameBuff [30];
  10.    }ASTAT, * PASTAT;
  11.    ASTAT Adapter;
  12.    int main ()
  13.    {
  14.       NCB Ncb;
  15.       UCHAR uRetCode;
  16.       char NetName[50];
  17.       memset( &Ncb, 0, sizeof(Ncb) );
  18.       Ncb.ncb_command = NCBRESET;
  19.       Ncb.ncb_lana_num = 0;
  20.       uRetCode = Netbios( &Ncb );
  21.       printf( "The NCBRESET return code is: 0x%x \n", uRetCode );
  22.       memset( &Ncb, 0, sizeof (Ncb) );
  23.       Ncb.ncb_command = NCBASTAT;
  24.       Ncb.ncb_lana_num = 0;
  25.       Ncb.ncb_callname[0] = '*';
  26.       Ncb.ncb_callname[1] = ' ';
  27.       Ncb.ncb_callname[2] = ' ';
  28.       Ncb.ncb_callname[3] = ' ';
  29.       Ncb.ncb_callname[4] = ' ';
  30.       Ncb.ncb_callname[5] = ' ';
  31.       Ncb.ncb_callname[6] = ' ';
  32.       Ncb.ncb_callname[7] = ' ';
  33.       Ncb.ncb_callname[8] = ' ';
  34.       Ncb.ncb_callname[9] = ' ';
  35.       Ncb.ncb_callname[10] = ' ';
  36.       Ncb.ncb_callname[11] = ' ';
  37.       Ncb.ncb_callname[12] = ' ';
  38.       Ncb.ncb_callname[13] = ' ';
  39.       Ncb.ncb_callname[14] = ' ';
  40.       Ncb.ncb_callname[15] = ' ';
  41.       //strcpy( Ncb.ncb_callname,  "*               " );
  42.       Ncb.ncb_buffer = ( unsigned char *) &Adapter;
  43.       Ncb.ncb_length = sizeof(Adapter);
  44.       uRetCode = Netbios( &Ncb );
  45.       printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );
  46.       if ( uRetCode == 0 )
  47.       {
  48.          printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n",
  49.                   Adapter.adapt.adapter_address[0],
  50.                   Adapter.adapt.adapter_address[1],
  51.                   Adapter.adapt.adapter_address[2],
  52.                   Adapter.adapt.adapter_address[3],
  53.                   Adapter.adapt.adapter_address[4],
  54.                   Adapter.adapt.adapter_address[5] );
  55.       }
  56.       return 0;
  57.    }


 
Ce qui me donne une joli erreur de link que voici :
 
  [Linker error] undefined reference to `Netbios@4'  
  [Linker error] undefined reference to `Netbios@4'  
  ld returned 1 exit status  

Reply

Marsh Posté le 20-12-2008 à 13:25:23   

Reply

Marsh Posté le 20-12-2008 à 18:39:21    

Le problème doit venir de ton linkage uniquement (cad : pas du code) ...
Est-ce que tu as bien défini toutes les librairies nécessaires à inclure ? (-lxxx pour gcc)


---------------
By bob.
Reply

Marsh Posté le 22-12-2008 à 00:44:48    

C'est justement ça le problème, j'ai trouvé pas mal de code proposant de récupérer la mac adresse, que ça soit sur le net ou sur news groupe, Mais tout au mieu, si le même le code compile sans erreur (et c'est rare avec les erreurs de conversion ULONG / char, ect) il me fait automatiquement une erreur au linkage. J'ai essayé d'y ajouter à peu pret toutes les librairie que j'ai rencontrées sur différent site mais mon niveau en connaissance et langage C n'est pas assez haut que pour tout comprendre aux fonction de l'api ou autre, je me contente simplement de "plagier" du code en espérant que cela fonctionne. (je sais ça n'est pas bien mais j'ai fait toute une applic et j'aimerai la "protéger" en me servant de la mac adresse ^^)

Reply

Marsh Posté le 22-12-2008 à 10:11:01    

Pour info, tu peux déjà regarder sur le site de microsoft ce qu'ils disent sur le fonction Netbios (qui pose problème dans ton cas).
En l'occurrence l'info est là : http://msdn.microsoft.com/en-us/li [...] S.85).aspx
Déjà ils disent que cette fonction n'est pas disponible pour Vista et Server 2008 et toutes les version futures, donc ton code risque de vite périmer.
Ensuite ils disent à la fin que la librairie statique à utiliser est Netapi32.lib.
Donc vérifie bien que cette librairie est correctement incluse (je ne pourrai pas te dire comment car je ne connais pas très bien Dev-C++).
 
Conseil amical :
De façon générale quand tu codes pour Windows regarde la doc MSDN qui est très complète ...
Une simple recherche google du style Netbios MSDN function te donne le résultat assez vite ...


---------------
By bob.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed