Compartir a través de


Administración de direcciones IP mediante GetIpAddrTable

La función GetIpAddrTable rellena un puntero a una estructura de MIB_IPADDRTABLE con información sobre las direcciones IP actuales asociadas al sistema.

Para usar GetIpAddrTable

  1. Declare un puntero a un objeto MIB_IPADDRTABLE denominado pIPAddrTable y un objeto DWORD denominado dwSize. Estas variables se pasan como parámetros a la función GetIpAddrTable . Cree también una variable DWORD denominada dwRetVal (se usa para la comprobación de errores).

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. Asigne memoria para la estructura.

    Nota:

    El tamaño de dwSize no es suficiente para contener la información. Vea el paso siguiente.

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. Realice una llamada inicial a GetIpAddrTable para obtener el tamaño necesario en la variable dwSize .

    Nota

    Esta llamada a la función está pensada para producir un error y se usa para asegurarse de que la variable dwSize especifica un tamaño suficiente para contener toda la información devuelta a pIPAddrTable. Se trata de un modelo de programación común para estructuras de datos y funciones de este tipo.

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. Realice una segunda llamada a GetIpAddrTable con comprobación de errores general y devuelva su valor a la variable DWORD dwRetVal (para una comprobación de errores más avanzada).

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. Si la llamada se realizó correctamente, acceda a los datos desde la estructura de datos 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. Libere cualquier memoria asignada para la estructura pIPAddrTable .

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

Nota:

Los objetos DWORD dwAddr y dwMask se devuelven como valores numéricos en el orden de bytes del host, no como orden de bytes de red. Estos valores no son direcciones IP de puntos.

 

Paso siguiente: Administración de concesiones dhcp mediante IpReleaseAddress y IpRenewAddress

Paso anterior: Administrar interfaces mediante GetInterfaceInfo