struktur MIB_TCPROW_LH (tcpmib.h)

Struktur MIB_TCPROW berisi informasi yang mendesiskan koneksi IPv4 TCP.

Sintaks

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;

Anggota

dwState

Jenis: DWORD

Status koneksi TCP. Anggota ini dapat menjadi salah satu nilai yang ditentukan dalam file header Iprtrmib.h .

Pada Windows SDK yang dirilis untuk Windows Vista dan yang lebih baru, organisasi file header telah berubah. Anggota ini dapat menjadi salah satu nilai dari enumerasi MIB_TCP_STATE yang ditentukan dalam file header Tcpmib.h , bukan dalam file header Iprtrmib.h . Perhatikan bahwa file header Tcpmib.h secara otomatis disertakan dalam Iprtrmib.h, yang secara otomatis disertakan dalam file header Iphlpapi.h . File header Tcpmib.h dan Iprtrmib.h tidak boleh digunakan secara langsung.

Nilai Makna
MIB_TCP_STATE_CLOSED
1
Koneksi TCP berada dalam status CLOSED 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 yang 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 yang 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 Kontrol Transmisi (TCB), struktur data yang digunakan untuk mempertahankan informasi pada setiap entri TCP.

State

dwLocalAddr

Jenis: DWORD

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

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.

dwRemoteAddr

Jenis: DWORD

Alamat IPv4 untuk koneksi TCP pada komputer jarak jauh. Ketika anggota dwStateMIB_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 dwStateMIB_TCP_STATE_LISTEN, anggota 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

Fungsi GetTcpTable mengambil tabel koneksi TCP IPv4 di komputer lokal dan mengembalikan informasi ini dalam struktur MIB_TCPTABLE .

Array struktur MIB_TCPROW terkandung dalam struktur MIB_TCPTABLE . Struktur MIB_TCPROW juga digunakan oleh fungsi SetTcpEntry .

Anggota dwState 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 fiksi TERTUTUP. 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 dwLocalAddr dan dwRemoteAddr disimpan sebagai DWORD dalam format yang sama dengan struktur in_addr . Untuk menggunakan anggota dwLocalAddr atau dwRemoteAddr , fungsi ntohl atau inet_ntoa di Windows Sockets atau fungsi serupa mungkin diperlukan. Pada Windows Vista dan yang lebih baru, fungsi RtlIpv4AddressToString atau RtlIpv4AddressToStringEx dapat digunakan untuk mengonversi alamat IPv4 di anggota dwLocalAddr atau dwRemoteAddr ke string tanpa memuat DLL Soket Windows.

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.

Struktur MIB_TCPROW sedikit berubah pada Windows Vista dan yang lebih baru. Pada Windows Vista dan yang lebih baru, anggota dwState digantikan oleh gabungan yang berisi anggota berikut ini.

Anggota Deskripsi
DWORD dwState Status koneksi TCP.
Status 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 yang mungkin sama dengan yang ditentukan untuk anggota dwState .
 

Di Windows SDK, versi struktur untuk digunakan pada Windows Vista dan yang lebih baru didefinisikan sebagai MIB_TCPROW_LH. Di Windows SDK, versi struktur ini yang akan digunakan pada sistem sebelumnya termasuk Windows 2000 dan yang lebih baru didefinisikan sebagai MIB_TCPROW_W2K. Saat mengkompilasi aplikasi jika platform target adalah Windows Vista dan yang lebih baru (NTDDI_VERSION >= NTDDI_LONGHORN, , _WIN32_WINNT >= 0x0600atau WINVER >= 0x0600), struktur MIB_TCPROW_LH di-typedefed ke struktur MIB_TCPROW . Saat mengkompilasi aplikasi jika platform target bukan Windows Vista dan yang lebih baru, struktur MIB_TCPROW_W2K di-typedefed ke struktur MIB_TCPROW .

Pada Windows SDK yang dirilis untuk Windows Vista dan yang lebih baru, organisasi file header telah berubah. Struktur ini didefinisikan dalam file header Tcpmib.h , bukan dalam file header Iprtrmib.h . Perhatikan bahwa file header Tcpmib.h secara otomatis disertakan dalam Iprtrmib.h, yang secara otomatis disertakan dalam file header Iphlpapi.h . File header Tcpmib.h dan Iprtrmib.h tidak boleh digunakan secara langsung.

Contoh

Contoh berikut mengambil tabel koneksi TCP dan mencetak status setiap koneksi yang direpresentasikan sebagai struktur MIB_TCPROW .

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


Persyaratan

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

Lihat juga

GetTcp6Table

GetTcp6Table2

GetTcpTable

GetTcpTable2

MIB_TCP6ROW

MIB_TCP6ROW2

MIB_TCP6TABLE

MIB_TCP6TABLE2

MIB_TCPROW2

MIB_TCPTABLE

MIB_TCPTABLE2

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

SetTcpEntry

in_addr

inet_ntoa

ntohl

ntohs