GetIpNetTable2, fonction (netioapi.h)
La fonction GetIpNetTable2 récupère la table voisin IP sur l’ordinateur local.
Syntaxe
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpNetTable2(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPNET_TABLE2 *Table
);
Paramètres
[in] Family
Famille d’adresses à récupérer.
Les valeurs possibles pour la famille d’adresses sont répertoriées dans le fichier d’en-tête Winsock2.h. Notez que les valeurs de la famille d’adresses AF_ et des constantes de famille de protocoles PF_ sont identiques (par exemple, AF_INET et PF_INET), afin que l’une ou l’autre constante puisse être utilisée.
Sur le Kit de développement logiciel (SDK) Windows publié pour Windows Vista et ultérieur, l’organisation des fichiers d’en-tête a changé et les valeurs possibles pour ce membre sont définies dans le fichier d’en-tête Ws2def.h Ws2def.h. Notez que le fichier d’en-tête Ws2def.h est automatiquement inclus dans Winsock2.het ne doit jamais être utilisé directement.
Les valeurs actuellement prises en charge sont AF_INET, AF_INET6et AF_UNSPEC.
[out] Table
Pointeur vers un pointeur vers une structure MIB_IPNET_TABLE2 qui contient une table des entrées d’adresse IP voisines sur l’ordinateur local.
Valeur de retour
Si la fonction réussit, la valeur de retour est NO_ERROR ou ERROR_NOT_FOUND.
Si la fonction échoue ou ne retourne aucune donnée, la valeur de retour est l’un des codes d’erreur suivants.
Retourner le code | Description |
---|---|
|
Un paramètre non valide a été passé à la fonction. Cette erreur est retournée si un pointeur NULL |
|
Les ressources de mémoire insuffisantes sont disponibles pour terminer l’opération. |
|
Aucune entrée d’adresse IP voisine spécifiée dans le paramètre Family a été trouvée.
Cette valeur de retour indique que l’appel à la fonction GetIpNetTable2 a réussi, mais aucune donnée n’a été retournée. Cela peut se produire lorsque AF_INET est spécifié dans le paramètre Family et qu’il n’existe aucune entrée ARP à retourner. |
|
La demande n’est pas prise en charge.
Cette erreur est retournée si aucune pile IPv4 n’est sur l’ordinateur local et que AF_INET a été spécifié dans le paramètre Family. Cette erreur est également retournée si aucune pile IPv6 n’est sur l’ordinateur local et que AF_INET6 a été spécifié dans le paramètre Family. Cette erreur est également retournée sur les versions de Windows où cette fonction n’est pas prise en charge. |
|
Utilisez formatMessage pour obtenir la chaîne de message pour l’erreur retournée. |
Remarques
La fonction GetIpNetTable2 est définie sur Windows Vista et versions ultérieures.
Le
fonction GetIpNetTable2 énumère les adresses IP voisines sur un système local et retourne ces informations dans une structure MIB_IPNET_TABLE2.
Les entrées d’adresse IP voisines sont retournées dans une structure
Le paramètre famille de
Notez que la structure
Exemples
L’exemple suivant récupère la table voisin IP, puis imprime les valeurs des entrées de ligne voisin IP dans la table.
#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);
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2008 [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | netioapi.h (include Iphlpapi.h) |
bibliothèque | Iphlpapi.lib |
DLL | Iphlpapi.dll |