сменить шлюз на на соиденении

Тема в разделе "WASM.NETWORKS", создана пользователем XshStasX, 1 авг 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    В общем нужно сменить шлюз на текущем соединении.
    Через SetIpForwardEntry можно сменить эти настройки.
    Но проблема в том что я не знаю какое именно соединение менять...
    Через GetIpForwardTable я получаю списки таблиц...
    Но там их очень много, и какую именно я использую для выхода в инет не знаю(...
    Как я понимаю нужно изменить(через GetIpForwardTable) одну из полученных таблиц, вопрос какую нужно менять ?...
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Проблема была решена таким способом:
    Код (Text):
    1. int SetGetway(const wchar_t *getway ){
    2.     char buf[128] = {0};
    3.  if(! WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,getway,-1,buf,sizeof(buf),(const char*)0,0) ) return 0;
    4.   DWORD size  = 0;
    5.   GetIpForwardTable(NULL,&size,true);
    6.   PMIB_IPFORWARDTABLE pTable = (PMIB_IPFORWARDTABLE)HeapAlloc(GetProcessHeap(),0,size);
    7.  if ( GetIpForwardTable(pTable,&size,true) != NO_ERROR) return 0;
    8.  for (DWORD i = 0; i<pTable->dwNumEntries; i++){
    9.      struct in_addr addr;
    10.      addr.S_un.S_addr = pTable->table[i].dwForwardDest;
    11.      if (pTable->table[i].dwForwardDest == 0/*! strcmp(ip,inet_ntoa(addr))*/ ){
    12.          DeleteIpForwardEntry(&pTable->table[i]);
    13.          addr.S_un.S_addr = inet_addr(buf);
    14.          pTable->table[i].dwForwardNextHop = addr.S_un.S_addr;
    15.          if( SetIpForwardEntry(&pTable->table[i]) == NO_ERROR) return 1;
    16.      };
    17.  };
    18.  return 0;
    19. };
    Надо только учесть что в некоторых случаях(при отсутствии основного шлюза), нужно самому добавить через CreateIpForwardEntry.