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 .
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) |