Как определить индекс интерфеса удаленного соединения?
От: Hekus  
Дата: 29.05.07 20:22
Оценка:
С помощью GetAdaptersInfo получаю список активных сетевых интефесов, могу по ним получить любую информацию.
Также с помощью RasEnumConnections и далее RasGetProjectionInfo получаю список установленных соединений и их параметры (тип различен: isdn, vpn)

Так вот, как можно определить какой из сетевых интерфесов соотвествует каждому из установленных соединений?
Re: Как определить индекс интерфеса удаленного соединения?
От: Decoy Литва  
Дата: 30.05.07 20:19
Оценка:
Здравствуйте, Hekus, Вы писали:

H>С помощью GetAdaptersInfo получаю список активных сетевых интефесов, могу по ним получить любую информацию.

H>Также с помощью RasEnumConnections и далее RasGetProjectionInfo получаю список установленных соединений и их параметры (тип различен: isdn, vpn)

H>Так вот, как можно определить какой из сетевых интерфесов соотвествует каждому из установленных соединений?


Может стоит привести код, как вы перечисляете соединения, возможно и поможем...
Re[2]: Как определить индекс интерфеса удаленного соединения
От: Аноним  
Дата: 31.05.07 11:24
Оценка:
Здравствуйте, Decoy, Вы писали:

D>Может стоит привести код, как вы перечисляете соединения, возможно и поможем...



  _IP_ADAPTER_INFO = record
    Next: PIP_ADAPTER_INFO;
    ComboIndex: DWORD;
    AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
    Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
    AddressLength: UINT;
    Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
    Index: DWORD;
    Type_: UINT;
    DhcpEnabled: UINT;
    CurrentIpAddress: PIP_ADDR_STRING;
    IpAddressList: IP_ADDR_STRING;
    GatewayList: IP_ADDR_STRING;
    DhcpServer: IP_ADDR_STRING;
    HaveWins: BOOL;
    PrimaryWinsServer: IP_ADDR_STRING;
    SecondaryWinsServer: IP_ADDR_STRING;
    LeaseObtained: time_t;
    LeaseExpires: time_t;
  end;

  tagRASCONNA = record
    dwSize: DWORD;
    hrasconn: THRasConn;
    szEntryName: packed array[0..RAS_MaxEntryName] of AnsiChar;
    szDeviceType: packed array[0..RAS_MaxDeviceType] of AnsiChar;
    szDeviceName: packed array[0..RAS_MaxDeviceName] of AnsiChar;
    szPhonebook: array[0..MAX_PATH-1] of AnsiChar;
    dwSubEntry: DWORD;
    guidEntry: TGUID;
  end;

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



procedure GetAddapterList;
var
  PAdapter, PMem: PipAdapterInfo;
  OutBufLen: Cardinal;
begin
  VVGetAdaptersInfo(PAdapter, OutBufLen);
  PMem := PAdapter;
  try
    Finalize(AddapterList);
    while PAdapter <> nil do
      begin
        SetLength(AddapterList, High(AddapterList)+2);
        CopyMemory(@AddapterList[High(AddapterList)].AdapterInfo, PAdapter, SizeOf(TipAdapterInfo) );
        PAdapter := PAdapter.Next;
      end;
  finally
    if PAdapter <> nil then
      Freemem(PMem, OutBufLen);
  end;
end;


procedure GetActiveConnections;
var Entries, RasConn : PRasConn;
    BufSize, NumberOfEntries, Res, BufSize2: Cardinal;
    i : Integer;
    RasPPPIP : PRasPPPIP;
begin
 Finalize(ActiveConnections);
 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
    RasCheck(Res);
    RasConn := Entries;
    for I := 0 to NumberOfEntries-1 do
    begin
     New(RasPPPIP);
     BufSize2:=SizeOf(RasPPPIP^);
     ZeroMemory(RasPPPIP,BufSize2);
     RasPPPIP.dwSize := Sizeof(RasPPPIP^);
     Res:=RasGetProjectionInfo(RasConn.HRASConn, RASP_PPPIP, RasPPPIP, BufSize2);
     if Res <> ERROR_BUFFER_TOO_SMALL then RasCheck(Res);
     SetLength(ActiveConnections, High(ActiveConnections)+2);
     ActiveConnections[High(ActiveConnections)].RasConn:=AllocMem(SizeOf(RasConn^));
     CopyMemory(ActiveConnections[High(ActiveConnections)].RasConn,RasConn,SizeOf(RasConn^));
     ActiveConnections[High(ActiveConnections)].RasPPPIP:=AllocMem(SizeOf(RasPPPIP^));
     CopyMemory(ActiveConnections[High(ActiveConnections)].RasPPPIP,RasPPPIP,SizeOf(RasPPPIP^));
     FreeMem(RasPPPIP);
     Inc(RasConn);
    end;
  finally
    FreeMem(Entries);
  end;
end;



Нужно определить какому из установленных соединений ActiveConnections соответсвует интерфейс из списка AdapterList

пример результата работы этих 2-х процедур:


AdapterList:

Interface: {8280E293-327E-4258-B217-48BFCDFC6D3A}
 Index:   0x2
 Name:     Realtek RTL8139 Family PCI Fast Ethernet NIC - Packet Scheduler Miniport
 IP:       10.64.68.113
 Mask:     255.255.255.0

Interface: {BBB925F2-AB7D-4658-9E87-91CDEEDE4B2B}
 Index:   0x3
 Name:     NVIDIA nForce Networking Controller - Packet Scheduler Miniport
 IP:       192.168.0.1
 Mask:     255.255.255.0

Interface: {AC519345-1014-44C1-B6A6-D497E8251DE9}
 Index:   0xA0005
 Name:     WAN (PPP/SLIP) Interface
 IP:       172.27.156.195
 Mask:     255.255.255.255

Interface: {3497EB5E-6CB6-470D-91B1-96F6D844CCCE}
 Index:   0xB0006
 Name:     WAN (PPP/SLIP) Interface
 IP:       10.231.2.116
 Mask:     255.255.255.255


ActiveConnections:

Name:    Ufanet local
 Handle: 0x70000
 Type:   VPN
 Device: WAN Miniport (PPTP)
 IP:     172.27.156.195
 Server: 10.8.0.8

Name:    ZyXEL ADSL Link
 Handle: 0x80000
 Type:   ISDN
 Device: ZyXEL OMNI ADSL USB (Annex A / WAN adapter)
 IP:     10.231.2.116
 Server: 62.133.173.1


Таким образом соединению Ufanet local соотвествует интерфейс с индексом 0xA0005. Для ZyXEL ADSL Link соотвественно 0xB0006.
Вот это и нужно как-то связать.
Re[3]: Как определить индекс интерфеса удаленного соединения
От: Hekus  
Дата: 31.05.07 11:26
Оценка:
выше был я, забыл залогинться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.