Bagikan melalui


Fungsi GetTcp6Table (iphlpapi.h)

Fungsi GetTcp6Table mengambil tabel koneksi TCP untuk IPv6.

Sintaks

IPHLPAPI_DLL_LINKAGE ULONG GetTcp6Table(
  [out]     PMIB_TCP6TABLE TcpTable,
  [in, out] PULONG         SizePointer,
  [in]      BOOL           Order
);

Parameter

[out] TcpTable

Penunjuk ke buffer yang menerima tabel koneksi TCP untuk IPv6 sebagai struktur MIB_TCP6TABLE .

[in, out] SizePointer

Pada input, menentukan ukuran dalam byte buffer yang ditunjukkan oleh parameter TcpTable .

Pada output, jika buffer tidak cukup besar untuk menahan tabel koneksi TCP yang dikembalikan, fungsi mengatur parameter ini sama dengan ukuran buffer yang diperlukan dalam byte.

[in] Order

Nilai Boolean yang menentukan apakah tabel koneksi TCP harus diurutkan. Jika parameter ini TRUE, tabel diurutkan dalam urutan naik, dimulai dengan alamat IP lokal terendah. Jika parameter ini FALSE, tabel akan muncul dalam urutan pengambilannya.

Nilai berikut dibandingkan (seperti yang tercantum) saat mengurutkan titik akhir TCP:

  1. Alamat IPv6 lokal
  2. ID cakupan lokal
  3. Port lokal
  4. Alamat IPv6 jarak jauh
  5. ID cakupan jarak jauh
  6. Port jarak jauh

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan NO_ERROR.

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.

Menampilkan kode Deskripsi
ERROR_INSUFFICIENT_BUFFER
Buffer yang ditunjukkan oleh parameter TcpTable tidak cukup besar. Ukuran yang diperlukan dikembalikan dalam variabel yang ditunjukkan oleh parameter SizePointer .
ERROR_INVALID_PARAMETER
Parameter SizePointeradalah NULL, atau GetTcp6Table tidak dapat menulis ke memori yang ditunjukkan oleh parameter SizePointer .
ERROR_NOT_SUPPORTED
Fungsi ini tidak didukung pada sistem operasi yang digunakan pada sistem lokal.
Lainnya
Gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan.

Keterangan

Fungsi GetTcp6Table ditentukan pada Windows Vista dan yang lebih baru.

Contoh

Contoh berikut mengambil tabel koneksi TCP untuk IPv6 dan mencetak status setiap koneksi.

#ifndef UNICODE
#define UNICODE
#endif

#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

   
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header iphlpapi.h
Pustaka Iphlpapi.lib
DLL Iphlpapi.dll

Lihat juga

GetExtendedTcpTable

GetOwnerModuleFromTcp6Entry

GetTcp6Table2

GetTcpStatisticsEx

GetTcpTable2

MIB_TCP6ROW

MIB_TCP6ROW_OWNER_MODULE

MIB_TCP6ROW_OWNER_PID

MIB_TCP6TABLE

MIB_TCP6TABLE_OWNER_MODULE

MIB_TCP6TABLE_OWNER_PID