Win32 API 日本語リファレンス
ホームNetworkManagement.IpHelper › MIB_TCP6ROW2

MIB_TCP6ROW2

構造体
サイズx64: 60 バイト / x86: 60 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
LocalAddrIN6_ADDR16+0+0ローカルコンピューター上の TCP 接続のローカル IPv6 アドレスです。値が 0 の場合、リスナーが任意のインターフェイスで接続を受け入れられることを示します。
dwLocalScopeIdDWORD4+16+16ローカルコンピューター上の TCP 接続のローカルスコープ ID です。
dwLocalPortDWORD4+20+20

ローカルコンピューター上の TCP 接続のローカルポート番号です (ネットワークバイトオーダー)。

IP ポート番号の最大サイズは 16 ビットであるため、下位 16 ビットのみを使用してください。上位 16 ビットには未初期化のデータが含まれている可能性があります。

RemoteAddrIN6_ADDR16+24+24リモートコンピューター上の TCP 接続の IPv6 アドレスです。State メンバーが MIB_TCP_STATE_LISTEN の場合、この値に意味はありません。
dwRemoteScopeIdDWORD4+40+40リモートコンピューター上の TCP 接続のリモートスコープ ID です。State メンバーが MIB_TCP_STATE_LISTEN の場合、この値に意味はありません。
dwRemotePortDWORD4+44+44

リモートコンピューター上の TCP 接続のリモートポート番号です (ネットワークバイトオーダー)。State メンバーが MIB_TCP_STATE_LISTEN の場合、この値に意味はありません。

IP ポート番号の最大サイズは 16 ビットであるため、下位 16 ビットのみを使用してください。上位 16 ビットには未初期化のデータが含まれている可能性があります。

StateMIB_TCP_STATE4+48+48

TCP 接続の状態です。このメンバーには、Tcpmib.h ヘッダーファイルで定義されている MIB_TCP_STATE 列挙型の値のいずれかを指定できます。

意味
MIB_TCP_STATE_CLOSED
1
TCP 接続は CLOSED 状態であり、接続状態がまったく存在しないことを表します。
MIB_TCP_STATE_LISTEN
2
TCP 接続は LISTEN 状態であり、任意のリモート TCP およびポートからの接続要求を待機しています。
MIB_TCP_STATE_SYN_SENT
3
TCP 接続は SYN-SENT 状態であり、接続要求 (SYN パケット) を送信した後、対応する接続要求を待機しています。
MIB_TCP_STATE_SYN_RCVD
4
TCP 接続は SYN-RECEIVED 状態であり、接続要求 (SYN パケット) の受信と送信の両方を行った後、接続要求の確認応答を待機しています。
MIB_TCP_STATE_ESTAB
5
TCP 接続は ESTABLISHED 状態であり、接続が確立していることを表します。受信したデータをユーザーに引き渡すことができます。これは TCP 接続のデータ転送フェーズにおける通常の状態です。
MIB_TCP_STATE_FIN_WAIT1
6
TCP 接続は FIN-WAIT-1 状態であり、リモート TCP からの接続終了要求、または以前に送信した接続終了要求に対する確認応答を待機しています。
MIB_TCP_STATE_FIN_WAIT2
7
TCP 接続は FIN-WAIT-1 状態であり、リモート TCP からの接続終了要求を待機しています。
MIB_TCP_STATE_CLOSE_WAIT
8
TCP 接続は CLOSE-WAIT 状態であり、ローカルユーザーからの接続終了要求を待機しています。
MIB_TCP_STATE_CLOSING
9
TCP 接続は CLOSING 状態であり、リモート TCP からの接続終了要求の確認応答を待機しています。
MIB_TCP_STATE_LAST_ACK
10
TCP 接続は LAST-ACK 状態であり、以前にリモート TCP へ送信した接続終了要求に対する確認応答 (リモート側の接続終了要求に対する確認応答を含む) を待機しています。
MIB_TCP_STATE_TIME_WAIT
11
TCP 接続は TIME-WAIT 状態であり、リモート TCP が接続終了要求の確認応答を確実に受信したと判断できるだけの時間の経過を待機しています。
MIB_TCP_STATE_DELETE_TCB
12
TCP 接続は delete TCB 状態であり、各 TCP エントリの情報を保持するために使用されるデータ構造である伝送制御ブロック (TCB) の削除を表します。
dwOwningPidDWORD4+52+52この TCP 接続に対してコンテキストバインドを発行したプロセスの PID です。
dwOffloadStateTCP_CONNECTION_OFFLOAD_STATE4+56+56この TCP 接続のオフロード状態です。このパラメーターには、Tcpmib.h ヘッダーで定義されている TCP_CONNECTION_OFFLOAD_STATE の列挙値のいずれかを指定できます。

