Get MAC (Ethernet) Address of NIC

Lord Soth

In case there are mote than one NIC (Network Interface Card) the coe gives the MAC of the first adapter. You can change the 0 on the line qoted below to take the MAC of other NICs if present.

"Result := GetAdapterInfo(AdapterList.lana[0]) "

900 Views
About the Author

Ms. in Computer Engineering, MCSE, CCNA, Expert Rating Delphi Expert, etc...

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; 

// usage
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetMACAddress);
end;