Condividi tramite


struttura MIB_TCP6ROW (tcpmib.h)

La struttura MIB_TCP6ROW contiene informazioni che descrivono una connessione TCP IPv6.

Sintassi

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;

Members

State

Tipo: MIB_TCP_STATE

Stato della connessione TCP. Questo membro può essere uno dei valori del tipo di enumerazione MIB_TCP_STATE definito nel file di intestazione Tcpmib.h .

Valore Significato
MIB_TCP_STATE_CLOSED
1
La connessione TCP si trova nello stato CLOSED che non rappresenta affatto lo stato di connessione.
MIB_TCP_STATE_LISTEN
2
La connessione TCP si trova nello stato LISTEN in attesa di una richiesta di connessione da qualsiasi porta e TCP remoto.
MIB_TCP_STATE_SYN_SENT
3
La connessione TCP si trova nello stato SYN-SENT in attesa di una richiesta di connessione corrispondente dopo aver inviato una richiesta di connessione (pacchetto SYN).
MIB_TCP_STATE_SYN_RCVD
4
La connessione TCP si trova nello stato SYN-RECEIVED in attesa di una conferma del riconoscimento della richiesta di connessione dopo aver ricevuto e inviato una richiesta di connessione (pacchetto SYN).
MIB_TCP_STATE_ESTAB
5
La connessione TCP si trova nello stato ESTABLISHED che rappresenta una connessione aperta, i dati ricevuti possono essere recapitati all'utente. Questo è lo stato normale per la fase di trasferimento dei dati della connessione TCP.
MIB_TCP_STATE_FIN_WAIT1
6
La connessione TCP è in attesa dello stato FIN-WAIT-1 in attesa di una richiesta di terminazione della connessione da TCP remoto o di un riconoscimento della richiesta di terminazione della connessione inviata in precedenza.
MIB_TCP_STATE_FIN_WAIT2
7
La connessione TCP è in attesa dello stato FIN-WAIT-1 per una richiesta di terminazione della connessione da TCP remoto.
MIB_TCP_STATE_CLOSE_WAIT
8
La connessione TCP si trova nello stato CLOSE-WAIT in attesa di una richiesta di terminazione della connessione dall'utente locale.
MIB_TCP_STATE_CLOSING
9
La connessione TCP si trova nello stato CLOSING in attesa del riconoscimento di una richiesta di terminazione della connessione da TCP remoto.
MIB_TCP_STATE_LAST_ACK
10
La connessione TCP si trova nello stato LAST-ACK in attesa di un riconoscimento della richiesta di terminazione della connessione inviata in precedenza al TCP remoto (che include un riconoscimento della richiesta di terminazione della connessione).
MIB_TCP_STATE_TIME_WAIT
11
La connessione TCP si trova nello stato TIME-WAIT in attesa del tempo sufficiente per assicurarsi che il TCP remoto abbia ricevuto il riconoscimento della richiesta di terminazione della connessione.
MIB_TCP_STATE_DELETE_TCB
12
La connessione TCP si trova nello stato di eliminazione TCB che rappresenta l'eliminazione del TCB (Transmission Control Block), una struttura di dati utilizzata per mantenere le informazioni su ogni voce TCP.

LocalAddr

Tipo: IN6_ADDR

Indirizzo IPv6 locale per la connessione TCP nel computer locale. Il valore zero indica che il listener può accettare una connessione su qualsiasi interfaccia.

dwLocalScopeId

Tipo: DWORD

ID dell'ambito locale per la connessione TCP nel computer locale.

dwLocalPort

Tipo: DWORD

Numero di porta locale in ordine di byte di rete per la connessione TCP nel computer locale.

La dimensione massima di un numero di porta IP è di 16 bit, quindi devono essere usati solo i 16 bit inferiori. I 16 bit superiori possono contenere dati non inizializzati.

RemoteAddr

Tipo: IN6_ADDR

Indirizzo IPv6 per la connessione TCP nel computer remoto. Quando il membro dello Stato è MIB_TCP_STATE_LISTEN, questo valore non ha alcun significato.

dwRemoteScopeId

Tipo: DWORD

ID ambito remoto per la connessione TCP nel computer remoto. Quando il membro dello Stato è MIB_TCP_STATE_LISTEN, questo valore non ha alcun significato.

dwRemotePort

Tipo: DWORD

Numero di porta remota in ordine di byte di rete per la connessione TCP nel computer remoto. Quando il membro dello Stato è MIB_TCP_STATE_LISTEN, questo valore non ha alcun significato.

La dimensione massima di un numero di porta IP è di 16 bit, quindi devono essere usati solo i 16 bit inferiori. I 16 bit superiori possono contenere dati non inizializzati.

Commenti

La struttura MIB_TCP6ROW è definita in Windows Vista e versioni successive.

La funzione GetTcp6Table recupera la tabella di connessione TCP IPv6 nel computer locale e restituisce queste informazioni in una struttura MIB_TCP6TABLE .

Una matrice di strutture MIB_TCP6ROW è contenuta nella struttura MIB_TCP6TABLE .

Il membro State indica lo stato della voce TCP in un diagramma di stato TCP. Una connessione TCP passa attraverso una serie di stati durante la sua durata. Gli stati sono: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT e lo stato fittizio CLOSED. Lo stato CLOSED è fittizio perché rappresenta lo stato quando non è presente alcun blocco di controllo trasmissione e pertanto nessuna connessione. Il protocollo TCP è descritto in RFC 793. Per altre informazioni, vedere http://www.ietf.org/rfc/rfc793.txt.

I membri dwLocalPort e dwRemotePort sono in ordine di byte di rete. Per usare i membri dwLocalPort o dwRemotePort , possono essere necessarie le funzioni ntohs o inet_ntoa in Windows Sockets o funzioni simili.

I membri dwLocalScopeId e dwRemoteScopeId sono in ordine di byte di rete. Per usare i membri dwLocalScopeId o dwRemoteScopeId , possono essere necessarie le funzioni ntohl o inet_ntoa in Windows Sockets o funzioni simili.

I membri LocalAddr e RemoteAddr vengono archiviati in strutture in6_addr . Le funzioni RtlIpv6AddressToString o RtlIpv6AddressToStringEx possono essere usate per convertire l'indirizzo IPv6 nei membri LocalAddr o RemoteAddr in una stringa senza caricare la DLL di Windows Sockets.

Esempio

Nell'esempio seguente viene recuperata la tabella di connessione TCP per IPv6 e viene stampato lo stato di ogni connessione rappresentata come struttura MIB_TCP6ROW .

#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;    
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Intestazione tcpmib.h (include Iphlpapi.h)

Vedi anche

GetTcp6Table

MIB_TCP6TABLE

MIB_TCPROW

MIB_TCPTABLE

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

in6_addr

inet_ntoa

ntohl

ntohs