公式ドキュメント

MIB_TCP6ROW2 構造体は、IPv6 TCP 接続を記述する情報を格納します。

解説(Remarks)

MIB_TCP6ROW2 構造体は、Windows Vista 以降で定義されています。

GetTcp6Table2 関数は、ローカルコンピューター上の IPv6 TCP 接続テーブルを取得し、その情報を MIB_TCP6TABLE2 構造体で返します。

MIB_TCP6ROW2 構造体の配列は MIB_TCP6TABLE2 構造体に格納されます。

State メンバーは、TCP 状態遷移図における TCP エントリの状態を示します。TCP 接続は、その存続期間中に一連の状態を遷移します。状態は次のとおりです: LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT、および仮想的な状態である CLOSED。CLOSED 状態が仮想的であるのは、伝送制御ブロックが存在せず、したがって接続も存在しない状態を表すためです。TCP プロトコルは RFC 793 で規定されています。詳細については、 http://www.ietf.org/rfc/rfc793.txt を参照してください。

dwLocalPort および dwRemotePort メンバーはネットワークバイトオーダーです。dwLocalPort または dwRemotePort メンバーを使用するには、Windows Sockets の ntohsinet_ntoa 関数、または同様の関数が必要になる場合があります。

dwLocalScopeId および dwRemoteScopeId メンバーはネットワークバイトオーダーです。dwLocalScopeId または dwRemoteScopeId メンバーを使用するには、Windows Sockets の ntohlinet_ntoa 関数、または同様の関数が必要になる場合があります。

LocalAddr および RemoteAddr メンバーは in6_addr 構造体に格納されます。RtlIpv6AddressToString または RtlIpv6AddressToStringEx 関数を使用すると、Windows Sockets DLL を読み込むことなく、LocalAddr または RemoteAddr メンバーの IPv6 アドレスを文字列に変換できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// IN6_ADDR  (x64 16 / x86 16 バイト)
typedef struct IN6_ADDR {
    _u_e__Union u;
} IN6_ADDR;

