Partilhar via


Gerenciando endereços IP usando GetIpAddrTable

A função GetIpAddrTable preenche um ponteiro para uma estrutura de MIB_IPADDRTABLE com informações sobre os endereços IP atuais associados ao sistema.

Para usar GetIpAddrTable

  1. Declare um ponteiro para um objeto chamado MIB_IPADDRTABLE, chamado pIPAddrTable, e um objeto chamado DWORD, chamado dwSize. Essas variáveis são passadas como parâmetros para o função GetIpAddrTable. Crie também uma variável DWORD chamada dwRetVal (usada para verificação de erros).

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. Aloque memória para a estrutura.

    Observação

    O tamanho de dwSize não é suficiente para armazenar as informações. Veja o próximo passo.

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. Faça uma chamada inicial para GetIpAddrTable para obter o tamanho necessário na variável dwSize.

    Observação

    Essa chamada para a função deve falhar e é usada para garantir que a variável dwSize especifique um tamanho suficiente para armazenar todas as informações retornadas para pIPAddrTable. Este é um modelo de programação comum para estruturas de dados e funções deste tipo.

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. Faça uma segunda chamada para GetIpAddrTable com verificação geral de erros e retorne seu valor para a variável DWORDdwRetVal (para verificação de erro mais avançada).

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. Se a chamada foi bem-sucedida, aceda aos dados da estrutura de dados 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 qualquer memória alocada para a estrutura de pIPAddrTable.

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

Observação

Os objetos DWORDdwAddr e dwMask são retornados como valores numéricos na ordem de bytes do host, não na ordem de bytes da rede. Esses valores não são endereços IP pontilhados.

 

Próxima etapa: gerenciando concessões DHCP usando IpReleaseAddress e IpRenewAddress

Etapa anterior: gerenciando interfaces usando GetInterfaceInfo