Función GetIpNetTable2 (netioapi.h)
La función getIpNetTable2 de
Sintaxis
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpNetTable2(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPNET_TABLE2 *Table
);
Parámetros
[in] Family
Familia de direcciones que se va a recuperar.
Los valores posibles para la familia de direcciones se muestran en el archivo de encabezado
En windows SDK publicado para Windows Vista y versiones posteriores, la organización de archivos de encabezado ha cambiado y los valores posibles para este miembro se definen en el archivo de encabezado de Ws2def.h. Tenga en cuenta que el archivo de encabezado de Ws2def.h se incluye automáticamente en Winsock2.hy nunca se debe usar directamente.
Los valores admitidos actualmente son AF_INET, AF_INET6y AF_UNSPEC.
[out] Table
Puntero a un puntero a una estructura de MIB_IPNET_TABLE2 que contiene una tabla de entradas de dirección IP vecinas en el equipo local.
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto se NO_ERROR o ERROR_NOT_FOUND.
Si se produce un error en la función o no devuelve ningún dato, 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 de NULL |
|
Los recursos de memoria insuficientes están disponibles para completar la operación. |
|
No se encontraron entradas de dirección IP vecinas como se especifica en el parámetro Family Este valor devuelto indica que la llamada al función GetIpNetTable2 se realizó correctamente, pero no se devolvió ningún dato. Esto puede ocurrir cuando se especifica AF_INET en el parámetro Family y no hay entradas ARP que devolver. |
|
No se admite la solicitud.
Este error se devuelve si no hay ninguna pila IPv4 en el equipo local y |
|
Use FormatMessage para obtener la cadena de mensaje para el error devuelto. |
Observaciones
La función getIpNetTable2 se define en Windows Vista y versiones posteriores.
El
función getIpNetTable2 enumera las direcciones IP vecinas de un sistema local y devuelve esta información en una estructura de MIB_IPNET_TABLE2.
Las entradas de dirección IP vecinas se devuelven en una estructura de
El parámetro familia
Tenga en cuenta que la estructura de
Ejemplos
En el ejemplo siguiente se recupera la tabla de vecinos ip y, a continuación, se imprimen los valores de las entradas de fila de vecinos 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")
#pragma comment(lib, "ws2_32.lib")
int main()
{
// Declare and initialize variables
int i;
unsigned int j;
unsigned long status = 0;
PMIB_IPNET_TABLE2 pipTable = NULL;
// MIB_IPNET_ROW2 ipRow;
status = GetIpNetTable2(AF_INET, &pipTable);
if (status != NO_ERROR) {
printf("GetIpNetTable for IPv4 table returned error: %ld\n", status);
exit(1);
}
// Print some variables from the table
printf("Number of IPv4 table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; (unsigned) i < pipTable->NumEntries; i++) {
// printf("Table entry: %d\n", i);
printf("IPv4 Address[%d]:\t %s\n", (int) i,
inet_ntoa(pipTable->Table[i].Address.Ipv4.sin_addr));
printf("Interface index[%d]:\t\t %lu\n", (int) i,
pipTable->Table[i].InterfaceIndex);
printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
(int) i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
printf("Interface LUID IfType[%d]: ", (int) 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("Physical Address[%d]:\t ", (int) i);
if (pipTable->Table[i].PhysicalAddressLength == 0)
printf("\n");
// for (j = 0; (unsigned) j < pipTable->Table[i].PhysicalAddressLength; j++)
// printf ("%c"
for (j = 0; j < pipTable->Table[i].PhysicalAddressLength; j++) {
if (j == (pipTable->Table[i].PhysicalAddressLength - 1))
printf("%.2X\n", (int) pipTable->Table[i].PhysicalAddress[j]);
else
printf("%.2X-", (int) pipTable->Table[i].PhysicalAddress[j]);
}
printf("Physical Address Length[%d]:\t %lu\n", (int) i,
pipTable->Table[i].PhysicalAddressLength);
printf("Neighbor State[%d]:\t ", (int) i);
switch (pipTable->Table[i].State) {
case NlnsUnreachable:
printf("NlnsUnreachable\n");
break;
case NlnsIncomplete:
printf("NlnsIncomplete\n");
break;
case NlnsProbe:
printf("NlnsProbe\n");
break;
case NlnsDelay:
printf("NlnsDelay\n");
break;
case NlnsStale:
printf("NlnsStale\n");
break;
case NlnsReachable:
printf("NlnsReachable\n");
break;
case NlnsPermanent:
printf("NlnsPermanent\n");
break;
default:
printf("Unknown: %d\n", pipTable->Table[i].State);
break;
}
printf("Flags[%d]:\t\t %u\n", (int) i,
(unsigned char) pipTable->Table[i].Flags);
printf("ReachabilityTime[%d]:\t %lu\n\n", (int) i,
pipTable->Table[i].ReachabilityTime);
}
FreeMibTable(pipTable);
pipTable = NULL;
exit(0);
}
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows Vista [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2008 [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
netioapi.h (include Iphlpapi.h) |
biblioteca de |
Iphlpapi.lib |
DLL de |
Iphlpapi.dll |