structure IP_ADAPTER_ADDRESSES_LH (iptypes.h)
La structure IP_ADAPTER_ADDRESSES est le nœud d’en-tête d’une liste liée d’adresses pour un adaptateur particulier. Cette structure peut être utilisée simultanément dans le cadre d’une liste liée de structures IP_ADAPTER_ADDRESSES .
Syntaxe
typedef struct _IP_ADAPTER_ADDRESSES_LH {
union {
ULONGLONG Alignment;
struct {
ULONG Length;
IF_INDEX IfIndex;
};
};
struct _IP_ADAPTER_ADDRESSES_LH *Next;
PCHAR AdapterName;
PIP_ADAPTER_UNICAST_ADDRESS_LH FirstUnicastAddress;
PIP_ADAPTER_ANYCAST_ADDRESS_XP FirstAnycastAddress;
PIP_ADAPTER_MULTICAST_ADDRESS_XP FirstMulticastAddress;
PIP_ADAPTER_DNS_SERVER_ADDRESS_XP FirstDnsServerAddress;
PWCHAR DnsSuffix;
PWCHAR Description;
PWCHAR FriendlyName;
BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
ULONG PhysicalAddressLength;
union {
ULONG Flags;
struct {
ULONG DdnsEnabled : 1;
ULONG RegisterAdapterSuffix : 1;
ULONG Dhcpv4Enabled : 1;
ULONG ReceiveOnly : 1;
ULONG NoMulticast : 1;
ULONG Ipv6OtherStatefulConfig : 1;
ULONG NetbiosOverTcpipEnabled : 1;
ULONG Ipv4Enabled : 1;
ULONG Ipv6Enabled : 1;
ULONG Ipv6ManagedAddressConfigurationSupported : 1;
};
};
ULONG Mtu;
IFTYPE IfType;
IF_OPER_STATUS OperStatus;
IF_INDEX Ipv6IfIndex;
ULONG ZoneIndices[16];
PIP_ADAPTER_PREFIX_XP FirstPrefix;
ULONG64 TransmitLinkSpeed;
ULONG64 ReceiveLinkSpeed;
PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;
ULONG Ipv4Metric;
ULONG Ipv6Metric;
IF_LUID Luid;
SOCKET_ADDRESS Dhcpv4Server;
NET_IF_COMPARTMENT_ID CompartmentId;
NET_IF_NETWORK_GUID NetworkGuid;
NET_IF_CONNECTION_TYPE ConnectionType;
TUNNEL_TYPE TunnelType;
SOCKET_ADDRESS Dhcpv6Server;
BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
ULONG Dhcpv6ClientDuidLength;
ULONG Dhcpv6Iaid;
PIP_ADAPTER_DNS_SUFFIX FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;
Membres
Alignment
Type : ULONGLONG
Réservé. Utilisé par le compilateur pour aligner la structure.
Length
Type : ULONG
Longueur, en octets, de cette structure. Notez que la longueur de la structure IP_ADAPTER_ADDRESSES a changé sur Windows XP avec SP1 et versions ultérieures, ainsi que sur Windows Vista et versions ultérieures.
IfIndex
Type : DWORD
Index de l’interface IPv4 à laquelle ces adresses sont associées. Sur Windows Server 2003 et Windows XP, ce membre est égal à zéro si IPv4 n’est pas disponible sur l’interface.
Next
Type : struct _IP_ADAPTER_ADDRESSES*
Pointeur vers la structure de l’adaptateur suivant dans la liste.
AdapterName
Type : PCHAR
Tableau de caractères qui contient le nom de l’adaptateur auquel ces adresses sont associées. Contrairement au nom convivial d’un adaptateur, le nom de l’adaptateur spécifié dans AdapterName est permanent et ne peut pas être modifié par l’utilisateur.
FirstUnicastAddress
Type : PIP_ADAPTER_UNICAST_ADDRESS
Pointeur vers la première structure IP_ADAPTER_UNICAST_ADDRESS dans une liste liée d’adresses IP unicast pour l’adaptateur.
FirstAnycastAddress
Type : PIP_ADAPTER_ANYCAST_ADDRESS
Pointeur vers la première structure IP_ADAPTER_ANYCAST_ADDRESS dans une liste liée d’adresses IP anycast pour l’adaptateur.
FirstMulticastAddress
Type : PIP_ADAPTER_MULTICAST_ADDRESS
Pointeur vers la première structure IP_ADAPTER_MULTICAST_ADDRESS dans une liste d’adresses de multidiffusion IP pour l’adaptateur.
FirstDnsServerAddress
Type : PIP_ADAPTER_DNS_SERVER_ADDRESS
Pointeur vers la première structure IP_ADAPTER_DNS_SERVER_ADDRESS dans une liste liée d’adresses de serveur DNS pour l’adaptateur.
DnsSuffix
Type : PWCHAR
Suffixe DNS (Domain Name System) associé à cet adaptateur.
Description
Type : PWCHAR
Description de l’adaptateur. Ce membre est en lecture seule.
FriendlyName
Type : PWCHAR
Nom convivial de l’adaptateur. Par exemple : « Connexion à la zone locale 1 ». Ce nom apparaît dans des contextes tels que le programme de ligne de commande ipconfig et le dossier Connexion. Ce membre est en lecture seule et ne peut pas être modifié à l’aide des fonctions d’assistance IP.
Ce membre est le champ ifAlias utilisé par NDIS, comme décrit dans RFC 2863. Le champ ifAlias peut être défini par un fournisseur d’interface NDIS lorsque le pilote NDIS est installé. Pour les pilotes miniportS NDIS, ce champ est défini par NDIS.
PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]
Type : BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Adresse media Access Control (MAC) de l’adaptateur. Par exemple, sur un réseau Ethernet, ce membre spécifie l’adresse matérielle Ethernet.
PhysicalAddressLength
Type : DWORD
Longueur, en octets, de l’adresse spécifiée dans le membre PhysicalAddress . Pour les interfaces qui n’ont pas de couche de liaison de données, cette valeur est égale à zéro.
Flags
Type : DWORD
Ensemble d’indicateurs spécifiant différents paramètres pour l’adaptateur. Ces valeurs sont définies dans le fichier d’en-tête Iptypes.h . Des combinaisons de ces bits d’indicateur sont possibles.
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
Type : DWORD
Taille maximale de l’unité de transmission (MTU), en octets.
IfType
Type : DWORD
Type d’interface tel que défini par l’autorité IANA (Internet Assigned Names Authority). Les valeurs possibles pour le type d’interface sont répertoriées dans le fichier d’en-tête Ipifcons.h .
Le tableau ci-dessous répertorie les valeurs courantes pour le type d’interface, bien que de nombreuses autres valeurs soient possibles.
Valeur | Signification |
---|---|
|
Un autre type d’interface réseau. |
|
Une interface réseau Ethernet. |
|
Interface réseau en anneau de jeton. |
|
Interface réseau PPP. |
|
Interface réseau de bouclage logiciel. |
|
Une interface réseau ATM. |
|
Interface réseau sans fil IEEE 802.11.
Sur Windows Vista et versions ultérieures, les cartes réseau sans fil sont signalées comme IF_TYPE_IEEE80211. Dans les versions antérieures de Windows, les cartes réseau sans fil sont signalées comme IF_TYPE_ETHERNET_CSMACD. Sur Windows XP avec SP3 et sur Windows XP avec SP2 x86 avec l’API LAN sans fil pour Windows XP avec SP2 installé, la fonction WlanEnumInterfaces peut être utilisée pour énumérer les interfaces sans fil sur l’ordinateur local. |
|
Interface réseau d’encapsulation de type tunnel. |
|
Une interface réseau de bus série IEEE 1394 (Firewire) hautes performances. |
OperStatus
Type : IF_OPER_STATUS
La status opérationnelle pour l’interface telle que définie dans RFC 2863. Pour plus d’informations, consultez http://www.ietf.org/rfc/rfc2863.txt. Ce membre peut être l’une des valeurs du type d’énumération IF_OPER_STATUS défini dans le fichier d’en-tête Iftypes.h . Sur Windows Vista et versions ultérieures, les fichiers d’en-tête ont été réorganisés et cette énumération est définie dans le fichier d’en-tête Ifdef.h .
Ipv6IfIndex
Type : DWORD
Index d’interface de l’adresse IP IPv6. Ce membre est égal à zéro si IPv6 n’est pas disponible sur l’interface.
ZoneIndices[16]
Type : DWORD[16]
Tableau d’ID d’étendue pour chaque niveau d’étendue utilisé pour composer des structures sockaddr . L’énumération SCOPE_LEVEL est utilisée pour indexer le tableau. Sur IPv6, plusieurs adresses de multidiffusion IPv6 peuvent être affectées à une seule interface en fonction d’un ID d’étendue.
FirstPrefix
Type : PIP_ADAPTER_PREFIX
Pointeur vers la première structure IP_ADAPTER_PREFIX dans une liste liée de préfixes d’adaptateur IP pour l’adaptateur.
TransmitLinkSpeed
Type : ULONG64
Vitesse actuelle en bits par seconde du lien de transmission de l’adaptateur.
ReceiveLinkSpeed
Type : ULONG64
Vitesse actuelle en bits par seconde du lien de réception de l’adaptateur.
FirstWinsServerAddress
Type : PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
Pointeur vers la première structure IP_ADAPTER_WINS_SERVER_ADDRESS dans une liste liée d’adresses de serveur Wins (Windows Internet Name Service) pour l’adaptateur.
FirstGatewayAddress
Type : PIP_ADAPTER_GATEWAY_ADDRESS_LH
Pointeur vers la première structure IP_ADAPTER_GATEWAY_ADDRESS dans une liste liée de passerelles pour l’adaptateur.
Ipv4Metric
Type : ULONG
Métrique de l’interface IPv4 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv4.
La métrique d’itinéraire réelle utilisée pour calculer les préférences d’itinéraire pour IPv4 est la somme du décalage de la métrique d’itinéraire spécifié dans le membre de métrique de la structure MIB_IPFORWARD_ROW2 et de la métrique d’interface spécifiée dans ce membre pour IPv4.
Ipv6Metric
Type : ULONG
Métrique de l’interface IPv6 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6.
La métrique d’itinéraire réelle utilisée pour calculer les préférences d’itinéraire pour IPv6 est la somme du décalage de la métrique d’itinéraire spécifié dans le membre de métrique de la structure MIB_IPFORWARD_ROW2 et de la métrique d’interface spécifiée dans ce membre pour IPv4.
Luid
Type : IF_LUID
LUID de l’interface pour l’adresse de l’adaptateur.
Dhcpv4Server
Type : SOCKET_ADDRESS
Adresse IPv4 du serveur DHCP pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv4 configurée à l’aide du protocole DHCP.
CompartmentId
Type : NET_IF_COMPARTMENT_ID
ID du compartiment de routage pour l’adresse de l’adaptateur.
NetworkGuid
Type : NET_IF_NETWORK_GUID
GUID associé au réseau auquel appartient l’interface.
Si le fournisseur d’interface ne peut pas fournir le GUID réseau, ce membre peut être un GUID zéro. Dans ce cas, l’interface a été inscrite par NDIS dans le réseau par défaut.
ConnectionType
Type : NET_IF_CONNECTION_TYPE
Type de connexion d’interface pour l’adresse de l’adaptateur.
Ce membre peut être l’une des valeurs du type d’énumération NET_IF_CONNECTION_TYPE défini dans le fichier d’en-tête Ifdef.h .
TunnelType
Type : TUNNEL_TYPE
Méthode d’encapsulation utilisée par un tunnel si l’adresse de l’adaptateur est un tunnel.
Dhcpv6Server
Type : SOCKET_ADDRESS
Adresse IPv6 du serveur DHCPv6 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6. Ce membre de structure n’est actuellement pas pris en charge et est réservé pour une utilisation ultérieure.
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
Type : BYTE[MAX_DHCPV6_DUID_LENGTH]
Identificateur unique DHCP (DUID) pour le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.
Dhcpv6ClientDuidLength
Type : ULONG
Longueur, en octets, de l’identificateur unique DHCP (DUID) pour le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.
Dhcpv6Iaid
Type : ULONG
Identificateur d’une association d’identité choisie par le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.
FirstDnsSuffix
Type : PIP_ADAPTER_DNS_SUFFIX
Pointeur vers la première structure IP_ADAPTER_DNS_SUFFIX dans une liste liée de suffixes DNS pour l’adaptateur.
Notes
La fonction GetAdaptersAddresses récupère des informations pour les adresses IPv4 et IPv6 et retourne ces informations sous la forme d’une liste liée de structures IP_ADAPTER_ADDRESSES
Les valeurs d’index de l’adaptateur spécifiées dans les membres IfIndex et Ipv6IfIndex peuvent changer lorsqu’un adaptateur est désactivé, puis activé, ou dans d’autres circonstances, et ne doivent pas être considérés comme persistants.
Les valeurs du membre IfType sont définies dans le fichier d’en-tête Ipifcons.h . Seules les valeurs possibles répertoriées dans la description du membre IfType sont actuellement prises en charge.
La taille de la structure IP_ADAPTER_ADDRESSES a changé sur Windows XP avec SP1 et versions ultérieures. La taille de la structure IP_ADAPTER_ADDRESSES a également changé sur Windows Vista et versions ultérieures. La taille de la structure IP_ADAPTER_ADDRESSES a également changé sur Windows Vista avec SP1et versions ultérieures et sur Windows Server 2008 et versions ultérieures. Le membre Length doit être utilisé pour déterminer quelle version de la structure IP_ADAPTER_ADDRESSES est utilisée.
La version de la structure IP_ADAPTER_ADDRESSES sur Windows XP avec SP1 et versions ultérieures a été ajoutée aux nouveaux membres suivants : Ipv6IfIndex, ZoneIndices et FirstPrefix.
La version de la structure IP_ADAPTER_ADDRESSES sur Windows Vista et ultérieur a été ajoutée aux nouveaux membres suivants : TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength et Dhcpv6Iaid.
La version de la structure IP_ADAPTER_ADDRESSES sur Windows Vista avec SP1et versions ultérieures et sur Windows Server 2008 et versions ultérieures a ajouté le nouveau membre suivant : FirstDnsSuffix.
Les membres Ipv4Metric et Ipv6Metric sont utilisés pour hiérarchiser les métriques de routage pour les itinéraires connectés à plusieurs interfaces sur l’ordinateur local.
L’ordre des structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress retournés par la fonction GetAdaptersAddresses ne reflète pas l’ordre dans lequel les adresses IP ont été ajoutées à un adaptateur et peut varier d’une version de Windows à l’autre. De même, l’ordre des structures de IP_ADAPTER_ANYCAST_ADDRESS liées pointées par le membre FirstAnycastAddress et l’ordre des structures de IP_ADAPTER_MULTICAST_ADDRESS liées pointées par le membre FirstMulticastAddress ne reflètent pas l’ordre dans lequel les adresses IP ont été ajoutées à un adaptateur et peuvent varier d’une version de Windows à l’autre.
En outre, les structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress et les structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix sont conservées en tant que listes liées internes distinctes par le système d’exploitation. Par conséquent, l’ordre des structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress n’a aucune relation avec l’ordre des structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix .
Sur Windows Vista et versions ultérieures, les structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix incluent trois préfixes de carte IP pour chaque adresse IP affectée à la carte. Il s’agit notamment du préfixe d’adresse IP de l’hôte, du préfixe d’adresse IP du sous-réseau et du préfixe d’adresse IP de diffusion du sous-réseau. En outre, pour chaque adaptateur, il existe un préfixe d’adresse de multidiffusion et un préfixe d’adresse de diffusion.
Sur Windows XP avec SP1 et versions ultérieures antérieures à Windows Vista, les structures de IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix n’incluent qu’un seul préfixe de carte IP pour chaque adresse IP affectée à la carte.
Dans le Kit de développement logiciel (SDK) Windows, la version de la structure à utiliser sur Windows Vista et versions ultérieures est définie comme IP_ADAPTER_ADDRESSES_LH. Dans le Kit de développement logiciel (SDK) Microsoft Windows, la version de cette structure à utiliser sur des systèmes antérieurs, y compris Windows XP avec SP1 et versions ultérieures, est définie comme IP_ADAPTER_ADDRESSES_XP. Lors de la compilation d’une application si la plateforme cible est Windows Vista et versions ultérieures (NTDDI_VERSION >= NTDDI_LONGHORN
, _WIN32_WINNT >= 0x0600
, ou WINVER >= 0x0600
), la structure IP_ADAPTER_ADDRESSES_LH est typée à la structure IP_ADAPTER_ADDRESSES . Lors de la compilation d’une application si la plateforme cible n’est pas Windows Vista et versions ultérieures, la structure IP_ADAPTER_ADDRESSES_XP est typée à la structure IP_ADAPTER_ADDRESSES .
La structure SOCKET_ADDRESS est utilisée dans la structure IP_ADAPTER_ADDRESSES . Sur le Kit de développement logiciel (SDK) Windows publié pour Windows Vista et versions ultérieures, la organization des fichiers d’en-tête a changé et la structure SOCKET_ADDRESS est définie dans le fichier d’en-tête Ws2def.h qui est automatiquement inclus par le fichier d’en-tête Winsock2.h. Dans le Kit de développement logiciel (SDK) de plateforme publié pour Windows Server 2003 et Windows XP, la structure SOCKET_ADDRESS est déclarée dans le fichier d’en-tête Winsock2.h . Pour utiliser la structure IP_ADAPTER_ADDRESSES , le fichier d’en-tête Winsock2.h doit être inclus avant le fichier d’en-tête Iphlpapi.h .
Exemples
Cet exemple récupère la structure IP_ADAPTER_ADDRESSES pour les adaptateurs associés au système et imprime certains membres pour chaque interface d’adaptateur.
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main(int argc, char **argv)
{
/* Declare and initialize variables */
DWORD dwSize = 0;
DWORD dwRetVal = 0;
unsigned int i = 0;
// Set the flags to pass to GetAdaptersAddresses
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
// default to unspecified address family (both)
ULONG family = AF_UNSPEC;
LPVOID lpMsgBuf = NULL;
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
ULONG outBufLen = 0;
PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
IP_ADAPTER_PREFIX *pPrefix = NULL;
if (argc != 2) {
printf(" Usage: getadapteraddresses family\n");
printf(" getadapteraddresses 4 (for IPv4)\n");
printf(" getadapteraddresses 6 (for IPv6)\n");
printf(" getadapteraddresses A (for both IPv4 and IPv6)\n");
exit(1);
}
if (atoi(argv[1]) == 4)
family = AF_INET;
else if (atoi(argv[1]) == 6)
family = AF_INET6;
outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
// Make an initial call to GetAdaptersAddresses to get the
// size needed into the outBufLen variable
if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
== ERROR_BUFFER_OVERFLOW) {
FREE(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
}
if (pAddresses == NULL) {
printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
exit(1);
}
// Make a second call to GetAdaptersAddresses to get the
// actual data we want
printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
printf("Calling GetAdaptersAddresses function with family = ");
if (family == AF_INET)
printf("AF_INET\n");
if (family == AF_INET6)
printf("AF_INET6\n");
if (family == AF_UNSPEC)
printf("AF_UNSPEC\n\n");
dwRetVal =
GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);
if (dwRetVal == NO_ERROR) {
// If successful, output some information from the data we received
pCurrAddresses = pAddresses;
while (pCurrAddresses) {
printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
pCurrAddresses->Length);
printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);
pUnicast = pCurrAddresses->FirstUnicastAddress;
if (pUnicast != NULL) {
for (i = 0; pUnicast != NULL; i++)
pUnicast = pUnicast->Next;
printf("\tNumber of Unicast Addresses: %d\n", i);
} else
printf("\tNo Unicast Addresses\n");
pAnycast = pCurrAddresses->FirstAnycastAddress;
if (pAnycast) {
for (i = 0; pAnycast != NULL; i++)
pAnycast = pAnycast->Next;
printf("\tNumber of Anycast Addresses: %d\n", i);
} else
printf("\tNo Anycast Addresses\n");
pMulticast = pCurrAddresses->FirstMulticastAddress;
if (pMulticast) {
for (i = 0; pMulticast != NULL; i++)
pMulticast = pMulticast->Next;
printf("\tNumber of Multicast Addresses: %d\n", i);
} else
printf("\tNo Multicast Addresses\n");
pDnServer = pCurrAddresses->FirstDnsServerAddress;
if (pDnServer) {
for (i = 0; pDnServer != NULL; i++)
pDnServer = pDnServer->Next;
printf("\tNumber of DNS Server Addresses: %d\n", i);
} else
printf("\tNo DNS Server Addresses\n");
printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
printf("\tDescription: %wS\n", pCurrAddresses->Description);
printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);
if (pCurrAddresses->PhysicalAddressLength != 0) {
printf("\tPhysical address: ");
for (i = 0; i < pCurrAddresses->PhysicalAddressLength;
i++) {
if (i == (pCurrAddresses->PhysicalAddressLength - 1))
printf("%.2X\n",
(int) pCurrAddresses->PhysicalAddress[i]);
else
printf("%.2X-",
(int) pCurrAddresses->PhysicalAddress[i]);
}
}
printf("\tFlags: %ld\n", pCurrAddresses->Flags);
printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
printf("\tIfType: %ld\n", pCurrAddresses->IfType);
printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
printf("\tIpv6IfIndex (IPv6 interface): %u\n",
pCurrAddresses->Ipv6IfIndex);
printf("\tZoneIndices (hex): ");
for (i = 0; i < 16; i++)
printf("%lx ", pCurrAddresses->ZoneIndices[i]);
printf("\n");
pPrefix = pCurrAddresses->FirstPrefix;
if (pPrefix) {
for (i = 0; pPrefix != NULL; i++)
pPrefix = pPrefix->Next;
printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
} else
printf("\tNo IP Adapter Prefix entries\n");
printf("\n");
pCurrAddresses = pCurrAddresses->Next;
}
} else {
printf("Call to GetAdaptersAddresses failed with error: %d\n",
dwRetVal);
if (dwRetVal == ERROR_NO_DATA)
printf("\tNo addresses were found for the requested parameters\n");
else {
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) & lpMsgBuf, 0, NULL)) {
printf("\tError: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
FREE(pAddresses);
exit(1);
}
}
}
FREE(pAddresses);
return 0;
}
Spécifications
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
En-tête | iptypes.h (include Iphlpapi.h) |
Voir aussi
Page de démarrage de l’assistance IP
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour