Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die GetTcp6Table-Funktion ruft die TCP-Verbindungstabelle für IPv6 ab.
Syntax
IPHLPAPI_DLL_LINKAGE ULONG GetTcp6Table(
[out] PMIB_TCP6TABLE TcpTable,
[in, out] PULONG SizePointer,
[in] BOOL Order
);
Parameter
[out] TcpTable
Ein Zeiger auf einen Puffer, der die TCP-Verbindungstabelle für IPv6 als MIB_TCP6TABLE-Struktur empfängt.
[in, out] SizePointer
Gibt bei der Eingabe die Größe des Puffers in Byte an, auf den der TcpTable-Parameter verweist.
Wenn der Puffer bei der Ausgabe nicht groß genug ist, um die zurückgegebene TCP-Verbindungstabelle zu enthalten, legt die Funktion diesen Parameter gleich der erforderlichen Puffergröße in Bytes fest.
[in] Order
Ein boolescher Wert, der angibt, ob die TCP-Verbindungstabelle sortiert werden soll. Wenn dieser Parameter TRUE ist, wird die Tabelle in aufsteigender Reihenfolge sortiert, beginnend mit der niedrigsten lokalen IP-Adresse. Wenn dieser Parameter FALSE ist, wird die Tabelle in der Reihenfolge angezeigt, in der sie abgerufen wurden.
Die folgenden Werte werden (wie aufgeführt) verglichen, wenn die TCP-Endpunkte angeordnet werden:
- Lokale IPv6-Adresse
- Id des lokalen Bereichs
- Lokaler Port
- IPv6-Remoteadresse
- Remotebereichs-ID
- 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 |
|---|---|
|
Der Puffer, auf den der TcpTable-Parameter verweist, ist nicht groß genug. Die erforderliche Größe wird in der Variablen zurückgegeben, auf die der SizePointer-Parameter verweist. |
|
Der SizePointer-Parameter ist NULL, oder GetTcp6Table kann nicht in den Speicher schreiben, auf den der SizePointer-Parameter verweist. |
|
Diese Funktion wird auf dem Betriebssystem, das auf dem lokalen System verwendet wird, nicht unterstützt. |
|
Verwenden Sie FormatMessage , um die Meldungszeichenfolge für den zurückgegebenen Fehler abzurufen. |
Hinweise
Die GetTcp6Table-Funktion ist unter Windows Vista und höher definiert.
Beispiele
Im folgenden Beispiel wird die TCP-Verbindungstabelle für IPv6 abgerufen und der Status jeder Verbindung ausgegeben.
#ifndef UNICODE
#define UNICODE
#endif
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>
// Need to link with Iphlpapi.lib and Ws2_32.lib
#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 wmain()
{
// Declare and initialize variables
PMIB_TCP6TABLE pTcpTable;
DWORD dwSize = 0;
DWORD dwRetVal = 0;
wchar_t ipstringbuffer[46];
int i;
pTcpTable = (MIB_TCP6TABLE *) MALLOC(sizeof (MIB_TCP6TABLE));
if (pTcpTable == NULL) {
wprintf(L"Error allocating memory\n");
return 1;
}
dwSize = sizeof (MIB_TCP6TABLE);
// Make an initial call to GetTcp6Table to
// get the necessary size into the dwSize variable
if ((dwRetVal = GetTcp6Table(pTcpTable, &dwSize, TRUE)) ==
ERROR_INSUFFICIENT_BUFFER) {
FREE(pTcpTable);
pTcpTable = (MIB_TCP6TABLE *) MALLOC(dwSize);
if (pTcpTable == NULL) {
wprintf(L"Error allocating memory\n");
return 1;
}
}
// Make a second call to GetTcp6Table to get
// the actual data we require
if ((dwRetVal = GetTcp6Table(pTcpTable, &dwSize, TRUE)) == NO_ERROR) {
wprintf(L"\tNumber of entries: %d\n", (int) pTcpTable->dwNumEntries);
for (i = 0; i < (int) pTcpTable->dwNumEntries; i++) {
wprintf(L"\n\tTCP[%d] State: %ld - ", i,
pTcpTable->table[i].State);
switch (pTcpTable->table[i].State) {
case MIB_TCP_STATE_CLOSED:
wprintf(L"CLOSED\n");
break;
case MIB_TCP_STATE_LISTEN:
wprintf(L"LISTEN\n");
break;
case MIB_TCP_STATE_SYN_SENT:
wprintf(L"SYN-SENT\n");
break;
case MIB_TCP_STATE_SYN_RCVD:
wprintf(L"SYN-RECEIVED\n");
break;
case MIB_TCP_STATE_ESTAB:
wprintf(L"ESTABLISHED\n");
break;
case MIB_TCP_STATE_FIN_WAIT1:
wprintf(L"FIN-WAIT-1\n");
break;
case MIB_TCP_STATE_FIN_WAIT2:
wprintf(L"FIN-WAIT-2 \n");
break;
case MIB_TCP_STATE_CLOSE_WAIT:
wprintf(L"CLOSE-WAIT\n");
break;
case MIB_TCP_STATE_CLOSING:
wprintf(L"CLOSING\n");
break;
case MIB_TCP_STATE_LAST_ACK:
wprintf(L"LAST-ACK\n");
break;
case MIB_TCP_STATE_TIME_WAIT:
wprintf(L"TIME-WAIT\n");
break;
case MIB_TCP_STATE_DELETE_TCB:
wprintf(L"DELETE-TCB\n");
break;
default:
wprintf(L"UNKNOWN dwState value\n");
break;
}
if (InetNtop(AF_INET6, &pTcpTable->table[i].LocalAddr, ipstringbuffer, 46) == NULL)
wprintf(L" InetNtop function failed for local IPv6 address\n");
else
wprintf(L"\tTCP[%d] Local Addr: %s\n", i, ipstringbuffer);
wprintf(L"\tTCP[%d] Local Scope ID: %d \n", i,
ntohl (pTcpTable->table[i].dwLocalScopeId));
wprintf(L"\tTCP[%d] Local Port: %d \n", i,
ntohs((u_short)pTcpTable->table[i].dwLocalPort));
if (InetNtop(AF_INET6, &pTcpTable->table[i].RemoteAddr, ipstringbuffer, 46) == NULL)
wprintf(L" InetNtop function failed for remote IPv6 address\n");
else
wprintf(L"\tTCP[%d] Remote Addr: %s\n", i, ipstringbuffer);
wprintf(L"\tTCP[%d] Remote Scope ID: %d \n", i,
ntohl(pTcpTable->table[i].dwRemoteScopeId));
wprintf(L"\tTCP[%d] Remote Port: %d\n", i,
ntohs((u_short)pTcpTable->table[i].dwRemotePort));
}
} else {
wprintf(L"\tGetTcp6Table failed with %d\n", dwRetVal);
FREE(pTcpTable);
return 1;
}
if (pTcpTable != NULL) {
FREE(pTcpTable);
pTcpTable = NULL;
}
return 0;
}
Anforderungen
| Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
| Zielplattform | Windows |
| Kopfzeile | iphlpapi.h |
| Bibliothek | Iphlpapi.lib |
| DLL | Iphlpapi.dll |