muttalip65 Posted October 19, 2017 Share Posted October 19, 2017 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 More sharing options...
mhmda Posted October 19, 2017 Share Posted October 19, 2017 Imkansız. Güvenlik konuları (google translate) Link to comment Share on other sites More sharing options...
pedrisco Posted October 19, 2017 Share Posted October 19, 2017 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 More sharing options...
mhmda Posted October 19, 2017 Share Posted October 19, 2017 The server knows ONLY the public IP address of client, this how NAT works. Link to comment Share on other sites More sharing options...
multimesut Posted October 20, 2017 Share Posted October 20, 2017 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) Link to comment Share on other sites More sharing options...
ismailt35 Posted November 5, 2017 Share Posted November 5, 2017 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?. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now