Поделиться через


Управление IP-адресами с помощью GetIpAddrTable

Функция GetIpAddrTable заполняет указатель на структуру MIB_IPADDRTABLE сведениями о текущих IP-адресах, связанных с системой.

Использование GetIpAddrTable

  1. Объявите указатель на объект MIB_IPADDRTABLEс именем pIPAddrTable и объект DWORDdwSize. Эти переменные передаются в качестве параметров в функцию GetIpAddrTable . Кроме того, создайте переменную DWORDс именем dwRetVal (используется для проверки ошибок).

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. Выделение памяти для структуры.

    Примечание

    Размер dwSize недостаточно для хранения информации. Перейдите к следующему шагу

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. Выполните начальный вызов GetIpAddrTable , чтобы получить необходимый размер в переменной dwSize .

    Примечание

    Этот вызов функции предназначен для сбоя и используется для обеспечения того, чтобы переменная dwSize указала размер, достаточный для хранения всех сведений, возвращенных pIPAddrTable. Это общая модель программирования для структур данных и функций этого типа.

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. Выполните второй вызов GetIpAddrTable с общей проверкой ошибок и верните его значение в переменную DWORDdwRetVal (для более сложной проверки ошибок).

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. Если вызов был выполнен успешно, получите доступ к данным из структуры данных 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);
    
    
  6. Освободите память, выделенную для структуры pIPAddrTable .

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

Примечание

Объекты DWORDdwAddr и dwMask возвращаются в виде числовых значений в порядке байтов узла, а не в порядке байтов сети. Эти значения не являются точками IP-адреса.

 

Следующий шаг. Управление арендами DHCP с помощью IpReleaseAddress и IpRenewAddress

Предыдущий шаг . Управление интерфейсами с помощью GetInterfaceInfo