Freigeben über


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.

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

[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
ERROR_INVALID_PARAMETER
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.
ERROR_NOT_ENOUGH_MEMORY
Unzureichende Arbeitsspeicherressourcen sind verfügbar, um den Vorgang abzuschließen.
ERROR_NOT_FOUND
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.

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 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.

Andere
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

Siehe auch

CreateIpNetEntry2-

FlushIpNetTable2-

FreeMibTable-

GetIpNetEntry2-

MIB_IPNET_ROW2

MIB_IPNET_TABLE2

ResolveIpNetEntry2-

SetIpNetEntry2-