Partager via


MIB_UNICASTIPADDRESS_ROW structure (netioapi.h)

La structure MIB_UNICASTIPADDRESS_ROW stocke des informations sur une adresse IP en monodiffusion.

Syntaxe

typedef struct _MIB_UNICASTIPADDRESS_ROW {
  SOCKADDR_INET    Address;
  NET_LUID         InterfaceLuid;
  NET_IFINDEX      InterfaceIndex;
  NL_PREFIX_ORIGIN PrefixOrigin;
  NL_SUFFIX_ORIGIN SuffixOrigin;
  ULONG            ValidLifetime;
  ULONG            PreferredLifetime;
  UINT8            OnLinkPrefixLength;
  BOOLEAN          SkipAsSource;
  NL_DAD_STATE     DadState;
  SCOPE_ID         ScopeId;
  LARGE_INTEGER    CreationTimeStamp;
} MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW;

Membres

Address

Type : SOCKADDR_INET

Adresse IP de monodiffusion. Ce membre peut être une adresse IPv6 ou une adresse IPv4.

InterfaceLuid

Type : NET_LUID

Identificateur local unique (LUID) pour l’interface réseau associée à cette adresse IP.

InterfaceIndex

Type : NET_IFINDEX

Valeur d’index local pour l’interface réseau associée à cette adresse IP. Cette valeur d’index peut changer lorsqu’une carte réseau est désactivée, puis activée, ou dans d’autres circonstances, et ne doit pas être considérée comme persistante.

PrefixOrigin

Type : NL_PREFIX_ORIGIN

Origine du préfixe ou de la partie réseau de l’adresse IP. Ce membre peut être l’une des valeurs du type d’énumération NL_PREFIX_ORIGIN défini dans le fichier d’en-tête Nldef.h .

Valeur Signification
IpPrefixOriginOther
0
Le préfixe d’adresse IP a été configuré à l’aide d’une source autre que celles définies dans cette énumération. Cette valeur s’applique à une adresse IPv6 ou IPv4.
IpPrefixOriginManual
1
Le préfixe d’adresse IP a été configuré manuellement. Cette valeur s’applique à une adresse IPv6 ou IPv4.
IpPrefixOriginWellKnown
2
Le préfixe d’adresse IP a été configuré à l’aide d’une adresse connue. Cette valeur s’applique à une adresse locale de lien IPv6 ou à une adresse de bouclage IPv6.
IpPrefixOriginDhcp
3
Le préfixe d’adresse IP a été configuré à l’aide du protocole DHCP. Cette valeur s’applique à une adresse IPv4 configurée à l’aide de DHCP ou à une adresse IPv6 configurée à l’aide de DHCPv6.
IpPrefixOriginRouterAdvertisement
4
Le préfixe d’adresse IP a été configuré à l’aide de la publicité du routeur. Cette valeur s’applique à une adresse IPv6 anonyme qui a été générée après avoir reçu une publicité de routeur.
IpPrefixOriginUnchanged
16
Le préfixe d’adresse IP doit être inchangé. Cette valeur est utilisée lors de la définition des propriétés d’une interface IP de monodiffusion lorsque la valeur de l’origine du préfixe IP doit être inchangée.

SuffixOrigin

Type : NL_SUFFIX_ORIGIN

Origine du suffixe ou de la partie hôte de l’adresse IP de l’adresse. Ce membre peut être l’une des valeurs du type d’énumération NL_SUFFIX_ORIGIN défini dans le fichier d’en-tête Nldef.h .

