MIB_TCPROW_LH-Struktur (tcpmib.h)
Die MIB_TCPROW-Struktur enthält Informationen, die eine IPv4-TCP-Verbindung dezimieren.
Syntax
typedef struct _MIB_TCPROW_LH {
union {
DWORD dwState;
MIB_TCP_STATE State;
};
DWORD dwLocalAddr;
DWORD dwLocalPort;
DWORD dwRemoteAddr;
DWORD dwRemotePort;
} MIB_TCPROW_LH, *PMIB_TCPROW_LH;
Member
dwState
Art: DWORD
Der Status der TCP-Verbindung. Dieser Member kann einer der Werte sein, die in der Headerdatei Iprtrmib.h definiert sind.
Auf der für Windows Vista und höher veröffentlichten Windows SDK hat sich die organization der Headerdateien geändert. Dieser Member kann einer der Werte aus der MIB_TCP_STATE-Enumeration sein, die in der Headerdatei "Tcpmib.h " und nicht in der Headerdatei "Iprtrmib.h " definiert ist. Beachten Sie, dass die Headerdatei Tcpmib.h automatisch in Iprtrmib.h enthalten ist, die automatisch in der Headerdatei Iphlpapi.h enthalten ist. Die Headerdateien Tcpmib.h und Iprtrmib.h sollten niemals direkt verwendet werden.
State
dwLocalAddr
Art: DWORD
Die lokale IPv4-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.
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.
dwRemoteAddr
Art: DWORD
Die IPv4-Adresse für die TCP-Verbindung auf dem Remotecomputer. Wenn der dwState-MemberMIB_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 das dwState-ElementMIB_TCP_STATE_LISTEN ist, hat dieses Element 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 GetTcpTable-Funktion ruft die IPv4-TCP-Verbindungstabelle auf dem lokalen Computer ab und gibt diese Informationen in einer MIB_TCPTABLE-Struktur zurück.
Ein Array von MIB_TCPROW-Strukturen ist in der MIB_TCPTABLE-Struktur enthalten. Die MIB_TCPROW-Struktur wird auch von der SetTcpEntry-Funktion verwendet.
Der dwState-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 Elemente dwLocalAddr und dwRemoteAddr werden als DWORD im gleichen Format wie die in_addr-Struktur gespeichert. Um die DwLocalAddr - oder dwRemoteAddr-Member verwenden zu können, sind möglicherweise die Funktionen ntohl oder inet_ntoa in Windows Sockets oder ähnlichen Funktionen erforderlich. Unter Windows Vista und höher können die Funktionen RtlIpv4AddressToString oder RtlIpv4AddressToStringEx verwendet werden, um die IPv4-Adresse in den Membern dwLocalAddr oder dwRemoteAddr in eine Zeichenfolge zu konvertieren, ohne die Windows Sockets-DLL zu laden.
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 MIB_TCPROW-Struktur hat sich unter Windows Vista und höher leicht geändert. Unter Windows Vista und höher wird das dwState-Element durch eine Union ersetzt, die die folgenden Member enthält.
Im Windows SDK wird die Version der Struktur für die Verwendung unter Windows Vista und höher als MIB_TCPROW_LH definiert. Im Windows SDK wird die Version dieser Struktur, die auf früheren Systemen verwendet werden soll, einschließlich Windows 2000 und höher, als MIB_TCPROW_W2K definiert. Wenn eine Anwendung kompiliert wird, wenn die Zielplattform Windows Vista und höher (NTDDI_VERSION >= NTDDI_LONGHORN
, oder WINVER >= 0x0600
) ist, _WIN32_WINNT >= 0x0600
wird die MIB_TCPROW_LH-Struktur in die MIB_TCPROW-Struktur eingegeben. Wenn eine Anwendung kompiliert wird, wenn die Zielplattform nicht Windows Vista und höher ist, wird die MIB_TCPROW_W2K-Struktur in die MIB_TCPROW-Struktur festgelegt.
Auf der für Windows Vista und höher veröffentlichten Windows SDK hat sich die organization der Headerdateien geändert. Diese Struktur wird in der Headerdatei Tcpmib.h und nicht in der Headerdatei Iprtrmib.h definiert. Beachten Sie, dass die Headerdatei Tcpmib.h automatisch in Iprtrmib.h enthalten ist, die automatisch in der Headerdatei Iphlpapi.h enthalten ist. Die Headerdateien Tcpmib.h und Iprtrmib.h sollten nie direkt verwendet werden.
Beispiele
Im folgenden Beispiel wird die TCP-Verbindungstabelle abgerufen und der Zustand jeder Verbindung ausgegeben, die als MIB_TCPROW-Struktur dargestellt wird.
#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 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++) {
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: %d\n", pTcpTable->table[i].dwState);
break;
}
IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwLocalAddr;
strcpy_s(szLocalAddr, sizeof (szLocalAddr), inet_ntoa(IpAddr));
printf("\tTCP[%d] Local Addr: %s\n", i, szLocalAddr);
printf("\tTCP[%d] Local Port: %d \n", i,
ntohs((u_short)pTcpTable->table[i].dwLocalPort));
IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwRemoteAddr;
strcpy_s(szRemoteAddr, sizeof (szRemoteAddr), inet_ntoa(IpAddr));
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
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Kopfzeile | tcpmib.h (include Iphlpapi.h) |
Weitere Informationen
MIB_TCP6ROW2