Jump to content

İstemci makinanın fiziksel adresi (mac address) nasıl alınır


muttalip65

Recommended Posts

Uygulamamda istemci makinanın fiziksel adresini almak istiyorum. İstemci makinanın IP adresini alabiliyoruz.

Bizim için gerekli olan sunucuya bağlanan bilgisayarların fiziksel adreslerini alabilmek. Bu konuda yardımlarınızı bekliyorum.

 

Şimdeden teşekkürler.

 

 

Link to comment
Share on other sites

Cause security reasons you can't make it through the browser unless you use browser specific features, but in a local network you can use the next function, you can use hostname or ip address, i've tested with ipv4 and it works (xe3).

 

function GetMacAddress(const AServerName : string) : string;
 type
      TNetTransportEnum = function(pszServer : PWideChar;
                                   Level : DWORD;
                                   var pbBuffer : pointer;
                                   PrefMaxLen : LongInt;
                                   var EntriesRead : DWORD;
                                   var TotalEntries : DWORD;
                                   var ResumeHandle : DWORD) : DWORD; stdcall;

     TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall;

     PTransportInfo = ^TTransportInfo;
      TTransportInfo = record
                        quality_of_service : DWORD;
                        number_of_vcs : DWORD;
                        transport_name : PWChar;
                        transport_address : PWChar;
                        wan_ish : boolean;
                      end;

var E,ResumeHandle,
     EntriesRead,
     TotalEntries : DWORD;
     FLibHandle : THandle;
     sMachineName,
     sMacAddr,
     Retvar : string;
     pBuffer : pointer;
     pInfo : PTransportInfo;
     FNetTransportEnum : TNetTransportEnum;
     FNetApiBufferFree : TNetApiBufferFree;
     pszServer : array[0..128] of WideChar;
     i,ii,iIdx : integer;
 begin
   sMachineName := trim(AServerName);
   Retvar := '00-00-00-00-00-00';

  // Add leading \\ if missing
   if (sMachineName <> '') and (length(sMachineName) = 2) then begin
     if copy(sMachineName,1,2) <> '\\' then
       sMachineName := '\\' + sMachineName
   end;

  // Setup and load from DLL
   pBuffer := nil;
   ResumeHandle := 0;
   FLibHandle := LoadLibrary('NETAPI32.DLL');

  // Execute the external function
   if FLibHandle <>0 then begin
     @FNetTransportEnum := GetProcAddress(FLibHandle,'NetWkstaTransportEnum');
     @FNetApiBufferFree := GetProcAddress(FLibHandle,'NetApiBufferFree');
     E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0,
                            pBuffer,-1,EntriesRead,TotalEntries,Resumehandle);

    if E = 0 then begin
       pInfo := pBuffer;

      // Enumerate all protocols - look for TCPIP
       for i := 1 to EntriesRead do begin
         if pos('TCPIP',UpperCase(pInfo^.transport_name)) <>0 then begin
           // Got It - now format result 'xx-xx-xx-xx-xx-xx'
           iIdx := 1;
           sMacAddr := pInfo^.transport_address;

          for ii := 1 to 12 do begin
             Retvar[iIdx] := sMacAddr[ii];
             inc(iIdx);
             if iIdx in [3,6,9,12,15] then inc(iIdx);
           end;
         end;

        inc(pInfo);
       end;
       if pBuffer  <>nil then FNetApiBufferFree(pBuffer);
     end;

    try
       FreeLibrary(FLibHandle);
     except
       // Silent Error
     end;
   end;

  Result := Retvar;
 end;

 

source:https://www.experts-exchange.com/questions/28333946/Delphi-How-to-Get-MAC-Address-from-Computer-on-LAN-if-I-Know-Its-Name.html

 

Hope it helps.

Link to comment
Share on other sites

  • 3 weeks later...

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...