Freigeben über


GetTcpTable-Funktion (iphlpapi.h)

Die GetTcpTable-Funktion ruft die IPv4-TCP-Verbindungstabelle ab.

Syntax

IPHLPAPI_DLL_LINKAGE ULONG GetTcpTable(
  [out]     PMIB_TCPTABLE TcpTable,
  [in, out] PULONG        SizePointer,
  [in]      BOOL          Order
);

Parameter

[out] TcpTable

Ein Zeiger auf einen Puffer, der die TCP-Verbindungstabelle als MIB_TCPTABLE-Struktur empfängt.

[in, out] SizePointer

Gibt bei der Eingabe die Größe des Puffers in Byte an, auf den der pTcpTable-Parameter verweist.

Wenn der Puffer bei der Ausgabe nicht groß genug ist, um die zurückgegebene Verbindungstabelle zu enthalten, legt die Funktion diesen Parameter gleich der erforderlichen Puffergröße in Bytes fest.

Im Windows SDK, das für Windows Vista und höher veröffentlicht wurde, wird der Datentyp für diesen Parameter in einen PULONG-Wert geändert, der einem PDWORD entspricht.

[in] Order

Ein boolescher Wert, der angibt, ob die TCP-Verbindungstabelle sortiert werden soll. Wenn dieser Parameter TRUE ist, wird die Tabelle in der Reihenfolge sortiert:

  1. Lokale IP-Adresse
  2. Lokaler Port
  3. Remote-IP-Adresse
  4. Remoteport

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.

Rückgabecode Beschreibung
ERROR_INSUFFICIENT_BUFFER
Der Puffer, auf den der pTcpTable-Parameter verweist, ist nicht groß genug. Die erforderliche Größe wird in der DWORD-Variablen zurückgegeben, auf die der pdwSize-Parameter verweist.

Dieser Fehler wird auch zurückgegeben, wenn der pTcpTable-ParameterNULL ist.

ERROR_INVALID_PARAMETER
Der pdwSize-Parameter ist NULL, oder GetTcpTable kann nicht in den Speicher schreiben, auf den der pdwSize-Parameter verweist.
ERROR_NOT_SUPPORTED
Diese Funktion wird auf dem Betriebssystem, das auf dem lokalen System verwendet wird, nicht unterstützt.
STATUS_UNSUCCESSFUL
Wenn Sie diesen Rückgabecode erhalten, reicht das erneute Aufrufen der Funktion in der Regel aus, um das Problem zu beheben und das gewünschte Ergebnis zu erhalten. Dieser Rückgabecode kann eine Folge einer hohen Auslastung des Systems sein. Beispiel: Die Größe der TCP-Verbindungstabelle ändert sich 3 aufeinanderfolgende Male um mehr als zwei zusätzliche Elemente.
Andere
Verwenden Sie FormatMessage , um die Meldungszeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

Im Windows SDK, das für Windows Vista und höher veröffentlicht wurde, wird der Rückgabewert der GetTcpTable-Funktion in einen Datentyp von ULONG geändert, der einem DWORD entspricht.

Beispiele

Im folgenden Beispiel wird die TCP-Verbindungstabelle für IPv4 abgerufen und der Status jeder Verbindung ausgegeben.

// Need to link with Iphlpapi.lib and Ws2_32.lib
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

int main()
{

    // Declare and initialize variables
    PMIB_TCPTABLE pTcpTable;
    DWORD dwSize = 0;
    DWORD dwRetVal = 0;

    char szLocalAddr[128];
    char szRemoteAddr[128];

    struct in_addr IpAddr;

    int i;

    pTcpTable = (MIB_TCPTABLE *) MALLOC(sizeof (MIB_TCPTABLE));
    if (pTcpTable == NULL) {
        printf("Error allocating memory\n");
        return 1;
    }

    dwSize = sizeof (MIB_TCPTABLE);
// Make an initial call to GetTcpTable to
// get the necessary size into the dwSize variable
    if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) ==
        ERROR_INSUFFICIENT_BUFFER) {
        FREE(pTcpTable);
        pTcpTable = (MIB_TCPTABLE *) MALLOC(dwSize);
        if (pTcpTable == NULL) {
            printf("Error allocating memory\n");
            return 1;
        }
    }
// Make a second call to GetTcpTable to get
// the actual data we require
    if ((dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE)) == NO_ERROR) {
        printf("\tNumber of entries: %d\n", (int) pTcpTable->dwNumEntries);
        for (i = 0; i < (int) pTcpTable->dwNumEntries; i++) {
            IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwLocalAddr;
            strcpy_s(szLocalAddr, sizeof (szLocalAddr), inet_ntoa(IpAddr));
            IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwRemoteAddr;
            strcpy_s(szRemoteAddr, sizeof (szRemoteAddr), inet_ntoa(IpAddr));

            printf("\n\tTCP[%d] State: %ld - ", i,
                   pTcpTable->table[i].dwState);
            switch (pTcpTable->table[i].dwState) {
            case MIB_TCP_STATE_CLOSED:
                printf("CLOSED\n");
                break;
            case MIB_TCP_STATE_LISTEN:
                printf("LISTEN\n");
                break;
            case MIB_TCP_STATE_SYN_SENT:
                printf("SYN-SENT\n");
                break;
            case MIB_TCP_STATE_SYN_RCVD:
                printf("SYN-RECEIVED\n");
                break;
            case MIB_TCP_STATE_ESTAB:
                printf("ESTABLISHED\n");
                break;
            case MIB_TCP_STATE_FIN_WAIT1:
                printf("FIN-WAIT-1\n");
                break;
            case MIB_TCP_STATE_FIN_WAIT2:
                printf("FIN-WAIT-2 \n");
                break;
            case MIB_TCP_STATE_CLOSE_WAIT:
                printf("CLOSE-WAIT\n");
                break;
            case MIB_TCP_STATE_CLOSING:
                printf("CLOSING\n");
                break;
            case MIB_TCP_STATE_LAST_ACK:
                printf("LAST-ACK\n");
                break;
            case MIB_TCP_STATE_TIME_WAIT:
                printf("TIME-WAIT\n");
                break;
            case MIB_TCP_STATE_DELETE_TCB:
                printf("DELETE-TCB\n");
                break;
            default:
                printf("UNKNOWN dwState value\n");
                break;
            }
            printf("\tTCP[%d] Local Addr: %s\n", i, szLocalAddr);
            printf("\tTCP[%d] Local Port: %d \n", i,
                   ntohs((u_short)pTcpTable->table[i].dwLocalPort));
            printf("\tTCP[%d] Remote Addr: %s\n", i, szRemoteAddr);
            printf("\tTCP[%d] Remote Port: %d\n", i,
                   ntohs((u_short)pTcpTable->table[i].dwRemotePort));
        }
    } else {
        printf("\tGetTcpTable failed with %d\n", dwRetVal);
        FREE(pTcpTable);
        return 1;
    }

    if (pTcpTable != NULL) {
        FREE(pTcpTable);
        pTcpTable = NULL;
    }    

    return 0;    
}


Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile iphlpapi.h
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

GetExtendedTcpTable

GetOwnerModuleFromTcpEntry

GetTcp6Table

GetTcp6Table2

GetTcpStatistics

GetTcpStatisticsEx

GetTcpTable2

MIB_TCPROW

MIB_TCPROW_OWNER_MODULE

MIB_TCPROW_OWNER_PID

MIB_TCPTABLE

MIB_TCPTABLE_OWNER_MODULE

MIB_TCPTABLE_OWNER_PID

SetTcpEntry