Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

не дали пообщаться...   Найти похожие ветки 

 
Ketmar ©   (2007-03-30 11:20) [0]

ну и ладно. тогда скажите, как определить gateway по умолчанию. правда ли, что GetIpForwardTable() возвращает его первым?


 
Ketmar ©   (2007-03-30 11:39) [1]

таки серьёзно спрашиваю. по моим наблюдениям -- первым. просьба проверить на машинах со шлюзами...


 
Рамиль ©   (2007-03-30 12:07) [2]

Так код давай, проверю, писать лень:)


 
Ketmar ©   (2007-03-30 12:11) [3]

#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */

/* variables used for GetIfForwardTable */
PMIB_IPFORWARDTABLE pIpForwardTable;
DWORD dwSize = 0;
DWORD dwRetVal = 0;

char szDestIp[128];
char szMaskIp[128];
char szGatewayIp[128];

struct in_addr IpAddr;

int i;

pIpForwardTable = (MIB_IPFORWARDTABLE*) MALLOC(sizeof(MIB_IPFORWARDTABLE));
if (pIpForwardTable == NULL) {
   printf("Error allocating memory\n");
   return 1;
}

if (GetIpForwardTable(pIpForwardTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
   FREE(pIpForwardTable);
   pIpForwardTable = (MIB_IPFORWARDTABLE*) MALLOC(dwSize);
   if (pIpForwardTable == NULL) {
       printf("Error allocating memory\n");
       return 1;
   }
}

/* Note that the IPv4 addresses returned in
* GetIpForwardTable entries are in network byte order
*/
if ((dwRetVal = GetIpForwardTable(pIpForwardTable, &dwSize, 0)) == NO_ERROR) {
   printf("\tNumber of entries: %d\n", (int) pIpForwardTable->dwNumEntries);
   for (i = 0; i < (int) pIpForwardTable->dwNumEntries; i++) {
       /* Convert IPv4 addresses to strings */
       IpAddr.S_un.S_addr = (u_long) pIpForwardTable->table[i].dwForwardDest;
       strcpy_s(szDestIp, sizeof(szDestIp), inet_ntoa(IpAddr) );
       IpAddr.S_un.S_addr =  (u_long) pIpForwardTable->table[i].dwForwardMask;
       strcpy_s(szMaskIp, sizeof(szMaskIp), inet_ntoa(IpAddr) );
       IpAddr.S_un.S_addr = (u_long) pIpForwardTable->table[i].dwForwardNextHop;
       strcpy_s(szGatewayIp, sizeof(szGatewayIp), inet_ntoa(IpAddr) );

       printf("\n\tRoute[%d] Dest IP: %s\n", i, szDestIp);
       printf("\tRoute[%d] Subnet Mask: %s\n", i, szMaskIp);
       printf("\tRoute[%d] Next Hop: %s\n", i, szGatewayIp);
       printf("\tRoute[%d] If Index: %ld\n", i, pIpForwardTable->table[i].dwForwardIfIndex);
       printf("\tRoute[%d] Type: %ld\n", i, pIpForwardTable->table[i].dwForwardType);
       printf("\tRoute[%d] Proto: %ld\n", i, pIpForwardTable->table[i].dwForwardProto);
       printf("\tRoute[%d] Age: %ld\n", i, pIpForwardTable->table[i].dwForwardAge);
       printf("\tRoute[%d] Metric1: %ld\n", i, pIpForwardTable->table[i].dwForwardMetric1);
   }
   FREE(pIpForwardTable);
   return 0;
}
else {
   printf("\tGetIpForwardTable failed.\n");
   FREE(pIpForwardTable);
   return 1;
}


(ц) msdn %-)


 
Ketmar ©   (2007-03-30 12:12) [4]

IPv6 не интересует, только IPv4. надо для NAT-PMP. %-)


 
Ketmar ©   (2007-03-30 12:13) [5]

зыж да, я пишу на цэ. %-( потому и код такой. %-)


 
easy ©   (2007-03-30 12:58) [6]

проверил - получился тот же route print, первым - DG, который DHCP раздаёт


 
easy ©   (2007-03-30 13:01) [7]

program dg;

{$APPTYPE CONSOLE}

uses
 windows, winsock;

type
 PMIB_IPFORWARDROW = ^MIB_IPFORWARDROW;
 MIB_IPFORWARDROW = record
   dwForwardDest: DWORD;
   dwForwardMask: DWORD;
   dwForwardPolicy: DWORD;
   dwForwardNextHop: DWORD;
   dwForwardIfIndex: DWORD;
   dwForwardType: DWORD;
   dwForwardProto: DWORD;
   dwForwardAge: DWORD;
   dwForwardNextHopAS: DWORD;
   dwForwardMetric1: DWORD;
   dwForwardMetric2: DWORD;
   dwForwardMetric3: DWORD;
   dwForwardMetric4: DWORD;
   dwForwardMetric5: DWORD;
 end;

 PMIB_IPFORWARDTABLE = ^MIB_IPFORWARDTABLE;
 MIB_IPFORWARDTABLE = record
   dwNumEntries: DWORD;
   table: array[0..255 - 1] of MIB_IPFORWARDROW;
 end;
var
 pIpForwardTable: PMIB_IPFORWARDTABLE;
 dwSize: ULONG;
 bOrder: boolean;
 dwStatus: DWORD;
 i: integer;
 addr: TInAddr;

function GetIpForwardTable(pIpForwardTable: PMIB_IPFORWARDTABLE;
 var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall; external "IPHLPAPI.DLL";

begin
 dwSize := 0;
 if GetIpForwardTable(nil, dwSize, bOrder) = ERROR_INSUFFICIENT_BUFFER then
 begin
   GetMem(pIpForwardTable, dwSize);
   try
     dwStatus := GetIpForwardTable(pIpForwardTable, dwSize, bOrder);
     if dwStatus = ERROR_SUCCESS then
     begin
       for i := 0 to pIpForwardTable.dwNumEntries - 1 do
       begin
         addr.S_addr := pIpForwardTable.table[i].dwForwardNextHop;
         WriteLn(inet_ntoa(addr));
       end;
     end;
   finally
     FreeMem(pIpForwardTable);
   end;
 end;
 WriteLn("");
 WriteLn("Press Enter");
 Readln;
end.


 
Ketmar ©   (2007-03-30 13:04) [8]

tnx. гут. просто я в проект вмонтировал с расчётом, что оно именно так. проверял лишь на vmware. именно DG мне и нужен.

зыж если у кого будет не так (кому не лениво проверить) -- просьба отписать ситуацию и конфиг. tnx.



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
6-1161955996
Free_Breeze
2006-10-27 17:33
2007.04.22
Вопрос по фреймам


2-1175095227
MaLoY
2007-03-28 19:20
2007.04.22
Помогите с задачкой


8-1148316794
Vasiliy
2006-05-22 20:53
2007.04.22
Подскажите как воспроизвести AVI на Texture:IDIRECT3DTEXTURE8


15-1174843678
leonidus
2007-03-25 21:27
2007.04.22
Помогите написать алгоритм перебора


9-1148094309
Cash
2006-05-20 07:05
2007.04.22
Быстрое сравнение картинок