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

Delphi Discussion :

[D7], Comment Obtenir l'adresse MAC


Sujet :

Delphi

  1. #1
    iam
    iam est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Points : 72
    Points
    72
    Par défaut [D7], Comment Obtenir l'adresse MAC
    Salut tout le monde
    enfin j'ai trouvé sur le FAQ un programme qui récupère l'adresse physique de la carte reseau (MAC) :
    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
    uses 
      NB30; 
     
    function GetAdapterInfo(Lana: Char): String; 
    var 
      Adapter: TAdapterStatus; 
      NCB: TNCB; 
    begin 
      FillChar(NCB, SizeOf(NCB), 0); 
      NCB.ncb_command := Char(NCBRESET); 
      NCB.ncb_lana_num := Lana; 
      if Netbios(@NCB) <> Char(NRC_GOODRET) then 
      begin 
        Result := 'mac not found'; 
        Exit; 
      end; 
     
      FillChar(NCB, SizeOf(NCB), 0); 
      NCB.ncb_command := Char(NCBASTAT); 
      NCB.ncb_lana_num := Lana; 
      NCB.ncb_callname := '*'; 
     
      FillChar(Adapter, SizeOf(Adapter), 0); 
      NCB.ncb_buffer := @Adapter; 
      NCB.ncb_length := SizeOf(Adapter); 
      if Netbios(@NCB) <> Char(NRC_GOODRET) then 
      begin 
        Result := 'mac not found'; 
        Exit; 
      end; 
      Result := 
        IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' + 
        IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + 
        IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + 
        IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + 
        IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + 
        IntToHex(Byte(Adapter.adapter_address[5]), 2); 
    end; 
     
    function GetMACAddress: string; 
    var 
      AdapterList: TLanaEnum; 
      NCB: TNCB; 
    begin 
      FillChar(NCB, SizeOf(NCB), 0); 
      NCB.ncb_command := Char(NCBENUM); 
      NCB.ncb_buffer := @AdapterList; 
      NCB.ncb_length := SizeOf(AdapterList); 
      Netbios(@NCB); 
      if Byte(AdapterList.length) > 0 then 
        Result := GetAdapterInfo(AdapterList.lana[0]) 
      else 
        Result := 'mac not found'; 
    end;
    je l'ai pas compris car ces des instructions systemes jamais rencontrés, j'ai besoin de ce programme il marche mais il récupère le MAC seulement si le micro est connecté à un reseau local si non il m'affiche 'MAC not found' malgré qu'il y a une carte reseau dans le PC, moi je veux identifier le MAC meme si le PC est débranché du reseau
    merci

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je ne sais pas, mais tu penses vraiment qu'une carte réseau débranchée puisse possèder une adresse ?

    Je crois bien que ta question aurait plus sa place dans le forum "réseau"...
    Qu'en penses-tu ?
    De retour parmis vous après 10 ans!!

  3. #3
    iam
    iam est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Points : 72
    Points
    72
    Par défaut
    oui je te comprend, mais je ne vais pas utiliser cette adresse pour la finalité d'identifier un pc dans un reseau, j'ai un programme de protection du logiciel contre la copie et je veux identifier le pc dont je vais installer ce logiciel (application mono) par une reference unique, j'ai choisi le numéro de série de la carte réseau, je voulais avoir de celui du disque dur, mais j'ai pas trouvé, meme du microprocesseur, j'espère que vous me comprenez, merci infiniment

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Salut !

    @Sub0 : désolé, mais *toute* carte réseau a une MAC address (c'est dans le hardware). (ps perso: le wav ça avance...)

    @iam :
    1. attention au fait que si tu changes la carte réseau pour une raison quelconque, tu changes la MAC address et donc ton prog va faire la gueule !
    2. pour la trouver sans utiliser Netbios (qui a besoin de la couche réseau démarrée), jette un oeil à cet outil.

    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Iam !

    Voici un bout de code qui te permettra de récupérer l'addr MAC de ta carte réseau.

    Le code original n'est pas de moi, et si mes souvenirs sont bons, je l'avais récupéré chez Phidels.com.

    La fonction NBMac te donne le nombre de cartes réseaux sur ta machine.
    La fonction GetMac(No) te renvoie l'addresse MAC de la carte (No de 0 à NbCarte - 1).

    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
    131
    132
    133
    134
    135
     
    unit MAC;
     
    interface
     
    uses
      Windows, SysUtils;
     
    const
      MAX_INTERFACE_NAME_LEN = 256;
      MAXLEN_PHYSADDR = 8;
      MAXLEN_IFDESCR = 256;
     
      MAX_ADAPTER_ADDRESS_LENGTH = 8;
     
      ANY_SIZE = 1;
     
    type
      TMacAddress = array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;
     
      PTMibIfRow = ^TMibIfRow;
      TMibIfRow = packed record
        wszName: array[1..MAX_INTERFACE_NAME_LEN] of WCHAR;
        dwIndex: DWORD;
        dwType: DWORD;
        dwMTU: DWORD;
        dwSpeed: DWORD;
        dwPhysAddrLen: DWORD;
        bPhysAddr: array[1..MAXLEN_PHYSADDR] of byte;
        dwAdminStatus: DWORD;
        dwOperStatus: DWORD;
        dwLastChange: DWORD;
        dwInOctets: DWORD;
        dwInUcastPkts: DWORD;
        dwInNUCastPkts: DWORD;
        dwInDiscards: DWORD;
        dwInErrors: DWORD;
        dwInUnknownProtos: DWORD;
        dwOutOctets: DWORD;
        dwOutUCastPkts: DWORD;
        dwOutNUCastPkts: DWORD;
        dwOutDiscards: DWORD;
        dwOutErrors: DWORD;
        dwOutQLen: DWORD;
        dwDescrLen: DWORD;
        bDescr: array[1..MAXLEN_IFDESCR] of char; //byte;
      end;
     
      TMIBIfArray = array of TMIBIFRow;
     
      PTMibIfTable = ^TMIBIfTable;
      TMibIfTable = packed record
        dwNumEntries: DWORD;
        Table: array[0..ANY_SIZE - 1] of TMibIfRow;
      end;
     
    function GetIfTable(pIfTable: PTMibIfTable; pdwSize: PULONG;
                        bOrder: boolean ): DWORD; stdcall; external 'IPHLPAPI.DLL';
     
    function GetMac(No: Integer): String;
    function NbMac: Integer;
     
     
     
    implementation
     
    //------------------------------------------------------------------------------
    function MacAddr2Str(MacAddr: TMacAddress; size: integer): string;
    var
      i: integer;
    begin
      if Size = 0 then
      begin
        Result := '00-00-00-00-00-00';
        Exit;
      end
      else Result := '';
      //
      for i := 1 to Size do
        Result := Result + IntToHex(MacAddr[i], 2) + '-';
      Delete(Result, Length(Result), 1);
    end;
    //------------------------------------------------------------------------------
    procedure Get_IfTableMIB( var MIBIfArray: TMIBIfArray );
    var
      i, Error, TableSize: integer;
      pBuf: PChar;
      NumEntries: DWORD;
    begin
      TableSize := 0;
      pBuf := '';
      NumEntries := 0;
       // first call: get memsize needed
      Error := GetIfTable(PTMibIfTable(pBuf), @TableSize, false );
      if Error <> ERROR_INSUFFICIENT_BUFFER then
        EXIT;
      GetMem(pBuf, TableSize);
     
       // get table pointer
      Error := GetIfTable(PTMibIfTable(pBuf), @TableSize, false);
      if Error = NO_ERROR then
      begin
        NumEntries := PTMibIfTable(pBuf)^.dwNumEntries;
        if NumEntries > 0 then
        begin
          SetLength(MIBIfArray, NumEntries);
          inc(pBuf, SizeOf(NumEntries));
          for i := 0 to pred(NumEntries) do
          begin
            MIBIfArray[i] := PTMibIfRow(pBuf)^;
            inc(pBuf, SizeOf(TMIBIfRow));
          end;
        end
      end;
      dec(pBuf, SizeOf(DWORD) + NumEntries * SizeOf(TMIBIfRow));
      FreeMem(pBuf);
    end;
    //------------------------------------------------------------------------------
    function NbMac: Integer;
    var
      MibArr: TMibIfArray;
    begin
      Get_IfTableMIB(MibArr);
      result := High(MIBArr);
    end;
    //------------------------------------------------------------------------------
    function GetMac(No: Integer): String;
    var
      MibArr: TMibIfArray;
    begin
      Get_IfTableMIB(MibArr);
      result := MacAddr2Str(TMacAddress(MIBArr[No].bPhysAddr), MIBArr[No].dwPhysAddrLen);
    end;
    //------------------------------------------------------------------------------
    end.

    Mais n'oublies pas la remarque judicieuse de Jipété
    Citation Envoyé par Jipété
    attention au fait que si tu changes la carte réseau pour une raison quelconque, tu changes la MAC address et donc ton prog va faire la gueule !
    [edit]
    J'ajouterais que toutes les machines ne possèdent pas forcément une carte réseau, même si c'est de plus en plus rare.
    [/edit]

    @+ Claudius

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Yep !
    je l'avais récupéré chez Phidels.com
    Probable, mais ça ressemble furieusement à un extrait du lien que j'ai passé (je le sais pour avoir participé [un tout petit chouia] à la fin du projet).

    L'outil Magsys renvoie tout un tas d'infos réseau intéressantes.
    HTH,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par Jipété
    Probable, mais ça ressemble furieusement à un extrait du lien que j'ai passé
    Ben d'un côté il n'y a pas 36 milles façons d'utiliser les APIs, mais je dirais que tu as furieusement raison.

    @+ Claudius

  8. #8
    iam
    iam est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 197
    Points : 72
    Points
    72
    Par défaut
    merci Claudius et jipété pour vos conseils et participation, je suis vraiment reconnaissant, une petite question pour Claudius :
    est ce que je doit créer l'unité MAC ou je peux utiliser directement la fonction GETMAC(No), je ne te cache pas claudius, je n'ai absoluement rien compris dans ce programme, t'as une idée comment comprendre un peu ces trucs là, ou bien une URL ou je peut me documenter sur ça, caludius est ce qu'il y a aussi dans ce site que tu as récupéré ce programme de MAC phidel comment avoir le N° de série du CPU?
    merci et @+

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par iam
    est ce que je doit créer l'unité MAC ou je peux utiliser
    directement la fonction GETMAC(No)?
    Tu fais comme tu veux, mais à mon avis le plus simple est de de créer l'unité MAC.pas et de l'inclure à ton projet. Tu pourras ainsi plus facilement la réutiliser dans d'autres projets.


    Citation Envoyé par iam
    je ne te cache pas claudius, je n'ai absoluement rien compris dans ce programme, t'as une idée comment comprendre un peu ces trucs là, ou bien une URL ou je peut me documenter sur ça
    En ce qui concerne les APIs, une seule réponse MSDN. Fais une recherche sur GetIfTable.


    Citation Envoyé par iam
    caludius est ce qu'il y a aussi dans ce site que tu as récupéré ce programme de MAC phidel comment avoir le N° de série du CPU?
    merci et @+
    Non je n'ai rien de vu de la sorte, désolé !

    @+ Claudius

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 303
    Points
    11 303
    Billets dans le blog
    6
    Par défaut
    en assembleur, tu as CPUID qui renvoie l'id Intel si EAX=0 (dans EAX seulement ? ou aussi dans les autres registres ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    asm
      MOV EAX, 0
      CPUID
      MOV variable, EAX
    end;
    à tester
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Pour les infos sur le CPU, tu devrais peut-être trouver ton bonheur dans les sources de Nono40:

    @+ Claudius

Discussions similaires

  1. Comment obtenir l'adresse MAC d'une carte réseau déconnectée ?
    Par ZZZEvelyne dans le forum Web & réseau
    Réponses: 6
    Dernier message: 10/01/2014, 23h28
  2. Obtenir l'adresse mac de sa carte reseau
    Par kivoch dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/11/2009, 18h30
  3. Comment obtenir une adresse mac sur python
    Par Wael Maaoui dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/02/2007, 13h52
  4. Obtenir l'adresse MAC réelle
    Par gpetto dans le forum Réseau
    Réponses: 16
    Dernier message: 03/11/2003, 16h56
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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