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.
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.
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 >= 0x0600
atau 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
MIB_TCP6ROW2