// MIB_TCP6ROW2  (x64 60 / x86 60 バイト)
typedef struct MIB_TCP6ROW2 {
    IN6_ADDR LocalAddr;
    DWORD dwLocalScopeId;
    DWORD dwLocalPort;
    IN6_ADDR RemoteAddr;
    DWORD dwRemoteScopeId;
    DWORD dwRemotePort;
    MIB_TCP_STATE State;
    DWORD dwOwningPid;
    TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
} MIB_TCP6ROW2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IN6_ADDR
{
    public _u_e__Union u;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_TCP6ROW2
{
    public IN6_ADDR LocalAddr;
    public uint dwLocalScopeId;
    public uint dwLocalPort;
    public IN6_ADDR RemoteAddr;
    public uint dwRemoteScopeId;
    public uint dwRemotePort;
    public int State;
    public uint dwOwningPid;
    public int dwOffloadState;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IN6_ADDR
    Public u As _u_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_TCP6ROW2
    Public LocalAddr As IN6_ADDR
    Public dwLocalScopeId As UInteger
    Public dwLocalPort As UInteger
    Public RemoteAddr As IN6_ADDR
    Public dwRemoteScopeId As UInteger
    Public dwRemotePort As UInteger
    Public State As Integer
    Public dwOwningPid As UInteger
    Public dwOffloadState As Integer
End Structure
import ctypes
from ctypes import wintypes

class IN6_ADDR(ctypes.Structure):
    _fields_ = [
        ("u", _u_e__Union),
    ]

class MIB_TCP6ROW2(ctypes.Structure):
    _fields_ = [
        ("LocalAddr", IN6_ADDR),
        ("dwLocalScopeId", wintypes.DWORD),
        ("dwLocalPort", wintypes.DWORD),
        ("RemoteAddr", IN6_ADDR),
        ("dwRemoteScopeId", wintypes.DWORD),
        ("dwRemotePort", wintypes.DWORD),
        ("State", ctypes.c_int),
        ("dwOwningPid", wintypes.DWORD),
        ("dwOffloadState", ctypes.c_int),
    ]
#[repr(C)]
pub struct IN6_ADDR {
    pub u: _u_e__Union,
}

#[repr(C)]
pub struct MIB_TCP6ROW2 {
    pub LocalAddr: IN6_ADDR,
    pub dwLocalScopeId: u32,
    pub dwLocalPort: u32,
    pub RemoteAddr: IN6_ADDR,
    pub dwRemoteScopeId: u32,
    pub dwRemotePort: u32,
    pub State: i32,
    pub dwOwningPid: u32,
    pub dwOffloadState: i32,
}
import "golang.org/x/sys/windows"

type IN6_ADDR struct {
	u _u_e__Union
}

type MIB_TCP6ROW2 struct {
	LocalAddr IN6_ADDR
	dwLocalScopeId uint32
	dwLocalPort uint32
	RemoteAddr IN6_ADDR
	dwRemoteScopeId uint32
	dwRemotePort uint32
	State int32
	dwOwningPid uint32
	dwOffloadState int32
}
type
  IN6_ADDR = record
    u: _u_e__Union;
  end;

  MIB_TCP6ROW2 = record
    LocalAddr: IN6_ADDR;
    dwLocalScopeId: DWORD;
    dwLocalPort: DWORD;
    RemoteAddr: IN6_ADDR;
    dwRemoteScopeId: DWORD;
    dwRemotePort: DWORD;
    State: Integer;
    dwOwningPid: DWORD;
    dwOffloadState: Integer;
  end;
const IN6_ADDR = extern struct {
    u: _u_e__Union,
};

const MIB_TCP6ROW2 = extern struct {
    LocalAddr: IN6_ADDR,
    dwLocalScopeId: u32,
    dwLocalPort: u32,
    RemoteAddr: IN6_ADDR,
    dwRemoteScopeId: u32,
    dwRemotePort: u32,
    State: i32,
    dwOwningPid: u32,
    dwOffloadState: i32,
};
type
  IN6_ADDR {.bycopy.} = object
    u: _u_e__Union

  MIB_TCP6ROW2 {.bycopy.} = object
    LocalAddr: IN6_ADDR
    dwLocalScopeId: uint32
    dwLocalPort: uint32
    RemoteAddr: IN6_ADDR
    dwRemoteScopeId: uint32
    dwRemotePort: uint32
    State: int32
    dwOwningPid: uint32
    dwOffloadState: int32
struct IN6_ADDR
{
    _u_e__Union u;
}

struct MIB_TCP6ROW2
{
    IN6_ADDR LocalAddr;
    uint dwLocalScopeId;
    uint dwLocalPort;
    IN6_ADDR RemoteAddr;
    uint dwRemoteScopeId;
    uint dwRemotePort;
    int State;
    uint dwOwningPid;
    int dwOffloadState;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_TCP6ROW2 サイズ: 60 バイト(x64)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; LocalAddr : IN6_ADDR (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; dwLocalScopeId : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwLocalPort : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; RemoteAddr : IN6_ADDR (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; dwRemoteScopeId : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwRemotePort : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; State : MIB_TCP_STATE (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwOwningPid : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwOffloadState : TCP_CONNECTION_OFFLOAD_STATE (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global IN6_ADDR
    #field byte u 16
#endstruct

#defstruct global MIB_TCP6ROW2
    #field IN6_ADDR LocalAddr
    #field int dwLocalScopeId
    #field int dwLocalPort
    #field IN6_ADDR RemoteAddr
    #field int dwRemoteScopeId
    #field int dwRemotePort
    #field int State
    #field int dwOwningPid
    #field int dwOffloadState
#endstruct

stdim st, MIB_TCP6ROW2        ; NSTRUCT 変数を確保
st->dwLocalScopeId = 100
mes "dwLocalScopeId=" + st->dwLocalScopeId