Jump to content
uniGUI Discussion Forums
Sign in to follow this  
muttalip65

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

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.

 

 

Share this post


Link to post
Share on other sites

Imkansız. Güvenlik konuları    (google translate)

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

The server knows ONLY the public IP address of client, this how NAT works.

Share this post


Link to post
Share on other sites

Evet client ile server aynı networkde değil ise NAT protokolünden dolayı her zaman client lerin bağlı olduğu modemin MAC adresini alabilirsin. Modemin arkasında duran client lerin MAC larını alamazsın. (WEB Sayfası tarafından)

Share this post


Link to post
Share on other sites

hello. I'm trying a prgogram. a device is connected to the computer via ethernet. I want get TCP port informations this device

have a example?. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×