Valeur Signification
IpSuffixOriginOther
0
Le suffixe d’adresse IP a été configuré à l’aide d’une source autre que celles définies dans cette énumération. Cette valeur s’applique à une adresse IPv6 ou IPv4.
IpSuffixOriginManual
1
Le suffixe d’adresse IP a été configuré manuellement. Cette valeur s’applique à une adresse IPv6 ou IPv4.
IpSuffixOriginWellKnown
2
Le suffixe d’adresse IP a été configuré à l’aide d’une adresse connue. Cette valeur s’applique à une adresse locale de lien IPv6 ou à une adresse de bouclage IPv6.
IpSuffixOriginDhcp
3
Le suffixe d’adresse IP a été configuré à l’aide du protocole DHCP. Cette valeur s’applique à une adresse IPv4 configurée à l’aide de DHCP ou à une adresse IPv6 configurée à l’aide de DHCPv6.
IpSuffixOriginLinkLayerAddress
4
Le suffixe d’adresse IP était l’adresse locale de lien. Cette valeur s’applique à une adresse locale de lien IPv6 ou à une adresse IPv6 où la partie réseau a été générée en fonction d’une publicité de routeur et la partie hôte est basée sur l’adresse matérielle MAC.
IpSuffixOriginRandom
5
Le suffixe d’adresse IP a été généré de manière aléatoire. Cette valeur s’applique à une adresse IPv6 anonyme où la partie hôte de l’adresse a été générée de manière aléatoire à partir de l’adresse matérielle MAC après avoir reçu une publicité de routeur.
IpSuffixOriginUnchanged
16
Le suffixe d’adresse IP doit être inchangé. Cette valeur est utilisée lors de la définition des propriétés d’une interface IP de monodiffusion lorsque la valeur de l’origine du suffixe IP doit être inchangée.

ValidLifetime

Type : ULONG

Durée maximale, en secondes, pendant laquelle l’adresse IP est valide. Une valeur de 0xffffffff est considérée comme infinie.

PreferredLifetime

Type : ULONG

Durée par défaut, en secondes, pendant laquelle l’adresse IP est valide. Une valeur de 0xffffffff est considérée comme infinie.

OnLinkPrefixLength

Type : UINT8

Longueur, en bits, du préfixe ou de la partie réseau de l’adresse IP. Pour une adresse IPv4 en monodiffusion, toute valeur supérieure à 32 est une valeur non conforme. Pour une adresse IPv6 en monodiffusion, toute valeur supérieure à 128 est une valeur non conforme. Une valeur de 255 est couramment utilisée pour représenter une valeur non conforme.

SkipAsSource

Type : BOOLEAN

Ce membre spécifie si l’adresse peut être utilisée comme adresse IP source.

DadState

Type : NL_DAD_STATE

État de détection d’adresse dupliquée (DAD). La détection d’adresses en double s’applique aux adresses IPv6 et IPv4. Ce membre peut être l’une des valeurs du type d’énumération NL_DAD_STATE défini dans le fichier d’en-tête Nldef.h .

Valeur Signification
IpDadStateInvalid
0
L’état DAD n’est pas valide.
IpDadStateTentative
1
L’état DAD est provisoire.
IpDadStateDuplicate
2
une adresse IP dupliquée a été détectée.
IpDadStateDeprecated
3
L’adresse IP a été dépréciée.
IpDadStatePreferred
4
L’adresse IP est l’adresse préférée.

ScopeId

Type : SCOPE_ID

ID d’étendue de l’adresse IP. Ce membre s’applique uniquement à une adresse IPv6. Impossible de définir ce membre. Elle est automatiquement déterminée par l’interface à laquelle l’adresse a été ajoutée.

CreationTimeStamp

Type : LARGE_INTEGER

Horodatage lors de la création de l’adresse IP.

Remarques

La structure MIB_UNICASTIPADDRESS_ROW est définie sur Windows Vista et versions ultérieures.

Le membre SkipAsSource de la structure MIB_UNICASTIPADDRESS_ROW affecte le fonctionnement des fonctions getaddrinfo, GetAddrInfoW et GetAddrInfoEx dans les sockets Windows. Si le paramètre pNodeName passé aux fonctions getaddrinfo ou GetAddrInfoW ou le paramètre pName passé à la fonction GetAddrInfoEx pointe vers un nom d’ordinateur, toutes les adresses permanentes de l’ordinateur qui peuvent être utilisées comme adresse source sont retournées. Sur Windows Vista et versions ultérieures, ces adresses incluent toutes les adresses IP unicast retournées par les fonctions GetUnicastIpAddressTable ou GetUnicastIpAddressEntry dans lesquelles le membre SkipAsSource est défini sur false dans la structure MIB_UNICASTIPADDRESS_ROW .

