GetIpNetTable2-Funktion (netioapi.h)
Die GetIpNetTable2--Funktion ruft die IP-Nachbartabelle auf dem lokalen Computer ab.
Syntax
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpNetTable2(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPNET_TABLE2 *Table
);
Parameter
[in] Family
Die abzurufende Adressfamilie.
Mögliche Werte für die Adressfamilie sind in der Winsock2.h Headerdatei aufgeführt. Beachten Sie, dass die Werte für die AF_ Adressfamilie und PF_ Protokollfamilienkonstanten identisch sind (z. B. AF_INET und PF_INET), sodass beide Konstanten verwendet werden können.
Im windows SDK, das für Windows Vista und höher veröffentlicht wurde, hat sich die Organisation von Headerdateien geändert, und mögliche Werte für dieses Element werden in der Ws2def.h Headerdatei definiert. Beachten Sie, dass die Ws2def.h Headerdatei automatisch in Winsock2.henthalten ist und niemals direkt verwendet werden sollte.
Die derzeit unterstützten Werte werden AF_INET, AF_INET6und AF_UNSPEC.
[out] Table
Ein Zeiger auf einen Zeiger auf eine MIB_IPNET_TABLE2 Struktur, die eine Tabelle mit Ip-Adresseinträgen des Nachbarn auf dem lokalen Computer enthält.
Rückgabewert
Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR oder ERROR_NOT_FOUND.
Wenn die Funktion fehlschlägt oder keine Daten zurückgibt, ist der Rückgabewert einer der folgenden Fehlercodes.
Rückgabecode | Beschreibung |
---|---|
|
An die Funktion wurde ein ungültiger Parameter übergeben. Dieser Fehler wird zurückgegeben, wenn ein NULL- Zeiger im Table Parameter übergeben wird oder der parameter Family nicht als AF_INET, AF_INET6oder AF_UNSPECangegeben wurde. |
|
Unzureichende Arbeitsspeicherressourcen sind verfügbar, um den Vorgang abzuschließen. |
|
Es wurden keine Benachbarten IP-Adresseinträge gefunden, wie im Parameter Family angegeben.
Dieser Rückgabewert gibt an, dass der Aufruf der GetIpNetTable2 Funktion erfolgreich war, aber es wurden keine Daten zurückgegeben. Dies kann auftreten, wenn AF_INET im parameter Family angegeben wird und keine ARP-Einträge zurückgegeben werden sollen. |
|
Die Anforderung wird nicht unterstützt.
Dieser Fehler wird zurückgegeben, wenn sich kein IPv4-Stapel auf dem lokalen Computer befindet und AF_INET im Parameter Family angegeben wurde. Dieser Fehler wird auch zurückgegeben, wenn sich kein IPv6-Stapel auf dem lokalen Computer befindet und AF_INET6 im Parameter Family angegeben wurde. Dieser Fehler wird auch in Versionen von Windows zurückgegeben, in denen diese Funktion nicht unterstützt wird. |
|
Verwenden Sie FormatMessage-, um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen. |
Bemerkungen
Die GetIpNetTable2--Funktion wird unter Windows Vista und höher definiert.
Das
GetIpNetTable2--Funktion listet die benachbarten IP-Adressen auf einem lokalen System auf und gibt diese Informationen in einer MIB_IPNET_TABLE2 Struktur zurück.
Die Einträge der benachbarten IP-Adressen werden in einer MIB_IPNET_TABLE2 Struktur im Puffer zurückgegeben, auf die durch den parameter Table verwiesen wird. Die MIB_IPNET_TABLE2-Struktur enthält die Anzahl der Ip-Adresseneingaben des Nachbarn und ein Array von MIB_IPNET_ROW2 Strukturen für jeden Ip-Adresseintrag des Nachbarn. Wenn diese zurückgegebenen Strukturen nicht mehr benötigt werden, geben Sie den Speicher frei, indem Sie die FreeMibTable-aufrufen.
Der Parameter Family muss entweder für AF_INET, AF_INET6oder AF_UNSPECinitialisiert werden.
Beachten Sie, dass die zurückgegebene MIB_IPNET_TABLE2 Struktur, auf die der parameter Table verweist, den Abstand für die Ausrichtung zwischen dem NumEntries-Element und dem ersten MIB_IPNET_ROW2 Arrayeintrag im Table Member der MIB_IPNET_TABLE2-Struktur enthalten kann. Der Abstand für die Ausrichtung kann auch zwischen den MIB_IPNET_ROW2 Arrayeinträgen vorhanden sein. Jeder Zugriff auf einen MIB_IPNET_ROW2 Arrayeintrag sollte davon ausgehen, dass der Abstand vorhanden ist.
Beispiele
Im folgenden Beispiel wird die TABELLE "IP-Nachbar" abgerufen. Anschließend werden die Werte für Die Einträge der IP-Nachbarzeilen in der Tabelle gedruckt.
#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);
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows Vista [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2008 [Nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | netioapi.h (include Iphlpapi.h) |
Library | Iphlpapi.lib |
DLL- | Iphlpapi.dll |