estructura IP_ADAPTER_INFO (iptypes.h)
La estructura IP_ADAPTER_INFO contiene información sobre un adaptador de red determinado en el equipo local.
Sintaxis
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
Members
Next
Tipo: estructura _IP_ADAPTER_INFO*
Puntero al siguiente adaptador de la lista de adaptadores.
ComboIndex
Tipo: DWORD
Reservado.
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
Tipo: char[MAX_ADAPTER_NAME_LENGTH + 4]
Cadena de caracteres ANSI del nombre del adaptador.
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Tipo: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Cadena de caracteres ANSI que contiene la descripción del adaptador.
AddressLength
Tipo: UINT
Longitud, en bytes, de la dirección de hardware del adaptador.
Address[MAX_ADAPTER_ADDRESS_LENGTH]
Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Dirección de hardware del adaptador representado como una matriz BYTE .
Index
Tipo: DWORD
Índice del adaptador.
El índice del adaptador puede cambiar cuando un adaptador está deshabilitado y, a continuación, habilitado, o en otras circunstancias, y no debe considerarse persistente.
Type
Tipo: UINT
Tipo de adaptador. Los valores posibles para el tipo de adaptador se enumeran en el archivo de encabezado Ipifcons.h .
En la tabla siguiente se enumeran los valores comunes para el tipo de adaptador, aunque otros valores son posibles en Windows Vista y versiones posteriores.
DhcpEnabled
Tipo: UINT
Valor de opción que especifica si el protocolo de configuración dinámica de host (DHCP) está habilitado para este adaptador.
CurrentIpAddress
Tipo: PIP_ADDR_STRING
Reservado.
IpAddressList
Tipo: IP_ADDR_STRING
La lista de direcciones IPv4 asociadas a este adaptador representada como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener varias direcciones IPv4 asignadas.
GatewayList
Tipo: IP_ADDR_STRING
Dirección IPv4 de la puerta de enlace de este adaptador representada como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener asignadas varias direcciones de puerta de enlace IPv4. Esta lista normalmente contiene una única entrada para la dirección IPv4 de la puerta de enlace predeterminada para este adaptador.
DhcpServer
Tipo: IP_ADDR_STRING
Dirección IPv4 del servidor DHCP para este adaptador representado como una lista vinculada de estructuras de IP_ADDR_STRING . Esta lista contiene una única entrada para la dirección IPv4 del servidor DHCP para este adaptador. Un valor de 255.255.255.255 indica que no se pudo alcanzar el servidor DHCP o está en proceso de alcanzarse.
Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.
HaveWins
Tipo: BOOL
Valor de opción que especifica si este adaptador usa el Servicio de nombres de Internet de Windows (WINS).
PrimaryWinsServer
Tipo: IP_ADDR_STRING
Dirección IPv4 del servidor WINS principal representado como una lista vinculada de estructuras de IP_ADDR_STRING . Esta lista contiene una única entrada para la dirección IPv4 del servidor WINS principal para este adaptador.
Este miembro solo es válido cuando el miembro HaveWins es TRUE.
SecondaryWinsServer
Tipo: IP_ADDR_STRING
Dirección IPv4 del servidor WINS secundario representado como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener varias direcciones de servidor WINS secundarias asignadas.
Este miembro solo es válido cuando el miembro HaveWins es TRUE.
LeaseObtained
Tipo: time_t
Hora a la que se obtuvo la concesión DHCP actual.
Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.
LeaseExpires
Tipo: time_t
Hora a la que expira la concesión DHCP actual.
Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.
Comentarios
La estructura de IP_ADAPTER_INFO se limita a la información de IPv4 sobre un adaptador de red determinado en el equipo local. La estructura IP_ADAPTER_INFO se recupera mediante una llamada a la función GetAdaptersInfo .
Cuando se usa Visual Studio 2005 y versiones posteriores, el tipo de datos time_t tiene como valor predeterminado un tipo de datos de 8 bytes, no el tipo de datos de 4 bytes usado para los miembros LeaseObtained y LeaseExpires en una plataforma de 32 bits. Para usar correctamente la estructura de IP_ADAPTER_INFO en una plataforma de 32 bits, defina _USE_32BIT_TIME_T (use -D _USE_32BIT_TIME_T
como opción, por ejemplo) al compilar la aplicación para forzar el tipo de datos de time_t a un tipo de datos de 4 bytes.
Para su uso en Windows XP y versiones posteriores, la estructura de IP_ADAPTER_ADDRESSES contiene información de IPv4 e IPv6. La función GetAdaptersAddresses recupera información del adaptador IPv4 e IPv6.
Ejemplos
En este ejemplo se recupera la información del adaptador y se imprimen varias propiedades de cada adaptador.
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.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()
{
/* Declare and initialize variables */
// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
//
// Note that this sample code only prints out the
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter.
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
pAdapter = pAdapterInfo;
while (pAdapter) {
printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
printf("\tAdapter Addr: \t");
for (i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
printf("%.2X\n", (int) pAdapter->Address[i]);
else
printf("%.2X-", (int) pAdapter->Address[i]);
}
printf("\tIndex: \t%d\n", pAdapter->Index);
printf("\tType: \t");
switch (pAdapter->Type) {
case MIB_IF_TYPE_OTHER:
printf("Other\n");
break;
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet\n");
break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring\n");
break;
case MIB_IF_TYPE_FDDI:
printf("FDDI\n");
break;
case MIB_IF_TYPE_PPP:
printf("PPP\n");
break;
case MIB_IF_TYPE_LOOPBACK:
printf("Lookback\n");
break;
case MIB_IF_TYPE_SLIP:
printf("Slip\n");
break;
default:
printf("Unknown type %ld\n", pAdapter->Type);
break;
}
printf("\tIP Address: \t%s\n",
pAdapter->IpAddressList.IpAddress.String);
printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
printf("\t***\n");
if (pAdapter->DhcpEnabled) {
printf("\tDHCP Enabled: Yes\n");
printf("\t DHCP Server: \t%s\n",
pAdapter->DhcpServer.IpAddress.String);
printf("\t Lease Obtained: ");
/* Display local time */
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
printf("\t Lease Expires: ");
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
} else
printf("\tDHCP Enabled: No\n");
if (pAdapter->HaveWins) {
printf("\tHave Wins: Yes\n");
printf("\t Primary Wins Server: %s\n",
pAdapter->PrimaryWinsServer.IpAddress.String);
printf("\t Secondary Wins Server: %s\n",
pAdapter->SecondaryWinsServer.IpAddress.String);
} else
printf("\tHave Wins: No\n");
pAdapter = pAdapter->Next;
printf("\n");
}
} else {
printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
return 0;
}
Requisitos
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Encabezado | iptypes.h (incluya Iphlpapi.h) |