Bagikan melalui


struktur MIB_TCP6ROW (tcpmib.h)

Struktur MIB_TCP6ROW berisi informasi yang menjelaskan koneksi TCP IPv6.

Sintaks

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;

Anggota

State

Jenis: MIB_TCP_STATE

Status koneksi TCP. Anggota ini dapat menjadi salah satu nilai dari jenis enumerasi MIB_TCP_STATE yang ditentukan dalam file header Tcpmib.h .

Nilai Makna
MIB_TCP_STATE_CLOSED
1
Koneksi TCP berada dalam status TERTUTUP yang tidak mewakili status koneksi sama sekali.
MIB_TCP_STATE_LISTEN
2
Koneksi TCP berada dalam status LISTEN menunggu permintaan koneksi dari TCP dan port jarak jauh.
MIB_TCP_STATE_SYN_SENT
3
Koneksi TCP berada dalam status SYN-SENT menunggu permintaan koneksi yang cocok setelah mengirim permintaan koneksi (paket SYN).
MIB_TCP_STATE_SYN_RCVD
4
Koneksi TCP berada dalam status SYN-RECEIVED menunggu pengakuan permintaan koneksi yang mengonfirmasi setelah menerima dan mengirim permintaan koneksi (paket SYN).
MIB_TCP_STATE_ESTAB
5
Koneksi TCP berada dalam status ESTABLISHED yang mewakili koneksi terbuka, data yang diterima dapat dikirimkan kepada pengguna. Ini adalah status normal untuk fase transfer data koneksi TCP.
MIB_TCP_STATE_FIN_WAIT1
6
Koneksi TCP adalah status FIN-WAIT-1 menunggu permintaan penghentian koneksi dari TCP jarak jauh, atau pengakuan permintaan penghentian koneksi yang sebelumnya dikirim.
MIB_TCP_STATE_FIN_WAIT2
7
Koneksi TCP adalah status FIN-WAIT-1 menunggu permintaan penghentian koneksi dari TCP jarak jauh.
MIB_TCP_STATE_CLOSE_WAIT
8
Koneksi TCP berada dalam status CLOSE-WAIT menunggu permintaan penghentian koneksi dari pengguna lokal.
MIB_TCP_STATE_CLOSING
9
Koneksi TCP berada dalam status CLOSING menunggu pengakuan permintaan penghentian koneksi dari TCP jarak jauh.
MIB_TCP_STATE_LAST_ACK
10
Koneksi TCP berada dalam status LAST-ACK menunggu pengakuan permintaan penghentian koneksi yang sebelumnya dikirim ke TCP jarak jauh (yang mencakup pengakuan permintaan penghentian koneksinya).
MIB_TCP_STATE_TIME_WAIT
11
Koneksi TCP berada dalam status TIME-WAIT menunggu cukup waktu untuk lulus untuk memastikan TCP jarak jauh menerima pengakuan permintaan penghentian koneksinya.
MIB_TCP_STATE_DELETE_TCB
12
Koneksi TCP berada dalam status hapus TCB yang mewakili penghapusan Blok Kendali Transmisi (TCB), struktur data yang digunakan untuk mempertahankan informasi pada setiap entri TCP.

LocalAddr

Jenis: IN6_ADDR

Alamat IPv6 lokal untuk koneksi TCP di komputer lokal. Nilai nol menunjukkan pendengar dapat menerima koneksi pada antarmuka apa pun.

dwLocalScopeId

Jenis: DWORD

ID cakupan lokal untuk koneksi TCP di komputer lokal.

dwLocalPort

Jenis: DWORD

Nomor port lokal dalam urutan byte jaringan untuk koneksi TCP pada komputer lokal.

Ukuran maksimum nomor port IP adalah 16 bit, jadi hanya 16 bit yang lebih rendah yang harus digunakan. 16 bit atas mungkin berisi data yang tidak diinisialisasi.

RemoteAddr

Jenis: IN6_ADDR

Alamat IPv6 untuk koneksi TCP pada komputer jarak jauh. Ketika anggota StatusMIB_TCP_STATE_LISTEN, nilai ini tidak memiliki arti.

dwRemoteScopeId

Jenis: DWORD

ID lingkup jarak jauh untuk koneksi TCP pada komputer jarak jauh. Ketika anggota StatusMIB_TCP_STATE_LISTEN, nilai ini tidak memiliki arti.

dwRemotePort

Jenis: DWORD

Nomor port jarak jauh dalam urutan byte jaringan untuk koneksi TCP pada komputer jarak jauh. Ketika anggota StatusMIB_TCP_STATE_LISTEN, nilai ini tidak memiliki arti.

Ukuran maksimum nomor port IP adalah 16 bit, jadi hanya 16 bit yang lebih rendah yang harus digunakan. 16 bit atas mungkin berisi data yang tidak diinisialisasi.

Keterangan

Struktur MIB_TCP6ROW didefinisikan pada Windows Vista dan yang lebih baru.

Fungsi GetTcp6Table mengambil tabel koneksi TCP IPv6 di komputer lokal dan mengembalikan informasi ini dalam struktur MIB_TCP6TABLE .

Array struktur MIB_TCP6ROW terkandung dalam struktur MIB_TCP6TABLE .

Anggota Status menunjukkan status entri TCP dalam diagram status TCP. Koneksi TCP berkembang melalui serangkaian status selama masa pakainya. Statusnya adalah: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, dan status fiktif CLOSED. Status CLOSED bersifat fiktif karena mewakili status ketika tidak ada Blok Kontrol Transmisi, dan oleh karena itu, tidak ada koneksi. Protokol TCP dijelaskan dalam RFC 793. Untuk informasi selengkapnya, lihat http://www.ietf.org/rfc/rfc793.txt.

Anggota dwLocalPort, dan dwRemotePort berada dalam urutan byte jaringan. Untuk menggunakan anggota dwLocalPort atau dwRemotePort , fungsi ntohs atau inet_ntoa di Windows Sockets atau fungsi serupa mungkin diperlukan.

Anggota dwLocalScopeId, dan dwRemoteScopeId berada dalam urutan byte jaringan. Untuk menggunakan anggota dwLocalScopeId atau dwRemoteScopeId , fungsi ntohl atau inet_ntoa di Windows Sockets atau fungsi serupa mungkin diperlukan.

Anggota LocalAddr dan RemoteAddr disimpan dalam struktur in6_addr . Fungsi RtlIpv6AddressToString atau RtlIpv6AddressToStringEx dapat digunakan untuk mengonversi alamat IPv6 di anggota LocalAddr atau RemoteAddr ke string tanpa memuat DLL Soket Windows.

Contoh

Contoh berikut mengambil tabel koneksi TCP untuk IPv6 dan mencetak status setiap koneksi yang direpresentasikan sebagai struktur 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;    
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Header tcpmib.h (termasuk Iphlpapi.h)

Lihat juga

GetTcp6Table

MIB_TCP6TABLE

MIB_TCPROW

MIB_TCPTABLE

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

in6_addr

inet_ntoa

ntohl

ntohs