Partager via


GetIpInterfaceTable, fonction (netioapi.h)

La fonction GetIpInterfaceTable récupère les entrées d’interface IP sur l’ordinateur local.

Syntaxe

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

Paramètres

[in] Family

Famille d’adresses des interfaces IP à récupérer.

Les valeurs possibles pour la famille d’adresses sont répertoriées dans le fichier d’en-tête Winsock2.h . Notez que les valeurs de la AF_ adressent les constantes famille et PF_ de famille de protocole sont identiques (par exemple, AF_INET et PF_INET), de sorte que l’une ou l’autre constante peut être utilisée.

Sur Windows Vista et versions ultérieures ainsi que sur le SDK Windows, la organization des fichiers d’en-tête a changé et les valeurs possibles pour ce membre sont définies dans le fichier d’en-tête Ws2def.h. Notez que le fichier d’en-tête Ws2def.h est automatiquement inclus dans Winsock2.h et ne doit jamais être utilisé directement.

Les valeurs actuellement prises en charge sont AF_INET, AF_INET6 et AF_UNSPEC.

Valeur Signification
AF_UNSPEC
0
La famille d’adresses n’est pas spécifiée. Lorsque ce paramètre est spécifié, la fonction GetIpInterfaceTable retourne la table d’interface IP contenant à la fois des entrées IPv4 et IPv6.
AF_INET
2
Famille d’adresses IPv4 (Internet Protocol version 4).
AF_INET6
23
Famille d’adresses IPv6 (Internet Protocol version 6).

[out] Table

Pointeur vers une mémoire tampon qui reçoit la table des entrées d’interface IP dans une structure MIB_IPINTERFACE_TABLE .

Valeur retournée

Si la fonction réussit, la valeur de retour est NO_ERROR.

Si la fonction échoue, la valeur de retour est l’un des codes d’erreur suivants.

Code de retour Description
ERROR_INVALID_PARAMETER
Un paramètre non valide a été transmis à la fonction. Cette erreur est retournée si un pointeur NULL est passé dans le paramètre Table ou si le paramètre Familyn’a pas été spécifié comme AF_INET, AF_INET6 ou AF_UNSPEC.
ERROR_NOT_ENOUGH_MEMORY
Des ressources de mémoire insuffisantes sont disponibles pour terminer l’opération.
ERROR_NOT_FOUND
Aucune entrée d’interface IP spécifiée dans le paramètre Family n’a été trouvée.
ERROR_NOT_SUPPORTED
La fonction n’est pas prise en charge. Cette erreur est retournée lorsque le transport IP spécifié dans le paramètre Address n’est pas configuré sur l’ordinateur local. Cette erreur est également retournée sur les versions de Windows où cette fonction n’est pas prise en charge.
Autres
Utilisez la fonction FormatMessage pour obtenir la chaîne de message pour l’erreur retournée.

Remarques

La fonction GetIpInterfaceTable est définie sur Windows Vista et versions ultérieures.

The
La fonction GetIpInterfaceTable énumère les interfaces IP d’un système local et retourne ces informations dans une structure MIB_IPINTERFACE_TABLE .

Les entrées d’interface IP sont retournées dans une structure MIB_IPINTERFACE_TABLE dans la mémoire tampon pointée par le paramètre Table . La structure MIB_IPINTERFACE_TABLE contient un nombre d’entrées d’interface IP et un tableau de structures MIB_IPINTERFACE_ROW pour chaque entrée d’interface IP. Lorsque ces structures retournées ne sont plus nécessaires, libérez la mémoire en appelant FreeMibTable.

Le paramètre Family doit être initialisé sur AF_INET ou AF_INET6.

Notez que la structure de MIB_IPINTERFACE_TABLE renvoyée pointée par le paramètre Table peut contenir un remplissage pour l’alignement entre le membre NumEntries et la première entrée de tableau MIB_IPINTERFACE_ROW dans le membre Table de la structure MIB_IPINTERFACE_TABLE . Le remplissage pour l’alignement peut également être présent entre les entrées de tableau MIB_IPINTERFACE_ROW . Tout accès à une entrée de tableau MIB_IPINTERFACE_ROW doit supposer que le remplissage peut exister.

Exemples

L’exemple suivant récupère la table d’interface IP, puis imprime les valeurs de quelques membres des entrées d’interface IP dans la table.

#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);
}


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête netioapi.h (inclure Iphlpapi.h)
Bibliothèque Iphlpapi.lib
DLL Iphlpapi.dll

Voir aussi

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

Informations de référence sur la fonction d’assistance IP

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange