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 MIB_TCP6ROW-Struktur enthält Informationen, die eine IPv6-TCP-Verbindung beschreiben.
Syntax
typedef struct _MIB_TCP6ROW {
MIB_TCP_STATE State;
IN6_ADDR LocalAddr;
DWORD dwLocalScopeId;
DWORD dwLocalPort;
IN6_ADDR RemoteAddr;
DWORD dwRemoteScopeId;
DWORD dwRemotePort;
} MIB_TCP6ROW, *PMIB_TCP6ROW;
Member
State
Typ: MIB_TCP_STATE
Der Status der TCP-Verbindung. Dieser Member kann einer der Werte aus dem MIB_TCP_STATE Enumerationstyp sein, der in der Headerdatei "Tcpmib.h " definiert ist.
LocalAddr
Typ: IN6_ADDR
Die lokale IPv6-Adresse für die TCP-Verbindung auf dem lokalen Computer. Der Wert 0 (null) gibt an, dass der Listener eine Verbindung für eine beliebige Schnittstelle akzeptieren kann.
dwLocalScopeId
Art: DWORD
Die lokale Bereichs-ID für die TCP-Verbindung auf dem lokalen Computer.
dwLocalPort
Art: DWORD
Die lokale Portnummer in Netzwerkbytereihenfolge für die TCP-Verbindung auf dem lokalen Computer.
Die maximale Größe einer IP-Portnummer beträgt 16 Bit, sodass nur die unteren 16 Bits verwendet werden sollten. Die oberen 16 Bits können nicht initialisierte Daten enthalten.
RemoteAddr
Typ: IN6_ADDR
Die IPv6-Adresse für die TCP-Verbindung auf dem Remotecomputer. Wenn der MitgliedstaatMIB_TCP_STATE_LISTEN ist, hat dieser Wert keine Bedeutung.
dwRemoteScopeId
Art: DWORD
Die Remotebereichs-ID für die TCP-Verbindung auf dem Remotecomputer. Wenn der MitgliedstaatMIB_TCP_STATE_LISTEN ist, hat dieser Wert keine Bedeutung.
dwRemotePort
Art: DWORD
Die Remoteportnummer in Netzwerkbytereihenfolge für die TCP-Verbindung auf dem Remotecomputer. Wenn der MitgliedstaatMIB_TCP_STATE_LISTEN ist, hat dieser Wert keine Bedeutung.
Die maximale Größe einer IP-Portnummer beträgt 16 Bit, sodass nur die unteren 16 Bits verwendet werden sollten. Die oberen 16 Bits können nicht initialisierte Daten enthalten.
Hinweise
Die MIB_TCP6ROW-Struktur wird unter Windows Vista und höher definiert.
Die GetTcp6Table-Funktion ruft die IPv6 TCP-Verbindungstabelle auf dem lokalen Computer ab und gibt diese Informationen in einer MIB_TCP6TABLE-Struktur zurück.
Ein Array von MIB_TCP6ROW Strukturen ist in der MIB_TCP6TABLE-Struktur enthalten.
Der State-Member gibt den Status des TCP-Eintrags in einem TCP-Zustandsdiagramm an. Eine TCP-Verbindung durchläuft während ihrer Lebensdauer eine Reihe von Zuständen. Die Status sind: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT und der fiktive Zustand CLOSED. Der CLOSED-Zustand ist fiktiv, da er den Zustand darstellt, wenn kein Übertragungskontrollblock und daher keine Verbindung vorhanden ist. Das TCP-Protokoll wird in RFC 793 beschrieben. Weitere Informationen finden Sie unter http://www.ietf.org/rfc/rfc793.txt.
Die Mitglieder dwLocalPort und dwRemotePort befinden sich in der Netzwerkbytereihenfolge. Um die dwLocalPort - oder dwRemotePort-Member verwenden zu können, sind möglicherweise die Funktionen ntohs oder inet_ntoa in Windows Sockets oder ähnlichen Funktionen erforderlich.
Die Mitglieder dwLocalScopeId und dwRemoteScopeId befinden sich in der Netzwerkbytereihenfolge. Um die DwLocalScopeId - oder dwRemoteScopeId-Member verwenden zu können, sind möglicherweise die Funktionen ntohl oder inet_ntoa in Windows Sockets oder ähnlichen Funktionen erforderlich.
Die Member LocalAddr und RemoteAddr werden in in6_addr-Strukturen gespeichert. Die Funktionen RtlIpv6AddressToString oder RtlIpv6AddressToStringEx können verwendet werden, um die IPv6-Adresse im LocalAddr - oder RemoteAddr-Member in eine Zeichenfolge zu konvertieren, ohne die Windows Sockets-DLL zu laden.
Beispiele
Im folgenden Beispiel wird die TCP-Verbindungstabelle für IPv6 abgerufen und der Status jeder Verbindung ausgegeben, die als MIB_TCP6ROW-Struktur dargestellt wird.
#define UNICODE 1
#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
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
| Kopfzeile | tcpmib.h (include Iphlpapi.h) |