estrutura IP_ADAPTER_ADDRESSES_LH (iptypes.h)
A estrutura IP_ADAPTER_ADDRESSES é o nó de cabeçalho para uma lista vinculada de endereços para um adaptador específico. Essa estrutura pode ser usada simultaneamente como parte de uma lista vinculada de estruturas de IP_ADAPTER_ADDRESSES .
Sintaxe
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;
Membros
Alignment
Tipo: ULONGLONG
Reservado. Usado pelo compilador para alinhar a estrutura.
Length
Tipo: ULONG
O comprimento, em bytes, dessa estrutura. Observe que o comprimento da estrutura de IP_ADAPTER_ADDRESSES foi alterado no Windows XP com SP1 e posterior e também no Windows Vista e posterior.
IfIndex
Tipo: DWORD
O índice da interface IPv4 com a qual esses endereços estão associados. No Windows Server 2003 e no Windows XP, esse membro será zero se o IPv4 não estiver disponível na interface.
Next
Tipo: struct _IP_ADAPTER_ADDRESSES*
Um ponteiro para a próxima estrutura de endereços do adaptador na lista.
AdapterName
Tipo: PCHAR
Uma matriz de caracteres que contém o nome do adaptador ao qual esses endereços estão associados. Ao contrário do nome amigável de um adaptador, o nome do adaptador especificado em AdapterName é permanente e não pode ser modificado pelo usuário.
FirstUnicastAddress
Tipo: PIP_ADAPTER_UNICAST_ADDRESS
Um ponteiro para a primeira estrutura IP_ADAPTER_UNICAST_ADDRESS em uma lista vinculada de endereços ip unicast para o adaptador.
FirstAnycastAddress
Tipo: PIP_ADAPTER_ANYCAST_ADDRESS
Um ponteiro para a primeira estrutura IP_ADAPTER_ANYCAST_ADDRESS em uma lista vinculada de endereços anycast IP para o adaptador.
FirstMulticastAddress
Tipo: PIP_ADAPTER_MULTICAST_ADDRESS
Um ponteiro para a primeira estrutura IP_ADAPTER_MULTICAST_ADDRESS em uma lista de endereços multicast IP para o adaptador.
FirstDnsServerAddress
Tipo: PIP_ADAPTER_DNS_SERVER_ADDRESS
Um ponteiro para a primeira estrutura IP_ADAPTER_DNS_SERVER_ADDRESS em uma lista vinculada de endereços de servidor DNS para o adaptador.
DnsSuffix
Tipo: PWCHAR
O sufixo DNS (Sistema de Nomes de Domínio) associado a esse adaptador.
Description
Tipo: PWCHAR
Uma descrição para o adaptador. Este membro é somente leitura.
FriendlyName
Tipo: PWCHAR
Um nome amigável para o adaptador. Por exemplo: "Conexão de Área Local 1". Esse nome aparece em contextos como o programa de linha de comando ipconfig e a pasta Conexão. Esse membro é somente leitura e não pode ser modificado usando nenhuma função auxiliar de IP.
Esse membro é o campo ifAlias usado pelo NDIS, conforme descrito em RFC 2863. O campo ifAlias pode ser definido por um provedor de interface NDIS quando o driver NDIS é instalado. Para drivers de miniporto NDIS, esse campo é definido pelo NDIS.
PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]
Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
O endereço mac (Controle de Acesso de mídia) do adaptador. Por exemplo, em uma rede Ethernet, esse membro especificaria o endereço de hardware Ethernet.
PhysicalAddressLength
Tipo: DWORD
O comprimento, em bytes, do endereço especificado no membro PhysicalAddress . Para interfaces que não têm uma camada de vínculo de dados, esse valor é zero.
Flags
Tipo: DWORD
Um conjunto de sinalizadores que especifica várias configurações para o adaptador. Esses valores são definidos no arquivo de cabeçalho Iptypes.h . Combinações desses bits de sinalizador são possíveis.
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
Tipo: DWORD
O tamanho máximo da MTU (unidade de transmissão), em bytes.
IfType
Tipo: DWORD
O tipo de interface conforme definido pela IANA (Autoridade de Nomes Atribuídos à Internet). Os valores possíveis para o tipo de interface são listados no arquivo de cabeçalho Ipifcons.h .
A tabela a seguir lista valores comuns para o tipo de interface, embora muitos outros valores sejam possíveis.
Valor | Significado |
---|---|
|
Algum outro tipo de adaptador de rede. |
|
Um adaptador de rede Ethernet. |
|
Um adaptador de rede de anel de token. |
|
Um adaptador de rede PPP. |
|
Um adaptador de rede de loopback de software. |
|
Um adaptador de rede de caixa eletrônico. |
|
Um adaptador de rede sem fio IEEE 802.11.
No Windows Vista e posterior, os cartões de rede sem fio são relatados como IF_TYPE_IEEE80211. Em versões anteriores do Windows, cartões de rede sem fio são relatados como IF_TYPE_ETHERNET_CSMACD. No Windows XP com SP3 e no Windows XP com SP2 x86 com a API de LAN Sem Fio para Windows XP com SP2 instalado, a função WlanEnumInterfaces pode ser usada para enumerar interfaces sem fio no computador local. |
|
Um adaptador de rede de encapsulamento de tipo de túnel. |
|
Um adaptador de rede de barramento serial de alto desempenho do IEEE 1394 (Firewire). |
OperStatus
Tipo: IF_OPER_STATUS
O status operacional para a interface, conforme definido no RFC 2863. Para obter mais informações, consulte http://www.ietf.org/rfc/rfc2863.txt. Esse membro pode ser um dos valores do tipo de enumeração IF_OPER_STATUS definido no arquivo de cabeçalho Iftypes.h . No Windows Vista e posterior, os arquivos de cabeçalho foram reorganizados e essa enumeração é definida no arquivo de cabeçalho Ifdef.h .
Ipv6IfIndex
Tipo: DWORD
O índice de interface para o endereço IP IPv6. Esse membro será zero se o IPv6 não estiver disponível na interface.
ZoneIndices[16]
Tipo: DWORD[16]
Uma matriz de IDs de escopo para cada nível de escopo usado para compor estruturas sockaddr . A enumeração SCOPE_LEVEL é usada para indexar a matriz. No IPv6, uma única interface pode receber vários endereços multicast IPv6 com base em uma ID de escopo.
FirstPrefix
Tipo: PIP_ADAPTER_PREFIX
Um ponteiro para a primeira estrutura IP_ADAPTER_PREFIX em uma lista vinculada de prefixos de adaptador IP para o adaptador.
TransmitLinkSpeed
Tipo: ULONG64
A velocidade atual em bits por segundo do link de transmissão para o adaptador.
ReceiveLinkSpeed
Tipo: ULONG64
A velocidade atual em bits por segundo do link de recebimento para o adaptador.
FirstWinsServerAddress
Tipo: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
Um ponteiro para a primeira estrutura IP_ADAPTER_WINS_SERVER_ADDRESS em uma lista vinculada de endereços de servidor WINS (Serviço de Nomes da Internet) do Windows para o adaptador.
FirstGatewayAddress
Tipo: PIP_ADAPTER_GATEWAY_ADDRESS_LH
Um ponteiro para a primeira estrutura IP_ADAPTER_GATEWAY_ADDRESS em uma lista vinculada de gateways para o adaptador.
Ipv4Metric
Tipo: ULONG
A métrica da interface IPv4 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv4.
A métrica de rota real usada para calcular as preferências de rota para IPv4 é a soma do deslocamento de métrica de rota especificado no membro Métrica da estrutura MIB_IPFORWARD_ROW2 e a métrica de interface especificada neste membro para IPv4.
Ipv6Metric
Tipo: ULONG
A métrica de interface IPv6 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv6.
A métrica de rota real usada para calcular as preferências de rota para IPv6 é a soma do deslocamento de métrica de rota especificado no membro Métrica da estrutura MIB_IPFORWARD_ROW2 e a métrica de interface especificada neste membro para IPv4.
Luid
Tipo: IF_LUID
A LUID da interface para o endereço do adaptador.
Dhcpv4Server
Tipo: SOCKET_ADDRESS
O endereço IPv4 do servidor DHCP para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv4 configurado usando DHCP.
CompartmentId
Tipo: NET_IF_COMPARTMENT_ID
A ID do compartimento de roteamento para o endereço do adaptador.
NetworkGuid
Tipo: NET_IF_NETWORK_GUID
O GUID associado à rede à qual a interface pertence.
Se o provedor de interface não puder fornecer o GUID de rede, esse membro poderá ser um GUID zero. Nesse caso, a interface foi registrada pelo NDIS na rede padrão.
ConnectionType
Tipo: NET_IF_CONNECTION_TYPE
O tipo de conexão de interface para o endereço do adaptador.
Esse membro pode ser um dos valores do tipo de enumeração NET_IF_CONNECTION_TYPE definido no arquivo de cabeçalho Ifdef.h .
TunnelType
Tipo: TUNNEL_TYPE
O método de encapsulamento usado por um túnel se o endereço do adaptador for um túnel.
Dhcpv6Server
Tipo: SOCKET_ADDRESS
O endereço IPv6 do servidor DHCPv6 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6. No momento, esse membro de estrutura não tem suporte e está reservado para uso futuro.
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
Tipo: BYTE[MAX_DHCPV6_DUID_LENGTH]
O DUID (identificador exclusivo) DHCP para o cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.
Dhcpv6ClientDuidLength
Tipo: ULONG
O comprimento, em bytes, do DUID (identificador exclusivo) dhcp para o cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.
Dhcpv6Iaid
Tipo: ULONG
O identificador de uma associação de identidade escolhida pelo cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.
FirstDnsSuffix
Tipo: PIP_ADAPTER_DNS_SUFFIX
Um ponteiro para a primeira estrutura IP_ADAPTER_DNS_SUFFIX em uma lista vinculada de sufixos DNS para o adaptador.
Comentários
A função GetAdaptersAddresses recupera informações para endereços IPv4 e IPv6 e retorna essas informações como uma lista vinculada de estruturas de IP_ADAPTER_ADDRESSES
Os valores de índice do adaptador especificados nos membros IfIndex e Ipv6IfIndex podem ser alterados quando um adaptador é desabilitado e habilitado, ou em outras circunstâncias, e não devem ser considerados persistentes.
Os valores do membro IfType são definidos no arquivo de cabeçalho Ipifcons.h . Somente os valores possíveis listados na descrição do membro IfType têm suporte no momento.
O tamanho da estrutura IP_ADAPTER_ADDRESSES foi alterado no Windows XP com SP1 e posterior. O tamanho da estrutura de IP_ADAPTER_ADDRESSES também foi alterado no Windows Vista e posterior. O tamanho da estrutura de IP_ADAPTER_ADDRESSES também foi alterado no Windows Vista com SP1 e posterior e noWindows Server 2008 e posterior. O membro Length deve ser usado para determinar qual versão da estrutura IP_ADAPTER_ADDRESSES está sendo usada.
A versão da estrutura IP_ADAPTER_ADDRESSES no Windows XP com SP1 e posteriores tem os seguintes novos membros adicionados: Ipv6IfIndex, ZoneIndices e FirstPrefix.
A versão da estrutura IP_ADAPTER_ADDRESSES no Windows Vista e posteriores tem os seguintes novos membros adicionados: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength e Dhcpv6Iaid.
A versão do IP_ADAPTER_ADDRESSES estrutura no Windows Vista com SP1 e posterior e no Windows Server 2008 e posteriores tem o seguinte novo membro adicionado: FirstDnsSuffix.
Os membros Ipv4Metric e Ipv6Metric são usados para priorizar as métricas de rota para rotas conectadas a várias interfaces no computador local.
A ordem das estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress que são retornadas pela função GetAdaptersAddresses não reflete a ordem em que os endereços IP foram adicionados a um adaptador e podem variar entre as versões do Windows. Da mesma forma, a ordem das estruturas de IP_ADAPTER_ANYCAST_ADDRESS vinculadas apontadas pelo membro FirstAnycastAddress e a ordem das estruturas de IP_ADAPTER_MULTICAST_ADDRESS vinculadas apontadas pelo membro FirstMulticastAddress não refletem a ordem em que os endereços IP foram adicionados a um adaptador e podem variar entre as versões do Windows.
Além disso, as estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress e as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix são mantidas como listas vinculadas internas separadas pelo sistema operacional. Como resultado, a ordem das estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress não tem nenhuma relação com a ordem das estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix .
No Windows Vista e posterior, as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix incluem três prefixos de adaptador IP para cada endereço IP atribuído ao adaptador. Isso inclui o prefixo de endereço IP do host, o prefixo de endereço IP da sub-rede e o prefixo de endereço IP de difusão de sub-rede. Além disso, para cada adaptador, há um prefixo de endereço multicast e um prefixo de endereço de difusão.
No Windows XP com SP1 e posterior antes do Windows Vista, as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix incluem apenas um único prefixo de adaptador IP para cada endereço IP atribuído ao adaptador.
No SDK do Windows, a versão da estrutura para uso no Windows Vista e posterior é definida como IP_ADAPTER_ADDRESSES_LH. No SDK (Software Development Kit) do Microsoft Windows, a versão dessa estrutura a ser usada em sistemas anteriores, incluindo o Windows XP com SP1 e posterior, é definida como IP_ADAPTER_ADDRESSES_XP. Ao compilar um aplicativo se a plataforma de destino for Windows Vista e posterior (NTDDI_VERSION >= NTDDI_LONGHORN
, _WIN32_WINNT >= 0x0600
ou WINVER >= 0x0600
), a estrutura IP_ADAPTER_ADDRESSES_LH será digitada para a estrutura IP_ADAPTER_ADDRESSES . Ao compilar um aplicativo se a plataforma de destino não for Windows Vista e posterior, a estrutura IP_ADAPTER_ADDRESSES_XP será digitada para a estrutura IP_ADAPTER_ADDRESSES .
A estrutura SOCKET_ADDRESS é usada na estrutura IP_ADAPTER_ADDRESSES . No SDK do Windows lançado para Windows Vista e posterior, a organização dos arquivos de cabeçalho foi alterada e a estrutura SOCKET_ADDRESS é definida no arquivo de cabeçalho Ws2def.h , que é incluído automaticamente pelo arquivo de cabeçalho Winsock2.h . No SDK (Platform Software Development Kit) lançado para Windows Server 2003 e Windows XP, a estrutura SOCKET_ADDRESS é declarada no arquivo de cabeçalho Winsock2.h . Para usar a estrutura IP_ADAPTER_ADDRESSES , o arquivo de cabeçalho Winsock2.h deve ser incluído antes do arquivo de cabeçalho Iphlpapi.h .
Exemplos
Este exemplo recupera a estrutura IP_ADAPTER_ADDRESSES para os adaptadores associados ao sistema e imprime alguns membros para cada interface do 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 com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Cabeçalho | iptypes.h (inclua Iphlpapi.h) |
Confira também
Página Inicial do Auxiliar de IP
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de