Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как узнать IP клиента и IP сервера для активного RAS-подключения?

01.01.2007
p0s0l

uses Ras, RasError;

type
 TRASIP = record
   dwSize: DWORD;
   dwError: DWORD;
   szIpAddress: packed array[0..RAS_MaxIpAddress] of AnsiChar;
   szServerIpAddress: packed array[0..RAS_MaxIpAddress] of AnsiChar;
 end;

procedure GetDialUpIpAddress(var server, client: string);
var
 RASPppIp: TRASIP;
 lpcp: DWORD;
 ConnClientIP: array[0..RAS_MaxIpAddress] of Char;
 ConnServerIP: array[0..RAS_MaxIpAddress] of Char;

 Entries: PRasConn;
 BufSize, NumberOfEntries, Res: DWORD;
 RasConnHandle: THRasConn;
begin
 New(Entries);
 BufSize := Sizeof(Entries^);
 ZeroMemory(Entries, BufSize);
 Entries^.dwSize := Sizeof(Entries^);

 Res := RasEnumConnections(Entries, BufSize, NumberOfEntries);
 if Res = ERROR_BUFFER_TOO_SMALL then
 begin
   ReallocMem(Entries, BufSize); 
   ZeroMemory(Entries, BufSize); 
   Entries^.dwSize := Sizeof(Entries^); 
   Res := RasEnumConnections(Entries, BufSize, NumberOfEntries); 
 end; 
 try 
   if (Res = 0) and (NumberOfEntries > 0) then RasConnHandle := Entries.hrasconn else exit
 finally 
   FreeMem(Entries); 
 end; 

 FillChar(RASPppIp, SizeOf(RASPppIp), 0);
 RASPppIp.dwSize := SizeOf(RASPppIp);
 lpcp := RASPppIp.dwSize;
 if RasGetProjectionInfo(RasConnHandle,
   RASP_PppIp, @RasPppIp, lpcp) = 0 then
 begin

   Move(RASPppIp.szServerIpAddress,
     ConnServerIP,
     SizeOf(ConnServerIP));
   Server := ConnServerIP;
   Move(RASPppIp.szIpAddress,
     ConnClientIP,
     SizeOf(ConnClientIP));
   client := ConnClientIP;
 end;
end;
Previous page:
Как преобразовать длинный IP-адрес в короткий адрес / порт?
Top:
DRKB
Next page:
Протокол TCP