begin process at 2012 05 29 19:52:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Obtenir une mac adresse en c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Obtenir une mac adresse en c++

dimanche 21 juin 2009 à 18:53:10 | Obtenir une mac adresse en c++

Xantra

Bonjour,
Je cherche un code permettant de récupérer la mac adresse de la carte réseau numéro 1 d'un pc. Après une journée de recherche je commence a croire que c'est impossible, tout les codes que je trouve ne fonctionne pas.
Je code avec Code Blocks en C++ une appli Win32.
Merci d'avance.
dimanche 21 juin 2009 à 20:12:13 | Re : Obtenir une mac adresse en c++

Xantra

Mieu encore, si je pouvais récupérer le numéro de série du CPU. Ce que je sais c'est que c'est possible, voir ici : http://www.cppfrance.com/codes/TAG-CLE-UNIQUE_47949.aspx
Mais j'ai pas assez de connaissance pour y extraire juste ce qu'il me faut. Trop complexe sont code.
Quelqu'un peu m'aider pour récupérer le numero de serie du CPU?
Merci d'avance.
dimanche 21 juin 2009 à 21:58:52 | Re : Obtenir une mac adresse en c++

BruNews

Administrateur CodeS-SourceS

#include <windows.h>
#include <rpc.h>
#pragma comment(lib, "Rpcrt4.lib")

char szappname[] = "MacAddress";

__declspec(naked) char* __fastcall bnbhex(unsigned int value, char* pdst)
{ // ECX = value, EDX = pdst
  __asm {
    add       edx, 2
    mov       al, cl
    mov       byte ptr[edx], 0
    and       al, 15
    shr       cl, 4
    add       al, 48
    cmp       al, 57
    jbe       short btohx1
    add       al, 7
 btohx1:
    add       cl, 48
    mov       [edx-1], al
    cmp       cl, 57
    mov       eax, edx
    jbe       short btohx2
    add       cl, 7
 btohx2:
    mov       [edx-2], cl
    ret       0
  }
}

void __stdcall DireMacAddress()
{ //00-E0-81-51-4B-52
  UUID gd;
  char buf[20], *c;
  if(UuidCreateSequential(&gd)) goto errMAC;
  c = bnbhex(gd.Data4[2], buf);
  *c++ = '-';
  c = bnbhex(gd.Data4[3], c);
  *c++ = '-';
  c = bnbhex(gd.Data4[4], c);
  *c++ = '-';
  c = bnbhex(gd.Data4[5], c);
  *c++ = '-';
  c = bnbhex(gd.Data4[6], c);
  *c++ = '-';
  bnbhex(gd.Data4[7], c);
  goto goDIRE;
errMAC:
  *((DWORD*) buf) = 'ERRE';
  *((DWORD*) (buf+4)) = 'RU';
goDIRE:
  MessageBox(0, buf, szappname, 0);
}


ciao...
BruNews, MVP VC++

lundi 22 juin 2009 à 01:49:38 | Re : Obtenir une mac adresse en c++

Xantra

Houa, je suis gâté, mais malheureusement mon compilo n'est pas de cette avis.
La ligne   "__asm {" renvoi l'erreur suivant "error: expected `(' before '{' token"
Il n'y a pas autre chose que librpcrt4.a à linker? Ou un autre .h a inclure?
lundi 22 juin 2009 à 09:04:56 | Re : Obtenir une mac adresse en c++

BruNews

Administrateur CodeS-SourceS
VC++ Express est gratuit.
Pour faire du Windows, on utilise des outils Windows.

ciao...
BruNews, MVP VC++
mardi 30 juin 2009 à 10:22:13 | Re : Obtenir une mac adresse en c++

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Pour ce qui est de l'adresse mac...
Trois méthodes sont présentées ici, dont la méthode de BruNews (UuidCreateSequential inclus l'adresse mac dans le numéro unique généré) et la méthode de f_l_a_s_h_b_a_c_k (Utilisation de la fonction NetBios).

La méthode de BruNews nécessite Windows 2000 ou plus, UuidCreate pouvant servir pour les versions précédentes.

La méthode de f_l_a_s_h_b_a_c_k ne fonctionne pas sous Vista et Windows server 2008.

La troisième méthode proposée, GetAdaptaterInfo, fonctionne à partir de Windows 2000.

Il y a une quatrième méthode en passant par la classe WMI Win32_NetworkAdapterConfiguration, qui propose une propriété MACAddress. Exemple d'utilisation de WMI en C ici.

Concernant "le numéro de série du CPU"...
Je ne crois pas qu'il soit récupérable de manière logiciel, sauf exceptions. Dans le source de f_l_a_s_h_b_a_c_k, l'instruction cpuid est exécutée après avoir mis eax à 1. Autrement dit, il récupère des informations sur les capacités du processeur, pas un numéro unique ou de série. On demande le numéro de série en lui mettant eax à 3 avant d'appeler cpuid. Mais cela ne fonctionne que sur certains processeurs (cf wikipedia).

Côté WMI, la classe Win32_Processor propose ProcessorId qui correspond à cpuid avec eax = 1 (Donc je le rappelle, pas du tout à un ID, mais aux fonctionnalités disponibles). Elle propose aussi UniqueId, mais cette propriété est à null partout où je l'ai essayé. Elle correspond très certainement à cpuid avec eax = 3.

Voilà un petit script vbscript qui affiche l'adresse MAC (Ou les adresses MAC) ainsi que les info sur le processeur via WMI (Donc c'est très lent). Encore une fois, pour une traduction en C, voir cette source.