Si le paramètre pNodeName ou pName fait référence à un nom de serveur virtuel de cluster, seules les adresses de serveur virtuel sont retournées. Sur Windows Vista et versions ultérieures, ces adresses incluent toutes les adresses IP unicast retournées par les fonctions GetUnicastIpAddressTable ou GetUnicastIpAddressEntry dans lesquelles le membre SkipAsSource est défini sur true dans la structure MIB_UNICASTIPADDRESS_ROW . Pour plus d’informations sur clustering, consultez Clustering Windows.

Windows 7 avec Service Pack 1 (SP1) et Windows Server 2008 R2 avec Service Pack 1 (SP1) ajoutent la prise en charge de Netsh.exe pour la définition de l’attribut SkipAsSource sur une adresse IP. Ce correctif logiciel modifie également le comportement de sorte que si le membre SkipAsSource dans la structure MIB_UNICASTIPADDRESS_ROW est défini sur false, l’adresse IP est inscrite dans DNS. Si le membre SkipAsSource a la valeur true, l’adresse IP n’est pas inscrite dans DNS.

Un correctif logiciel est disponible pour Windows 7 et Windows Server 2008 R2 qui ajoute la prise en charge de Netsh.exe pour la définition de l’attribut SkipAsSource sur une adresse IP. Ce correctif logiciel modifie également le comportement de sorte que si le membre SkipAsSource dans la structure MIB_UNICASTIPADDRESS_ROW est défini sur false, l’adresse IP est inscrite dans DNS. Si le membre SkipAsSource a la valeur true, l’adresse IP n’est pas inscrite dans DNS. Pour plus d’informations, consultez 2386184 de la Base de connaissances (Ko).

Un correctif logiciel similaire est également disponible pour Windows Vista avec Service Pack 2 (SP2) et Windows Server 2008 avec Service Pack 2 (SP2) qui ajoute la prise en charge de Netsh.exe pour la définition de l’attribut SkipAsSource sur une adresse IP. Ce correctif logiciel modifie également le comportement de sorte que si le membre SkipAsSource dans la structure MIB_UNICASTIPADDRESS_ROW est défini sur false, l’adresse IP est inscrite dans DNS. Si le membre SkipAsSource a la valeur true, l’adresse IP n’est pas inscrite dans DNS.

Exemples

L’exemple suivant récupère une table d’adresses IP unicast et imprime certaines valeurs de chacune des structures MIB_UNICASTIPADDRESS_ROW récupérées.


#ifndef UNICODE
#define UNICODE
#endif

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <Windows.h.>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

// Need to link with Iphlpapi.lib and Ws2_32.lib
#pragma comment (lib, "iphlpapi.lib")
#pragma comment (lib, "Ws2_32.lib")

