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 .
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 .
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 .
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) |