2010-01-15 4 views
5

J'ai entendu dire que ce n'est pas possible avec ma bibliothèque actuelle de winpcap.Obtenir l'adresse MAC de la machine - une bonne solution?

Est-ce vrai? Je vois beaucoup d'exemples sur le net mais les commentaires disent "ça ne marche pas".

Quelle est la meilleure façon d'obtenir une adresse MAC de la machine locale?

+0

Bonne solution pour quoi? Si vous voulez dire que vous générez un identifiant d'ordinateur unique pour l'octroi de licences, je dirais qu'il ne devrait pas être utilisé. Que se passe-t-il lorsque l'utilisateur change de carte réseau, a 2 cartes, n'a pas de carte réseau? – Ash

Répondre

6

Une méthode courante consiste à utiliser des bits d'un UUID, mais cela n'est pas entièrement fiable. Par exemple, il renvoie une valeur même sur une machine qui n'a pas de carte réseau.

Heureusement, il existe un moyen qui fonctionne de manière fiable sur toute version raisonnablement récente de Windows. MSDN dit qu'il va seulement à Windows 2000, mais si ma mémoire est bonne, il travaille également sur NT 4, à partir d'environ SP 5, dans le cas où tout le monde est toujours en utilisant NT 4.

#include <windows.h> 
#include <iphlpapi.h> 
#include <stdio.h> 

int main() {   
    IP_ADAPTER_INFO *info = NULL, *pos; 
    DWORD size = 0; 

    GetAdaptersInfo(info, &size); 

    info = (IP_ADAPTER_INFO *)malloc(size); 

    GetAdaptersInfo(info, &size); 

    for (pos=info; pos!=NULL; pos=pos->Next) { 
     printf("\n%s\n\t", pos->Description); 
     printf("%2.2x", pos->Address[0]); 
     for (int i=1; i<pos->AddressLength; i++) 
      printf(":%2.2x", pos->Address[i]); 
    } 

    free(info); 
    return 0; 
} 

S'il vous plaît pardonnez l'ancien code C .. .

+0

Cela fonctionnait dans un projet par lui-même mais dans le projet avec winpcap que j'essayais de l'utiliser il y avait beaucoup d'erreurs de compilation dans netioapi.h – bobber205

Questions connexes