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.

Auf der für Windows Vista und höher veröffentlichten Windows SDK wurde die organization der 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.h enthalten ist und niemals direkt verwendet werden sollte.

Die derzeit unterstützten Werte sind AF_INET, AF_INET6 und AF_UNSPEC.

Wert Bedeutung
AF_UNSPEC
0
Die Adressfamilie ist nicht angegeben. Wenn dieser Parameter angegeben ist, gibt diese Funktion die Tabelle der benachbarten IP-Adresse zurück, die sowohl IPv4- als auch IPv6-Einträge enthält.
AF_INET
2
Die IPv4-Adressfamilie (Internet Protocol Version 4). Wenn dieser Parameter angegeben ist, gibt diese Funktion die Tabelle der benachbarten IP-Adresse zurück, die nur IPv4-Einträge enthält.
AF_INET6
23
Die IPv6-Adressfamilie (Internet Protocol Version 6). Wenn dieser Parameter angegeben ist, gibt diese Funktion die Tabelle der benachbarten IP-Adresse zurück, die nur IPv6-Einträge enthält.

[out] Table

Ein Zeiger auf eine MIB_IPNET_TABLE2-Struktur , die eine Tabelle mit benachbarten IP-Adresseinträgen 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
ERROR_INVALID_PARAMETER
Es wurde ein ungültiger Parameter an die Funktion übergeben. Dieser Fehler wird zurückgegeben, wenn im Table-Parameter ein NULL-Zeiger übergeben wird oder der Family-Parameter nicht als AF_INET, AF_INET6 oder AF_UNSPEC angegeben wurde.
ERROR_NOT_ENOUGH_MEMORY
Es sind unzureichende Arbeitsspeicherressourcen verfügbar, um den Vorgang abzuschließen.
ERROR_NOT_FOUND
Es wurden keine benachbarten IP-Adresseinträge gefunden, wie im Family-Parameter 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 Family-Parameter angegeben ist und keine ARP-Einträge zurückgegeben werden sollen.

ERROR_NOT_SUPPORTED
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 Family-Parameter angegeben wurde. Dieser Fehler wird auch zurückgegeben, wenn sich kein IPv6-Stapel auf dem lokalen Computer befindet und AF_INET6 im Family-Parameter angegeben wurde. Dieser Fehler wird auch für Versionen von Windows zurückgegeben, bei denen diese Funktion nicht unterstützt wird.

Andere
Verwenden Sie FormatMessage , um die Meldungszeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

Die GetIpNetTable2-Funktion ist unter Windows Vista und höher definiert.

The
Die 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 Benachbarten IP-Adresseinträge werden in einer MIB_IPNET_TABLE2-Struktur im Puffer zurückgegeben, auf den der Table-Parameter verweist. Die MIB_IPNET_TABLE2-Struktur enthält eine Anzahl von Einträgen für benachbarte IP-Adressen und ein Array von MIB_IPNET_ROW2 Strukturen für jeden Nachbar-IP-Adresseintrag. Wenn diese zurückgegebenen Strukturen nicht mehr benötigt werden, geben Sie den Arbeitsspeicher durch Aufrufen der FreeMibTable frei.

Der Family-Parameter muss entweder für AF_INET, AF_INET6 oder AF_UNSPEC initialisiert werden.

Beachten Sie, dass die zurückgegebene MIB_IPNET_TABLE2 Struktur, auf die der Table-Parameter verweist, eine Auffüllung für die Ausrichtung zwischen dem NumEntries-Element und dem ersten MIB_IPNET_ROW2 Arrayeintrag im Table-Element der MIB_IPNET_TABLE2-Struktur enthalten kann. Zwischen den MIB_IPNET_ROW2 Arrayeinträgen kann auch ein Abstand für die Ausrichtung vorhanden sein. Bei jedem Zugriff auf einen MIB_IPNET_ROW2 Arrayeintrag sollte davon ausgegangen werden, dass eine Auffüllung vorhanden ist.

Beispiele

Im folgenden Beispiel wird die IP-Nachbartabelle abgerufen und dann die Werte für IP-Nachbarzeileneinträge in der Tabelle ausgegeben.

#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
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile netioapi.h (include Iphlpapi.h)
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

CreateIpNetEntry2

FlushIpNetTable2

FreeMibTable

GetIpNetEntry2

MIB_IPNET_ROW2

MIB_IPNET_TABLE2

ResolveIpNetEntry2

SetIpNetEntry2