Mettre ce code dans un fichier .vbs. Double cliquer dessus, ou lancer une invite de commande et taper :
cscript /nologo NomDuFichiervbs.vbs

Dim objWMIService
Dim objProcessors
Dim objProcessor
Dim objNetworkConfigs
Dim objNetworkConfig

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objProcessor In objProcessors
  Wscript.Echo "DeviceId = " & objProcessor.DeviceId
  Wscript.Echo "Name = " & objProcessor.Name
  Wscript.Echo "Caption = " & objProcessor.Caption
  Wscript.Echo "Manufacturer = " & objProcessor.Manufacturer
  Wscript.Echo "MaxClockSpeed = " & objProcessor.MaxClockSpeed
  Wscript.Echo "ProcessorId = " & objProcessor.ProcessorId
  Wscript.Echo "UniqueId = " & objProcessor.UniqueId
  Wscript.Echo vbCrLf
Next

Set objNetworkConfigs = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
For Each objNetworkConfig In objNetworkConfigs
  If objNetworkConfig.IPEnabled Then
    Wscript.Echo "Description = " & objNetworkConfig.Description
    Wscript.Echo "MACAddess = " & objNetworkConfig.MACAddress
    Wscript.Echo vbCrLf
  End If
Next



Cette discussion est classée dans : code, mac, adresse, obtenir


Répondre à ce message

Sujets en rapport avec ce message

Obtenir l'adresse MAC d'une IP [ par metos ] Bonjour à tous,     J'ai une adresse IP, et je souhaiterais obtenir l'adresse MAC. Comment peut-on le faire en C?Merci d'avancemetos Obtenir adress mac local + ca marche à moitié.... [ par emmanuel9 ] Bonjour, J'aurais souhaité récupéré l'adresse mac de ma machine, j'ai essayé le code suivant (c++ managé)String*  machineMacAddress = "";ManagementCla Le code binaire d'une variable [ par tybow ] Hello, Petite question: Existe-t-il une fonction qui permette d'obtenir le code binaire d'une variable? Petit exemple pour me faire comprendre: So VirtualProtect qui crash [ par TryToHelpMe ] Bonjour, après avoir lu plusieurs sources de ce site sur le hook de l'API, j'essaye de réaliser ma propre source, pour bien comprendre comment cela fo recherche de docs [ par spiky31 ] Bonjour Apres avoir vu le code source de BruNews a cette adresse : http://www.cppfrance.com/code.aspx?ID=25566 (Rippage de cd audio) j'ai essayé de c supercript [ par Spy20 ] Bonjour,après mais très nombreuses recherches je n'ai toujours pas réussi à trouver une solution.Je souhaiterais afficher dans une console windows des Trouver l'adresse mac d'une connection à partir du serveur [ par wizard512 ] Bonjour,   Je souhaiterais savoir si quelqu'un s'aurais comment  récupéré l'adresse mac d'un programme client se connectant sur  un p Magic Packet [ par jerem3000 ] Bonjour, Je recherche des information sur le Magic Packet ( pour allumer a distance les pc compatible a partir de leur adresse mac ) Je sais que plei commet utiliser packetX [ par merieming ] [b]salut tout le monde [/b][b]SVP aidez moi urgent;[/b] j'est installé barland c++ builder 5 et PacketX et Winpcap sous windows xp pack 2; mon projet: Obtenir IP avec email [ par goutbouyo ] Salut, J'ai fait un chat multiclient pour windows. Le problème c'est qu'il faut que chaque client rentre l'adresse IP de la personne avec qui il veut


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,585 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales