estructura IP_ADAPTER_ADDRESSES_LH (iptypes.h)
La estructura IP_ADAPTER_ADDRESSES es el nodo de encabezado de una lista vinculada de direcciones para un adaptador determinado. Esta estructura se puede usar simultáneamente como parte de una lista vinculada de estructuras de IP_ADAPTER_ADDRESSES .
Sintaxis
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;
Members
Alignment
Tipo: ULONGLONG
Reservado. Usado por el compilador para alinear la estructura.
Length
Tipo: ULONG
Longitud, en bytes, de esta estructura. Tenga en cuenta que la longitud de la estructura de IP_ADAPTER_ADDRESSES cambió en Windows XP con SP1 y versiones posteriores y también en Windows Vista y versiones posteriores.
IfIndex
Tipo: DWORD
Índice de la interfaz IPv4 con la que están asociadas estas direcciones. En Windows Server 2003 y Windows XP, este miembro es cero si IPv4 no está disponible en la interfaz.
Next
Tipo: struct _IP_ADAPTER_ADDRESSES*
Puntero a la siguiente estructura de direcciones del adaptador de la lista.
AdapterName
Tipo: PCHAR
Matriz de caracteres que contiene el nombre del adaptador con el que están asociadas estas direcciones. A diferencia del nombre descriptivo de un adaptador, el nombre del adaptador especificado en AdapterName es permanente y el usuario no puede modificarlo.
FirstUnicastAddress
Tipo: PIP_ADAPTER_UNICAST_ADDRESS
Puntero a la primera estructura IP_ADAPTER_UNICAST_ADDRESS en una lista vinculada de direcciones de unidifusión IP para el adaptador.
FirstAnycastAddress
Tipo: PIP_ADAPTER_ANYCAST_ADDRESS
Puntero a la primera estructura IP_ADAPTER_ANYCAST_ADDRESS en una lista vinculada de direcciones de difusión IP para el adaptador.
FirstMulticastAddress
Tipo: PIP_ADAPTER_MULTICAST_ADDRESS
Puntero a la primera estructura IP_ADAPTER_MULTICAST_ADDRESS en una lista de direcciones de multidifusión IP para el adaptador.
FirstDnsServerAddress
Tipo: PIP_ADAPTER_DNS_SERVER_ADDRESS
Puntero a la primera estructura de IP_ADAPTER_DNS_SERVER_ADDRESS en una lista vinculada de direcciones de servidor DNS para el adaptador.
DnsSuffix
Tipo: PWCHAR
Sufijo sistema de nombres de dominio (DNS) asociado a este adaptador.
Description
Tipo: PWCHAR
Descripción del adaptador. Este miembro es de solo lectura.
FriendlyName
Tipo: PWCHAR
Un nombre descriptivo para el adaptador. Por ejemplo: "Conexión de área local 1". Este nombre aparece en contextos como el programa de línea de comandos ipconfig y la carpeta Connection. Este miembro es de solo lectura y no se puede modificar mediante ninguna función auxiliar de IP.
Este miembro es el campo ifAlias utilizado por NDIS como se describe en RFC 2863. El campo ifAlias se puede establecer mediante un proveedor de interfaz NDIS cuando se instala el controlador NDIS. Para los controladores de minipuerto de NDIS, este campo se establece mediante NDIS.
PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]
Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Dirección Access Control multimedia (MAC) del adaptador. Por ejemplo, en una red Ethernet, este miembro especificaría la dirección de hardware Ethernet.
PhysicalAddressLength
Tipo: DWORD
Longitud, en bytes, de la dirección especificada en el miembro PhysicalAddress . En el caso de las interfaces que no tienen una capa de vínculo de datos, este valor es cero.
Flags
Tipo: DWORD
Conjunto de marcas que especifican varias opciones de configuración para el adaptador. Estos valores se definen en el archivo de encabezado Iptypes.h . Las combinaciones de estos bits de marca son posibles.
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
Tipo: DWORD
Tamaño máximo de la unidad de transmisión (MTU), en bytes.
IfType
Tipo: DWORD
Tipo de interfaz definido por la Autoridad de nombres asignados a Internet (IANA). Los valores posibles para el tipo de interfaz se enumeran en el archivo de encabezado Ipifcons.h .
En la tabla siguiente se enumeran los valores comunes para el tipo de interfaz, aunque muchos otros valores son posibles.
Valor | Significado |
---|---|
|
Otro tipo de interfaz de red. |
|
Una interfaz de red Ethernet. |
|
Interfaz de red de anillo de token. |
|
Una interfaz de red PPP. |
|
Interfaz de red de bucle invertido de software. |
|
Una interfaz de red ATM. |
|
Interfaz de red inalámbrica IEEE 802.11.
En Windows Vista y versiones posteriores, las tarjetas de red inalámbricas se notifican como IF_TYPE_IEEE80211. En versiones anteriores de Windows, las tarjetas de red inalámbricas se notifican como IF_TYPE_ETHERNET_CSMACD. En Windows XP con SP3 y en Windows XP con SP2 x86 con la API de LAN inalámbrica para Windows XP con SP2 instalado, la función WlanEnumInterfaces se puede usar para enumerar interfaces inalámbricas en el equipo local. |
|
Interfaz de red de encapsulación de tipos de túnel. |
|
Interfaz de red de bus serie de alto rendimiento IEEE 1394 (Firewire). |
OperStatus
Tipo: IF_OPER_STATUS
Estado operativo de la interfaz tal como se define en RFC 2863. Para más información, consulte http://www.ietf.org/rfc/rfc2863.txt. Este miembro puede ser uno de los valores del tipo de enumeración IF_OPER_STATUS definido en el archivo de encabezado Iftypes.h . En Windows Vista y versiones posteriores, los archivos de encabezado se reorganizaron y esta enumeración se define en el archivo de encabezado Ifdef.h .
Ipv6IfIndex
Tipo: DWORD
Índice de interfaz de la dirección IP IPv6. Este miembro es cero si IPv6 no está disponible en la interfaz.
ZoneIndices[16]
Tipo: DWORD[16]
Matriz de identificadores de ámbito para cada nivel de ámbito que se usa para componer estructuras sockaddr . La enumeración SCOPE_LEVEL se usa para indexar la matriz. En IPv6, se puede asignar a una sola interfaz varias direcciones de multidifusión IPv6 basadas en un identificador de ámbito.
FirstPrefix
Tipo: PIP_ADAPTER_PREFIX
Puntero a la primera estructura de IP_ADAPTER_PREFIX en una lista vinculada de prefijos de adaptador IP para el adaptador.
TransmitLinkSpeed
Tipo: ULONG64
Velocidad actual en bits por segundo del vínculo de transmisión para el adaptador.
ReceiveLinkSpeed
Tipo: ULONG64
Velocidad actual en bits por segundo del vínculo de recepción del adaptador.
FirstWinsServerAddress
Tipo: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
Puntero a la primera estructura de IP_ADAPTER_WINS_SERVER_ADDRESS en una lista vinculada de direcciones de servidor del Servicio de nombres de Internet (WINS) de Windows para el adaptador.
FirstGatewayAddress
Tipo: PIP_ADAPTER_GATEWAY_ADDRESS_LH
Puntero a la primera estructura IP_ADAPTER_GATEWAY_ADDRESS de una lista vinculada de puertas de enlace para el adaptador.
Ipv4Metric
Tipo: ULONG
Métrica de interfaz IPv4 para la dirección del adaptador. Este miembro solo se aplica a una dirección de adaptador IPv4.
La métrica de ruta real que se usa para calcular las preferencias de ruta para IPv4 es la suma del desplazamiento de métrica de ruta especificado en el miembro Métrica de la estructura MIB_IPFORWARD_ROW2 y la métrica de interfaz especificada en este miembro para IPv4.
Ipv6Metric
Tipo: ULONG
Métrica de interfaz IPv6 para la dirección del adaptador. Este miembro solo es aplicable a una dirección de adaptador IPv6.
La métrica de ruta real que se usa para calcular las preferencias de ruta para IPv6 es la suma del desplazamiento de métrica de ruta especificado en el miembro Métrica de la estructura MIB_IPFORWARD_ROW2 y la métrica de interfaz especificada en este miembro para IPv4.
Luid
Tipo: IF_LUID
LUID de interfaz para la dirección del adaptador.
Dhcpv4Server
Tipo: SOCKET_ADDRESS
Dirección IPv4 del servidor DHCP para la dirección del adaptador. Este miembro solo se aplica a una dirección de adaptador IPv4 configurada mediante DHCP.
CompartmentId
Tipo: NET_IF_COMPARTMENT_ID
Identificador del compartimiento de enrutamiento para la dirección del adaptador.
NetworkGuid
Tipo: NET_IF_NETWORK_GUID
GUID asociado a la red a la que pertenece la interfaz.
Si el proveedor de interfaz no puede proporcionar el GUID de red, este miembro puede ser un GUID cero. En este caso, NDIS registró la interfaz en la red predeterminada.
ConnectionType
Tipo: NET_IF_CONNECTION_TYPE
Tipo de conexión de interfaz para la dirección del adaptador.
Este miembro puede ser uno de los valores del tipo de enumeración NET_IF_CONNECTION_TYPE definido en el archivo de encabezado Ifdef.h .
TunnelType
Tipo: TUNNEL_TYPE
Método de encapsulación utilizado por un túnel si la dirección del adaptador es un túnel.
Dhcpv6Server
Tipo: SOCKET_ADDRESS
Dirección IPv6 del servidor DHCPv6 para la dirección del adaptador. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6. Este miembro de estructura no se admite actualmente y está reservado para uso futuro.
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
Tipo: BYTE[MAX_DHCPV6_DUID_LENGTH]
Identificador único DHCP (DUID) para el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.
Dhcpv6ClientDuidLength
Tipo: ULONG
Longitud, en bytes, del identificador único DHCP (DUID) para el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.
Dhcpv6Iaid
Tipo: ULONG
Identificador de una asociación de identidad elegida por el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.
FirstDnsSuffix
Tipo: PIP_ADAPTER_DNS_SUFFIX
Puntero a la primera estructura IP_ADAPTER_DNS_SUFFIX en una lista vinculada de sufijos DNS para el adaptador.
Comentarios
La función GetAdaptersAddresses recupera información de direcciones IPv4 e IPv6 y devuelve esta información como una lista vinculada de estructuras de IP_ADAPTER_ADDRESSES
Los valores de índice del adaptador especificados en los miembros IfIndex e Ipv6IfIndex pueden cambiar cuando un adaptador está deshabilitado y, a continuación, habilitado, o en otras circunstancias, y no se debe considerar persistente.
Los valores del miembro IfType se definen en el archivo de encabezado Ipifcons.h . Actualmente solo se admiten los valores posibles enumerados en la descripción del miembro IfType .
El tamaño de la estructura de IP_ADAPTER_ADDRESSES cambió en Windows XP con SP1 y versiones posteriores. El tamaño de la estructura de IP_ADAPTER_ADDRESSES también cambió en Windows Vista y versiones posteriores. El tamaño de la estructura de IP_ADAPTER_ADDRESSES también cambió en Windows Vista con SP1 y versiones posteriores y enWindows Server 2008 y versiones posteriores. El miembro Length debe usarse para determinar qué versión de la estructura de IP_ADAPTER_ADDRESSES se usa.
La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows XP con SP1 y versiones posteriores tiene los siguientes miembros nuevos agregados: Ipv6IfIndex, ZoneIndices y FirstPrefix.
La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows Vista y versiones posteriores tiene agregados los siguientes miembros nuevos: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength y Dhcpv6Iaid.
La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows Vista con SP1 y versiones posteriores y en Windows Server 2008 y versiones posteriores tiene agregado el siguiente nuevo miembro: FirstDnsSuffix.
Los miembros Ipv4Metric e Ipv6Metric se usan para priorizar las métricas de ruta de las rutas conectadas a varias interfaces en el equipo local.
El orden de las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress devuelto por la función GetAdaptersAddresses no refleja el orden en que se agregaron direcciones IP a un adaptador y puede variar entre versiones de Windows. Del mismo modo, el orden de las estructuras de IP_ADAPTER_ANYCAST_ADDRESS vinculadas a las que apunta el miembro FirstAnycastAddress y el orden de las estructuras de IP_ADAPTER_MULTICAST_ADDRESS vinculadas a las que apunta el miembro FirstMulticastAddress no reflejan el orden en que se agregaron direcciones IP a un adaptador y pueden variar entre versiones de Windows.
Además, las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress y las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix se mantienen como listas vinculadas internas independientes por parte del sistema operativo. Como resultado, el orden de las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress no tiene ninguna relación con el orden de las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix .
En Windows Vista y versiones posteriores, las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix incluyen tres prefijos de adaptador IP para cada dirección IP asignada al adaptador. Estos incluyen el prefijo de dirección IP del host, el prefijo de dirección IP de subred y el prefijo de dirección IP de difusión de subred. Además, para cada adaptador hay un prefijo de dirección de multidifusión y un prefijo de dirección de difusión.
En Windows XP con SP1 y versiones posteriores antes de Windows Vista, las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix incluyen solo un prefijo de adaptador IP único para cada dirección IP asignada al adaptador.
En Windows SDK, la versión de la estructura para su uso en Windows Vista y versiones posteriores se define como IP_ADAPTER_ADDRESSES_LH. En el Kit de desarrollo de software (SDK) de Microsoft Windows, la versión de esta estructura que se usará en sistemas anteriores, incluido Windows XP con SP1 y versiones posteriores, se define como IP_ADAPTER_ADDRESSES_XP. Al compilar una aplicación si la plataforma de destino es Windows Vista y versiones posteriores (NTDDI_VERSION >= NTDDI_LONGHORN
, _WIN32_WINNT >= 0x0600
o WINVER >= 0x0600
), la estructura IP_ADAPTER_ADDRESSES_LH se escribe en la estructura de IP_ADAPTER_ADDRESSES . Al compilar una aplicación si la plataforma de destino no es Windows Vista y versiones posteriores, la estructura de IP_ADAPTER_ADDRESSES_XP se escribe en la estructura IP_ADAPTER_ADDRESSES .
La estructura SOCKET_ADDRESS se usa en la estructura IP_ADAPTER_ADDRESSES . En windows SDK publicado para Windows Vista y versiones posteriores, la organización de archivos de encabezado ha cambiado y la estructura SOCKET_ADDRESS se define en el archivo de encabezado Ws2def.h que el archivo de encabezado Winsock2.h incluye automáticamente. En el Kit de desarrollo de software de plataforma (SDK) publicado para Windows Server 2003 y Windows XP, la estructura de SOCKET_ADDRESS se declara en el archivo de encabezado Winsock2.h . Para usar la estructura IP_ADAPTER_ADDRESSES , el archivo de encabezado Winsock2.h debe incluirse antes del archivo de encabezado Iphlpapi.h .
Ejemplos
En este ejemplo se recupera la estructura de IP_ADAPTER_ADDRESSES para los adaptadores asociados al sistema e imprime algunos miembros para cada interfaz de adaptador.
#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;
}
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | iptypes.h (include Iphlpapi.h) |
Consulte también
Página de inicio del asistente de IP
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de