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

Previous  Top  Next

    
 

 

 

Code:

uses Ras, RasError;

 

{©Drkb v.3(2007): www.drkb.ru}

 

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;

 

 

©Drkb::03355

Автор: p0s0l

Взято с Vingrad.ru http://forum.vingrad.ru