Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция getIpAddrTableзаполняет указатель на структуру MIB_IPADDRTABLE с информацией о текущих IP-адресах, связанных с системой.
Чтобы использовать GetIpAddrTable
Объявите указатель на объект MIB_IPADDRTABLE с именем pIPAddrTable, а объект DWORD , называемый dwSize. Эти переменные передаются в качестве параметров функции 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 с проверкой общих ошибок и верните его значение в переменную dwRetVal типа DWORD (для более детальной проверки ошибок).
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