Управление IP-адресами с помощью GetIpAddrTable
Функция GetIpAddrTable заполняет указатель на структуру MIB_IPADDRTABLE сведениями о текущих IP-адресах, связанных с системой.
Использование GetIpAddrTable
Объявите указатель на объект MIB_IPADDRTABLEс именем pIPAddrTable и объект DWORDdwSize. Эти переменные передаются в качестве параметров в функцию GetIpAddrTable . Кроме того, создайте переменную DWORDс именем dwRetVal (используется для проверки ошибок).
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
Выделение памяти для структуры.
Примечание
Размер dwSize недостаточно для хранения информации. Перейдите к следующему шагу
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
Выполните начальный вызов GetIpAddrTable , чтобы получить необходимый размер в переменной dwSize .
Примечание
Этот вызов функции предназначен для сбоя и используется для обеспечения того, чтобы переменная dwSize указала размер, достаточный для хранения всех сведений, возвращенных pIPAddrTable. Это общая модель программирования для структур данных и функций этого типа.
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
Выполните второй вызов GetIpAddrTable с общей проверкой ошибок и верните его значение в переменную DWORDdwRetVal (для более сложной проверки ошибок).
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
Если вызов был выполнен успешно, получите доступ к данным из структуры данных pIPAddrTable .
printf("IP Address: %ld\n", pIPAddrTable->table[0].dwAddr); printf("IP Mask: %ld\n", pIPAddrTable->table[0].dwMask); printf("IF Index: %ld\n", pIPAddrTable->table[0].dwIndex); printf("Broadcast Addr: %ld\n", pIPAddrTable->table[0].dwBCastAddr); printf("Re-assembly size: %ld\n", pIPAddrTable->table[0].dwReasmSize);
Освободите память, выделенную для структуры pIPAddrTable .
if (pIPAddrTable) free(pIPAddrTable);
Примечание
Объекты DWORDdwAddr и dwMask возвращаются в виде числовых значений в порядке байтов узла, а не в порядке байтов сети. Эти значения не являются точками IP-адреса.
Следующий шаг. Управление арендами DHCP с помощью IpReleaseAddress и IpRenewAddress
Предыдущий шаг . Управление интерфейсами с помощью GetInterfaceInfo