int __cdecl wmain()
{

    // Declare and initialize variables

    unsigned int i;

    DWORD Result = 0;

    WCHAR Ipv4String[16] = { 0 };
    WCHAR Ipv6String[46] = { 0 };

    PMIB_UNICASTIPADDRESS_TABLE pipTable = NULL;

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

    for (i = 0; i < pipTable->NumEntries; i++) {
        wprintf(L"AddressFamily[%d]:\t\t ", i);

        switch (pipTable->Table[i].Address.si_family) {
        case AF_INET:
            wprintf(L"IPv4\n");
            if (InetNtopW
                (AF_INET, &pipTable->Table[i].Address.Ipv4.sin_addr, Ipv4String,
                 16) != NULL)
                wprintf(L"IPv4 Address:\t\t\t %ws\n", Ipv4String);
            break;
        case AF_INET6:
            wprintf(L"IPv6\n");
            if (InetNtopW
                (AF_INET6, &pipTable->Table[i].Address.Ipv6.sin6_addr,
                 Ipv6String, 46) != NULL)
                wprintf(L"IPv6 Address:\t\t\t %ws\n", Ipv6String);
            break;
        default:
            wprintf(L"Other: %d\n", pipTable->Table[i].Address.si_family);
            break;
        }

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

        wprintf(L"Interface Index[%d]:\t\t %lu\n",
               i, pipTable->Table[i].InterfaceIndex);

        wprintf(L"Prefix Origin[%d]:\t\t ", i);
        switch (pipTable->Table[i].PrefixOrigin) {
        case IpPrefixOriginOther:
            wprintf(L"IpPrefixOriginOther\n");
            break;
        case IpPrefixOriginManual:
            wprintf(L"IpPrefixOriginManual\n");
            break;
        case IpPrefixOriginWellKnown:
            wprintf(L"IpPrefixOriginWellKnown\n");
            break;
        case IpPrefixOriginDhcp:
            wprintf(L"IpPrefixOriginDhcp\n");
            break;
        case IpPrefixOriginRouterAdvertisement:
            wprintf(L"IpPrefixOriginRouterAdvertisement\n");
            break;
        case IpPrefixOriginUnchanged:
            wprintf(L"IpPrefixOriginUnchanged\n");
            break;
        default:
            wprintf(L"Unknown: %d\n", pipTable->Table[i].PrefixOrigin);
            break;
        }

        wprintf(L"Suffix Origin[%d]:\t\t ", i);
        switch (pipTable->Table[i].SuffixOrigin) {
        case IpSuffixOriginOther:
            wprintf(L"IpSuffixOriginOther\n");
            break;
        case IpSuffixOriginManual:
            wprintf(L"IpSuffixOriginManual\n");
            break;
        case IpSuffixOriginWellKnown:
            wprintf(L"IpSuffixOriginWellKnown\n");
            break;
        case IpSuffixOriginDhcp:
            wprintf(L"IpSuffixOriginDhcp\n");
            break;
        case IpSuffixOriginLinkLayerAddress:
            wprintf(L"IpSuffixOriginLinkLayerAddress\n");
            break;
        case IpSuffixOriginRandom:
            wprintf(L"IpSuffixOriginRandom\n");
            break;
        case IpSuffixOriginUnchanged:
            wprintf(L"IpSuffixOriginUnchanged\n");
            break;
        default:
            wprintf(L"Unknown: %d\n", pipTable->Table[i].SuffixOrigin);
            break;
        }

        wprintf(L"Valid Lifetime[%d]:\t\t 0x%x (%u)\n", i,
               pipTable->Table[i].ValidLifetime,
               pipTable->Table[i].ValidLifetime);

        wprintf(L"Preferred Lifetime[%d]:\t\t 0x%x (%u)\n", i,
               pipTable->Table[i].PreferredLifetime,
               pipTable->Table[i].PreferredLifetime);

        wprintf(L"OnLink PrefixLength[%d]:\t\t %lu\n", i,
               pipTable->Table[i].OnLinkPrefixLength);

        wprintf(L"Skip As Source[%d]:\t\t ", i);
        if (pipTable->Table[i].SkipAsSource)
            wprintf(L"Yes\n");
        else
            wprintf(L"No\n");

        wprintf(L"Dad State[%d]:\t\t\t ", i);
        switch (pipTable->Table[i].DadState) {
        case IpDadStateInvalid:
            wprintf(L"IpDadStateInvalid\n");
            break;
        case IpDadStateTentative:
            wprintf(L"IpDadStateTentative\n");
            break;
        case IpDadStateDuplicate:
            wprintf(L"IpDadStateDuplicate\n");
            break;
        case IpDadStateDeprecated:
            wprintf(L"IpDadStateDeprecated\n");
            break;
        case IpDadStatePreferred:
            wprintf(L"IpDadStatePreferred\n");
            break;
        default:
            wprintf(L"Unknown: %d\n", pipTable->Table[i].DadState);
            break;
        }

        wprintf(L"\n");
    }

    if (pipTable != NULL) {
        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]
En-tête netioapi.h (inclure Iphlpapi.h)

Voir aussi

CreateUnicastIpAddressEntry

DeleteUnicastIpAddressEntry

GetAddrInfoEx

GetAddrInfoW

GetUnicastIpAddressEntry

GetUnicastIpAddressTable

InitializeUnicastIpAddressEntry

MIB_UNICASTIPADDRESS_TABLE

SOCKADDR_INET

SetUnicastIpAddressEntry

getaddrinfo