Função GetIpInterfaceTable (netioapi.h)

A função GetIpInterfaceTable recupera as entradas da interface IP no computador local.

Sintaxe

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
  [in]  ADDRESS_FAMILY         Family,
  [out] PMIB_IPINTERFACE_TABLE *Table
);

Parâmetros

[in] Family

A família de endereços das interfaces IP a serem recuperadas.

Os valores possíveis para a família de endereços são listados no arquivo de cabeçalho Winsock2.h . Observe que os valores para a família de endereços AF_ e PF_ constantes da família de protocolos são idênticos (por exemplo, AF_INET e PF_INET), portanto, qualquer constante pode ser usada.

No Windows Vista e posterior, bem como no SDK do Windows, a organização dos arquivos de cabeçalho foi alterada e os valores possíveis para esse membro são definidos no arquivo de cabeçalho Ws2def.h. Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente no Winsock2.h e nunca deve ser usado diretamente.

Os valores com suporte no momento são AF_INET, AF_INET6 e AF_UNSPEC.

Valor Significado
AF_UNSPEC
0
A família de endereços não é especificada. Quando esse parâmetro é especificado, a função GetIpInterfaceTable retorna a tabela de interface IP que contém entradas IPv4 e IPv6.
AF_INET
2
A família de endereços IPv4 (Protocolo de Internet versão 4).
AF_INET6
23
A família de endereços IPv6 (Internet Protocol versão 6).

[out] Table

Um ponteiro para um buffer que recebe a tabela de entradas da interface IP em uma estrutura MIB_IPINTERFACE_TABLE .

Retornar valor

Se a função for bem-sucedida, o valor retornado será NO_ERROR.

Se a função falhar, o valor retornado será um dos códigos de erro a seguir.

Código de retorno Descrição
ERROR_INVALID_PARAMETER
Um parâmetro inválido foi passado para a função. Esse erro será retornado se um ponteiro NULL for passado no parâmetro Table ou o parâmetro Family não tiver sido especificado como AF_INET, AF_INET6 ou AF_UNSPEC.
ERROR_NOT_ENOUGH_MEMORY
Recursos de memória insuficientes estão disponíveis para concluir a operação.
ERROR_NOT_FOUND
Nenhuma entrada de interface IP, conforme especificado no parâmetro Family , foi encontrada.
ERROR_NOT_SUPPORTED
Não há suporte para a função . Esse erro é retornado quando o transporte IP especificado no parâmetro Address não está configurado no computador local. Esse erro também é retornado em versões do Windows em que essa função não tem suporte.
Outros
Use a função FormatMessage para obter a cadeia de caracteres de mensagem para o erro retornado.

Comentários

A função GetIpInterfaceTable é definida no Windows Vista e posterior.

O
A função GetIpInterfaceTable enumera as interfaces IP em um sistema local e retorna essas informações em uma estrutura MIB_IPINTERFACE_TABLE.

As entradas da interface IP são retornadas em uma estrutura MIB_IPINTERFACE_TABLE no buffer apontado pelo parâmetro Table . A estrutura MIB_IPINTERFACE_TABLE contém uma contagem de entradas de interface IP e uma matriz de estruturas MIB_IPINTERFACE_ROW para cada entrada de interface IP. Quando essas estruturas retornadas não forem mais necessárias, libere a memória chamando FreeMibTable.

O parâmetro Family deve ser inicializado para AF_INET ou AF_INET6.

Observe que a estrutura de MIB_IPINTERFACE_TABLE retornada apontada pelo parâmetro Table pode conter preenchimento para alinhamento entre o membro NumEntries e a primeira entrada de matriz MIB_IPINTERFACE_ROW no membro Table da estrutura MIB_IPINTERFACE_TABLE . O preenchimento para alinhamento também pode estar presente entre as entradas da matriz MIB_IPINTERFACE_ROW . Qualquer acesso a uma entrada de matriz MIB_IPINTERFACE_ROW deve assumir que o preenchimento pode existir.

Exemplos

O exemplo a seguir recupera a tabela da interface IP e imprime os valores de alguns membros das entradas da interface IP na tabela.

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    // Declare and initialize variables

    int i;

    DWORD dwRetVal = 0;

    PMIB_IPINTERFACE_TABLE pipTable = NULL;

    dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
    if (dwRetVal != NO_ERROR) {
        printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
        exit(1);
    }
    // Print some variables from the rows in the table
    printf("Number of table entries: %d\n\n", pipTable->NumEntries);

    for (i = 0; i < (int) pipTable->NumEntries; i++) {
        printf("Address Family[%d]:\t\t", i);
        switch (pipTable->Table[i].Family) {
        case AF_INET:
            printf("IPv4\n");
            break;
        case AF_INET6:
            printf("IPv6\n");
            break;
        default:
            printf("Other: %d\n", pipTable->Table[i].Family);
            break;
        }

        printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
               i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);

        printf("Interface LUID IfType[%d]:\t ", i);
        switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
        case IF_TYPE_OTHER:
            printf("Other\n");
            break;
        case IF_TYPE_ETHERNET_CSMACD:
            printf("Ethernet\n");
            break;
        case IF_TYPE_ISO88025_TOKENRING:
            printf("Token ring\n");
            break;
        case IF_TYPE_PPP:
            printf("PPP\n");
            break;
        case IF_TYPE_SOFTWARE_LOOPBACK:
            printf("Software loopback\n");
            break;
        case IF_TYPE_ATM:
            printf("ATM\n");
            break;
        case IF_TYPE_IEEE80211:
            printf("802.11 wireless\n");
            break;
        case IF_TYPE_TUNNEL:
            printf("Tunnel encapsulation\n");
            break;
        case IF_TYPE_IEEE1394:
            printf("IEEE 1394 (Firewire)\n");
            break;
        default:
            printf("Unknown: %d\n",
                   pipTable->Table[i].InterfaceLuid.Info.IfType);
            break;
        }
        printf("Interface Index[%d]:\t\t %lu\n",
               i, pipTable->Table[i].InterfaceIndex);
        printf("Maximum reassembly size[%d]:\t %lu\n", i,
               pipTable->Table[i].MaxReassemblySize);

        printf("Advertising enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].AdvertisingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Forwarding enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].ForwardingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);

        printf("Connected[%d]:\t\t\t ", i);
        if (pipTable->Table[i].Connected)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports wakeup patterns[%d]:\t ", i);
        if (pipTable->Table[i].SupportsWakeUpPatterns)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports neighbor discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsNeighborDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports router discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsRouterDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("\n");
    }

    FreeMibTable(pipTable);
    pipTable = NULL;

    exit(0);
}


Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho netioapi.h (inclua Iphlpapi.h)
Biblioteca Iphlpapi.lib
DLL Iphlpapi.dll

Confira também

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

Referência de função auxiliar de IP

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange