Thema: Delphi MAC Adresse ermitteln

Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 

MAC Adresse ermitteln

  Alt 12. Jun 2002, 09:27
Hi DPler,

diesen Beitrag habe ich erstmalig bei delphi3000.com am 9.3.2001 veröffentlich. Nach und nach werde ich einige Beiträge von dort hier einbringen.

Das Original ist aus der Borland Community und in C++. Die Umwandlung nach Delphi stammt aus meiner Feder

Die MAC Adresse kann i.a. dazu genutzt werden, um einen Computer ein-ein-deutig zu identifizieren. Jedoch gibt es inzwischen einige, wenige Netzwerkkarten, welche eine Manipulation der MAC Adresse zulassen. Das bringt uns noch dazu: Nur Rechner mit einer Netzwerkkarte haben eine MAC Adresse, da dieser auf den Netzwerkkarten gespeichert ist.

Nächste Einschränkung: Die Lösung funktioniert ausschliesslich auf Windows Rechnern (getestet unter NT4/2000 Server; Delphi 5 Entp.), auf welchen auch das NetBIOS Protokoll installiert ist.

Der Code ist eigentlich recht simpel und hat daher keine Kommentare. Ein Hinweis sei mir aber noch gestattet. Die Unit NB30 muss in die uses Klausel aufgenommen werden.

Delphi-Quellcode:
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;
Viel Spass...

[edit=flomei]Wir "räumen auf", daher Titel geändert... Mfg, flomei[/edit]
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat