Función GetIpInterfaceTable (netioapi.h)
La función GetIpInterfaceTable recupera las entradas de la interfaz IP en el equipo local.
Sintaxis
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPINTERFACE_TABLE *Table
);
Parámetros
[in] Family
Familia de direcciones de interfaces IP que se van a recuperar.
Los valores posibles para la familia de direcciones se enumeran en el archivo de encabezado Winsock2.h . Tenga en cuenta que los valores de la familia de direcciones AF_ y las constantes de familia de protocolos PF_ son idénticos (por ejemplo, AF_INET y PF_INET), por lo que se puede usar cualquier constante.
En Windows Vista y versiones posteriores, así como en el Windows SDK, la organización de los archivos de encabezado ha cambiado y los valores posibles para este miembro se definen en el archivo de encabezado Ws2def.h. Tenga en cuenta que el archivo de encabezado Ws2def.h se incluye automáticamente en Winsock2.h y nunca se debe usar directamente.
Los valores admitidos actualmente son AF_INET, AF_INET6 y AF_UNSPEC.
[out] Table
Puntero a un búfer que recibe la tabla de entradas de la interfaz IP en una estructura MIB_IPINTERFACE_TABLE .
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es NO_ERROR.
Si se produce un error en la función, el valor devuelto es uno de los siguientes códigos de error.
Código devuelto | Descripción |
---|---|
|
Se pasó un parámetro no válido a la función. Este error se devuelve si se pasa un puntero NULL en el parámetro Table o el parámetro Family no se especificó como AF_INET, AF_INET6 o AF_UNSPEC. |
|
Hay recursos de memoria insuficientes disponibles para completar la operación. |
|
No se encontraron entradas de interfaz IP especificadas en el parámetro Family . |
|
No se admite la función . Este error se devuelve cuando el transporte IP especificado en el parámetro Address no está configurado en el equipo local. Este error también se devuelve en las versiones de Windows en las que no se admite esta función. |
|
Use la función FormatMessage para obtener la cadena de mensaje del error devuelto. |
Comentarios
La función GetIpInterfaceTable se define en Windows Vista y versiones posteriores.
The
La función GetIpInterfaceTable enumera las interfaces IP de un sistema local y devuelve esta información en una estructura MIB_IPINTERFACE_TABLE .
Las entradas de la interfaz IP se devuelven en una estructura de MIB_IPINTERFACE_TABLE en el búfer al que apunta el parámetro Table . La estructura MIB_IPINTERFACE_TABLE contiene un recuento de entradas de interfaz IP y una matriz de estructuras de MIB_IPINTERFACE_ROW para cada entrada de interfaz IP. Cuando estas estructuras devueltas ya no son necesarias, libere la memoria llamando a FreeMibTable.
El parámetro Family debe inicializarse en AF_INET o AF_INET6.
Tenga en cuenta que la estructura de MIB_IPINTERFACE_TABLE devuelta a la que apunta el parámetro Table puede contener relleno para la alineación entre el miembro NumEntries y la primera entrada de matriz MIB_IPINTERFACE_ROW en el miembro Table de la estructura MIB_IPINTERFACE_TABLE . El relleno para la alineación también puede estar presente entre las entradas de matriz de MIB_IPINTERFACE_ROW . Cualquier acceso a una entrada de matriz de MIB_IPINTERFACE_ROW debe suponer que puede existir relleno.
Ejemplos
En el ejemplo siguiente se recupera la tabla de interfaz IP y, a continuación, se imprimen los valores de algunos miembros de las entradas de la interfaz IP de la tabla.
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")
int main()
{
// Declare and initialize variables
int i;
DWORD dwRetVal = 0;
PMIB_IPINTERFACE_TABLE pipTable = NULL;
dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
if (dwRetVal != NO_ERROR) {
printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
exit(1);
}
// Print some variables from the rows in the table
printf("Number of table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; i < (int) pipTable->NumEntries; i++) {
printf("Address Family[%d]:\t\t", i);
switch (pipTable->Table[i].Family) {
case AF_INET:
printf("IPv4\n");
break;
case AF_INET6:
printf("IPv6\n");
break;
default:
printf("Other: %d\n", pipTable->Table[i].Family);
break;
}
printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
printf("Interface LUID IfType[%d]:\t ", i);
switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
case IF_TYPE_OTHER:
printf("Other\n");
break;
case IF_TYPE_ETHERNET_CSMACD:
printf("Ethernet\n");
break;
case IF_TYPE_ISO88025_TOKENRING:
printf("Token ring\n");
break;
case IF_TYPE_PPP:
printf("PPP\n");
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
printf("Software loopback\n");
break;
case IF_TYPE_ATM:
printf("ATM\n");
break;
case IF_TYPE_IEEE80211:
printf("802.11 wireless\n");
break;
case IF_TYPE_TUNNEL:
printf("Tunnel encapsulation\n");
break;
case IF_TYPE_IEEE1394:
printf("IEEE 1394 (Firewire)\n");
break;
default:
printf("Unknown: %d\n",
pipTable->Table[i].InterfaceLuid.Info.IfType);
break;
}
printf("Interface Index[%d]:\t\t %lu\n",
i, pipTable->Table[i].InterfaceIndex);
printf("Maximum reassembly size[%d]:\t %lu\n", i,
pipTable->Table[i].MaxReassemblySize);
printf("Advertising enabled[%d]:\t\t ", i);
if (pipTable->Table[i].AdvertisingEnabled)
printf("Yes\n");
else
printf("No\n");
printf("Forwarding enabled[%d]:\t\t ", i);
if (pipTable->Table[i].ForwardingEnabled)
printf("Yes\n");
else
printf("No\n");
printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);
printf("Connected[%d]:\t\t\t ", i);
if (pipTable->Table[i].Connected)
printf("Yes\n");
else
printf("No\n");
printf("Supports wakeup patterns[%d]:\t ", i);
if (pipTable->Table[i].SupportsWakeUpPatterns)
printf("Yes\n");
else
printf("No\n");
printf("Supports neighbor discovery[%d]:\t ", i);
if (pipTable->Table[i].SupportsNeighborDiscovery)
printf("Yes\n");
else
printf("No\n");
printf("Supports router discovery[%d]:\t ", i);
if (pipTable->Table[i].SupportsRouterDiscovery)
printf("Yes\n");
else
printf("No\n");
printf("\n");
}
FreeMibTable(pipTable);
pipTable = NULL;
exit(0);
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | netioapi.h (incluya Iphlpapi.h) |
Library | Iphlpapi.lib |
Archivo DLL | Iphlpapi.dll |