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

Recuperation adresse mac c++


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut Recuperation adresse mac c++
    Bonjour,
    je veux récupérer l'adresse Mac de mon pc dans mon application c++, j'ai testé cette fonction il récupère l'adresse et l'affiché mais je veux mettre cette adresse dans une variable.
    qui peut m'aider svp

    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
    static void GetMACaddress(void)
    {
    	unsigned char MACData[8];						// Allocate data structure for MAC (6 bytes needed)
     
    	WKSTA_TRANSPORT_INFO_0 *pwkti;					// Allocate data structure for Netbios
    	DWORD dwEntriesRead;
    	DWORD dwTotalEntries;
    	BYTE *pbBuffer;
     
    	// Get MAC address via NetBios's enumerate function
    	NET_API_STATUS dwStatus = NetWkstaTransportEnum(
    		NULL,						// [in]  server name
    		0,							// [in]  data structure to return
    		&pbBuffer,					// [out] pointer to buffer
    		MAX_PREFERRED_LENGTH,		// [in]  maximum length
    		&dwEntriesRead,				// [out] counter of elements actually enumerated
    		&dwTotalEntries,			// [out] total number of elements that could be enumerated
    		NULL);						// [in/out] resume handle
    	assert(dwStatus == NERR_Success);
     
    	pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer;		// type cast the buffer
     
    	for(DWORD i=1; i< dwEntriesRead; i++)			// first address is 00000000, skip it
    	{												// enumerate MACs and print
    		swscanf((wchar_t *)pwkti[i].wkti0_transport_address, L"%2hx%2hx%2hx%2hx%2hx%2hx", 
    			&MACData[0], &MACData[1], &MACData[2], &MACData[3], &MACData[4], &MACData[5]);
    		PrintMACaddress(MACData);
     
     
    	}

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Il suffit de concaténer MACData dans un std::string avec l'opérateur +=.
    (Il faudra aussi faire une conversion unsigned char vers char.)

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    svp Ehonn comment concaténer MACData!!!!

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Je suis pas convaincu pour la conversion unsigned char [] vers char []. Mais voilà un code pour donner un exemple.

    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
    // g++ -Wall -Wextra -std=c++11 -pedantic main.cpp -o main && ./main
    // g++ -Wall -Wextra -pedantic main.cpp -o main && ./main
     
    #include <iostream>
     
    #include <string>
     
     
    int main()
    {
    	std::string mac;
     
    	// On récupère la mac
    	std::cout << "Récupération de la mac = ";
    	{
    		unsigned char MACData[8] = {0};
     
    		for (std::size_t i = 0; i < 6; ++i)
    		{
    			MACData[0] = '0' + i;
    			MACData[1] = 'a' + i;
     
    			if (i != 0) { std::cout << ":"; }
    			std::cout << MACData;
     
    			// Concaténation de MACData dans mac
    			mac += reinterpret_cast<char const * const>(MACData);
    		}
    		std::cout << std::endl;
    	}
     
    	// Affichage de la mac final
    	std::cout << "mac = " << mac << std::endl;
     
    	return 0;
    }
    Et voici la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Récupération de la mac = 0a:1b:2c:3d:4e:5f
    mac = 0a1b2c3d4e5f

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    J'ai pas réussi de trouver une solution pour ce problème, svp qui a une autre méthode de récupération d'adresse mac !!!

  6. #6
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Quel est ton souci ?
    Peut être que ce n'est pas la solution qui faut changer :rolleyes: lialalalou

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    slt Ehonn, la problème dans votre solution c'est la conversion de unsigned char [] vers char [].

    J'essayes de trouver un bout de code qui me permettrait de récupérer l'adresse mac. Je n'ai pas trouvé grand chose.
    J'espère que quelqu'un a déjà programmé une fonction comme ca ?

  8. #8
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Le reinterpret_cast ne fonctionne pas ? Tu as essayé de parcourir le tableau et convertir char par char ?

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Voila une imprime écran pour l'utilisation du reinterpret_cast, même résultat aussi lorsque j'ai parcourir le tableau
    Images attachées Images attachées  

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut Matwia

    Ton problème ne se situe pas dans la récupération de la valeur, mais dans son affichage. Tu récupères 6 unsigned char. Tu veux les afficher au format hexadécimal, il te faut donc effectuer une conversion un moment ou à un autre. Tu dois convertir un unsigned char en deux char distincts.

    Or toi tu print directement ton unsigned char sur la sortie, ce qui te donne tes caractères bizarre. Voici un bout de code qui met en évidence le problème:

    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
    #include <iostream>
     
    void extract_chars(unsigned char value, char& a, char& b) {
      b = "0123456789abcdef"[value % 16];
      value >>=4;
      a = "0123456789abcdef"[value % 16];
    }
     
    int main() {
      unsigned char value = 0xaf;
      std::cout << value << std::endl;
      char a, b;
      extract_chars(value, a, b);
      std::cout << a << b << std::endl;
      return 0;
    }
    Va afficher:

    Or ce que tu veux est bien la deuxième manière d'afficher. Tu dois donc adapter ta fonction PrintMACaddress pour qu'elle fasse cette conversion correctement.
    Find me on github

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    merci pour votre réponses,
    j'ai pas réussi de modifier cette fonction mais après des recherches j'ai trouvé une autre fonction avec return et tout ce passe bien
    Merci une autre fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recuperation adresse mac d'un poste distant
    Par tickerdu22 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 24/06/2010, 11h34
  2. recuperer adresse MAC
    Par mapmip dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/11/2009, 14h06
  3. Recuperer Adresse MAC dans un Edit Control
    Par Lyrix30 dans le forum Visual C++
    Réponses: 7
    Dernier message: 08/10/2008, 15h38
  4. Recuperer adresse Mac en vb.net
    Par niceen dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2008, 12h43
  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