MIB_IPINTERFACE_ROW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Family | ADDRESS_FAMILY | 2 | +0 | +0 | アドレスファミリーです。アドレスファミリーに指定できる値は Winsock2.h ヘッダーファイルに列挙されています。AF_ アドレスファミリー定数と PF_ プロトコルファミリー定数の値は同一である(たとえば AF_INET と PF_INET)ため、どちらの定数も使用できます。 Windows Vista 以降および Windows SDK ではヘッダーファイルの構成が変更されており、このメンバーに指定できる値は Ws2def.h ヘッダーファイルで定義されています。Ws2def.h ヘッダーファイルは Winsock2.h ヘッダーファイルに自動的にインクルードされるため、直接使用しないでください。 現在サポートされている値は AF_INET または AF_INET6 で、これらは IPv4 および IPv6 のインターネットアドレスファミリー形式です。
| ||||||||
| InterfaceLuid | NET_LUID_LH | 8 | +8 | +8 | ネットワークインターフェイスのローカル一意識別子 (LUID) です。 | ||||||||
| InterfaceIndex | DWORD | 4 | +16 | +16 | ネットワークインターフェイスのローカルインデックス値です。このインデックス値は、ネットワークアダプターを無効にしてから有効にした場合やその他の状況で変化することがあるため、永続的なものと見なさないでください。 | ||||||||
| MaxReassemblySize | DWORD | 4 | +20 | +20 | 断片化された IP パケットの最大再構成サイズ (バイト単位) です。このメンバーは現在 0 に設定されており、将来の使用のために予約されています。 | ||||||||
| InterfaceIdentifier | ULONGLONG | 8 | +24 | +24 | 将来の使用のために予約済みです。このメンバーは現在 0 に設定されています。 | ||||||||
| MinRouterAdvertisementInterval | DWORD | 4 | +32 | +32 | この IP インターフェイスにおけるルーター アドバタイズメントの最小間隔 (ミリ秒単位) です。IPv6 の場合、このメンバーの既定値は 200 です。このメンバーは、AdvertisingEnabled メンバーが TRUE に設定されている場合にのみ適用されます。 | ||||||||
| MaxRouterAdvertisementInterval | DWORD | 4 | +36 | +36 | この IP インターフェイスにおけるルーター アドバタイズメントの最大間隔 (ミリ秒単位) です。IPv6 の場合、このメンバーの既定値は 600 です。このメンバーは、AdvertisingEnabled メンバーが TRUE に設定されている場合にのみ適用されます。 | ||||||||
| AdvertisingEnabled | BOOLEAN | 1 | +40 | +40 | この IP インターフェイスでルーター アドバタイズが有効かどうかを示す値です。IPv6 の既定では、インターフェイスがルーターとして動作するよう構成されている場合にのみルーター アドバタイズメントが有効になります。IPv4 の既定では、ルーター アドバタイズメントは無効です。 | ||||||||
| ForwardingEnabled | BOOLEAN | 1 | +41 | +41 | この IP インターフェイスで IP 転送が有効かどうかを示す値です。 | ||||||||
| WeakHostSend | BOOLEAN | 1 | +42 | +42 | この IP インターフェイスで弱いホストの送信モードが有効かどうかを示す値です。 | ||||||||
| WeakHostReceive | BOOLEAN | 1 | +43 | +43 | この IP インターフェイスで弱いホストの受信モードが有効かどうかを示す値です。 | ||||||||
| UseAutomaticMetric | BOOLEAN | 1 | +44 | +44 | この IP インターフェイスが自動メトリックを使用するかどうかを示す値です。 | ||||||||
| UseNeighborUnreachabilityDetection | BOOLEAN | 1 | +45 | +45 | この IP インターフェイスで近隣到達不能検出が有効かどうかを示す値です。 | ||||||||
| ManagedAddressConfigurationSupported | BOOLEAN | 1 | +46 | +46 | この IP インターフェイスが DHCP による管理されたアドレス構成をサポートするかどうかを示す値です。 | ||||||||
| OtherStatefulConfigurationSupported | BOOLEAN | 1 | +47 | +47 | この IP インターフェイスがその他のステートフルな構成 (たとえばルート構成) をサポートするかどうかを示す値です。 | ||||||||
| AdvertiseDefaultRoute | BOOLEAN | 1 | +48 | +48 | この IP インターフェイスが既定のルートをアドバタイズするかどうかを示す値です。このメンバーは、AdvertisingEnabled メンバーが TRUE に設定されている場合にのみ適用されます。 | ||||||||
| RouterDiscoveryBehavior | NL_ROUTER_DISCOVERY_BEHAVIOR | 4 | +52 | +52 | ルーター探索の動作です。このメンバーには、Nldef.h ヘッダーファイルで定義されている NL_ROUTER_DISCOVERY_BEHAVIOR 列挙型の値のいずれかを指定できます。このメンバーは RFC 2461 で説明されています。詳細については、http://www.ietf.org/rfc/rfc2461.txt を参照してください。 | ||||||||
| DadTransmits | DWORD | 4 | +56 | +56 | 暫定的な IP ユニキャストアドレスに対して重複アドレス検出を実行する際に、連続して送信されるメッセージの数です。値が 0 の場合、暫定的な IP アドレスに対して重複アドレス検出は実行されません。値が 1 の場合、再送信を伴わない 1 回だけの送信を意味します。IPv4 の場合、このメンバーの既定値は 3 です。IPv6 の場合、このメンバーの既定値は 1 です。IPv6 では、これらのメッセージは近隣要請要求として送信されます。このメンバーは RFC 2462 では DupAddrDetectTransmits として定義されています。詳細については、http://www.ietf.org/rfc/rfc2462.txt を参照してください。 | ||||||||
| BaseReachableTime | DWORD | 4 | +60 | +60 | ランダムな到達可能時間の基準値 (ミリ秒単位) です。このメンバーは RFC 2461 で説明されています。詳細については、http://www.ietf.org/rfc/rfc2461.txt を参照してください。 | ||||||||
| RetransmitTime | DWORD | 4 | +64 | +64 | 近隣要請のタイムアウト (ミリ秒単位) です。このメンバーは RFC 2461 で説明されています。詳細については、http://www.ietf.org/rfc/rfc2461.txt を参照してください。 | ||||||||
| PathMtuDiscoveryTimeout | DWORD | 4 | +68 | +68 | パス MTU 探索のタイムアウト (ミリ秒単位) です。 | ||||||||
| LinkLocalAddressBehavior | NL_LINK_LOCAL_ADDRESS_BEHAVIOR | 4 | +72 | +72 | リンクローカルアドレスの動作です。このメンバーには、Nldef.h ヘッダーファイルで定義されている NL_LINK_LOCAL_ADDRESS_BEHAVIOR 列挙型の値のいずれかを指定できます。 | ||||||||
| LinkLocalAddressTimeout | DWORD | 4 | +76 | +76 | リンクローカル IP アドレスのタイムアウト (ミリ秒単位) です。 | ||||||||
| ZoneIndices | DWORD | 64 | +80 | +80 | スコープ ID のゾーン部分を指定する配列です。 | ||||||||
| SitePrefixLength | DWORD | 4 | +144 | +144 | IP インターフェイスアドレスのサイトプレフィックス長 (ビット単位) です。IP インターフェイスアドレスのサイトプレフィックス部分 (ネットワーク部分) の長さ (ビット単位) を表します。IPv4 アドレスの場合、32 を超える値はすべて無効な値です。IPv6 アドレスの場合、128 を超える値はすべて無効な値です。 無効な値を表すためには、一般に 255 が使用されます。 | ||||||||
| Metric | DWORD | 4 | +148 | +148 | インターフェイスのメトリックです。ルートの優先度の計算に実際に使用されるルートメトリックは、MIB_IPFORWARD_ROW2 構造体の Metric メンバーで指定されたルートメトリックのオフセットと、このメンバーで指定されたインターフェイスメトリックの合計であることに注意してください。 | ||||||||
| NlMtu | DWORD | 4 | +152 | +152 | ネットワーク層の MTU サイズ (バイト単位) です。 | ||||||||
| Connected | BOOLEAN | 1 | +156 | +156 | インターフェイスがネットワークアクセスポイントに接続されているかどうかを示す値です。 | ||||||||
| SupportsWakeUpPatterns | BOOLEAN | 1 | +157 | +157 | ネットワークインターフェイスが Wake on LAN をサポートするかどうかを指定する値です。 | ||||||||
| SupportsNeighborDiscovery | BOOLEAN | 1 | +158 | +158 | IP インターフェイスが近隣探索をサポートするかどうかを指定する値です。 | ||||||||
| SupportsRouterDiscovery | BOOLEAN | 1 | +159 | +159 | IP インターフェイスがルーター探索をサポートするかどうかを指定する値です。 | ||||||||
| ReachableTime | DWORD | 4 | +160 | +160 | 到達可能時間のタイムアウト (ミリ秒単位) です。 | ||||||||
| TransmitOffload | NL_INTERFACE_OFFLOAD_ROD | 1 | +164 | +164 | IP インターフェイスの送信オフロード機能を示すフラグのセットです。NL_INTERFACE_OFFLOAD_ROD 構造体は Nldef.h ヘッダーファイルで定義されています。 | ||||||||
| ReceiveOffload | NL_INTERFACE_OFFLOAD_ROD | 1 | +165 | +165 | IP インターフェイスの受信オフロード機能を示すフラグのセットです。NL_INTERFACE_OFFLOAD_ROD 構造体は Nldef.h ヘッダーファイルで定義されています。 | ||||||||
| DisableDefaultRoutes | BOOLEAN | 1 | +166 | +166 | インターフェイスで既定のルートを使用することを無効にするかどうかを示す値です。このメンバーは、VPN クライアントがスプリットトンネリングを制限するために使用できます。 |
公式ドキュメント
MIB_IPINTERFACE_ROW 構造体は、ネットワークインターフェイス上の特定の IP アドレスファミリーに関するインターフェイス管理情報を格納します。
解説(Remarks)
MIB_IPINTERFACE_ROW 構造体は Windows Vista 以降で定義されています。
Family、InterfaceLuid、InterfaceIndex の各メンバーによって、MIB_IPINTERFACE_ROW エントリが一意に識別されます。
ユニキャストパケットがホストに到着すると、IP はそのパケットがローカル宛て (宛先がホストのインターフェイスに割り当てられたアドレスと一致する) かどうかを判断する必要があります。弱いホストモデルに従う IP 実装は、パケットを受信したインターフェイスに関係なく、ローカル宛てのパケットをすべて受け入れます。強いホストモデルに従う IP 実装は、パケット内の宛先アドレスがそのパケットを受信したインターフェイスに割り当てられたアドレスと一致する場合にのみ、ローカル宛てのパケットを受け入れます。弱いホストモデルはネットワーク接続性の面で優れていますが、その一方でホストがマルチホームを利用したネットワーク攻撃を受けやすくなります。
Windows Server 2003 および Windows XP における現在の IPv4 実装は、弱いホストモデルを使用します。この場合、すべてのユニキャストパケットは、ルートのメトリックが最も低いインターフェイスから送信されます。
Windows Vista 以降の TCP/IP スタックは IPv4 と IPv6 の両方で強いホストモデルをサポートしており、既定では強いホストモードを使用するよう構成されています (WeakHostReceive メンバーと WeakHostSend メンバーが FALSE に設定されます)。強いホストモードでは、ソケットを特定のインターフェイスの送信元アドレスにバインドすることで、ルートのメトリックが最も低くないインターフェイスからユニキャストパケットを送信できます。
Windows Vista 以降の TCP/IP スタックは、弱いホストモデルを使用するように構成することもできます。
メトリックとは、特定のネットワークインターフェイスの IP ルートに割り当てられる値で、そのルートを使用する際のコストを表します。たとえば、メトリックはリンク速度、ホップ数、または遅延時間の観点で評価できます。自動メトリックは Windows XP 以降の機能で、リンク速度に基づいてローカルルートのメトリックを自動的に構成します。自動メトリック機能は Windows XP 以降では既定で有効になっています (UseAutomaticMetric が TRUE に設定されます)。特定のメトリックを IP ルートに割り当てるために、手動で構成することもできます。
自動メトリック機能は、ルーティングテーブルに同じ宛先に対する複数のルートが含まれている場合に役立ちます。たとえば、10 メガビットのネットワークインターフェイスと 100 メガビットのネットワークインターフェイスを備えたコンピューターで、両方のネットワークインターフェイスに既定のゲートウェイが構成されているとします。UseAutomaticMetric が TRUE の場合、この機能によって、たとえばインターネット宛てのトラフィックをすべて、利用可能な最速のネットワークインターフェイスを使用するように強制できます。
Metric メンバーで指定されるインターフェイスメトリックは、インターフェイスに対するメトリックのみを表します。完全なルーティングメトリックは、このインターフェイスメトリックに、このインターフェイス上で指定されたルートエントリの MIB_IPFORWARD_ROW2 構造体の Metric メンバーで指定されたルートメトリックのオフセットを加えたものになります。
セキュリティ要件が異なる複数のネットワークへ特権なしで同時にアクセスできると、セキュリティホールが生じ、特権のないアプリケーションが 2 つのネットワーク間で意図せずデータを中継してしまう可能性があります。典型的な例は、仮想プライベートネットワーク (VPN) とインターネットへの同時アクセスです。Windows Server 2003 および Windows XP は弱いホストモデルを使用しており、RAS は他のインターフェイス上のすべての既定のルートのルートメトリックを増加させることで、このような同時アクセスを防止します。そのため、すべてのトラフィックが VPN インターフェイス経由でルーティングされ、他のネットワーク接続が妨げられます。
Windows Vista 以降では、既定で強いホストモデルが使用されます。GetBestRoute2 または GetBestRoute を使用したルート検索で送信元 IP アドレスが指定されている場合、ルート検索はその送信元 IP アドレスのインターフェイスに限定されます。この場合、候補となるルートの一覧に VPN インターフェイスのルートが含まれないため、RAS によるルートメトリックの変更は効果を持たず、インターネットへのトラフィックが許可されます。MIB_IPINTERFACE_ROW 構造体の DisableDefaultRoutes メンバーを使用すると、インターフェイス上で既定のルートを使用することを無効にできます。このメンバーは、VPN クライアントがスプリットトンネリングを必要としない場合に、それを制限するためのセキュリティ対策として使用できます。VPN クライアントは、必要に応じて SetIpInterfaceEntry 関数を呼び出して DisableDefaultRoutes メンバーを TRUE に設定できます。また、GetIpInterfaceEntry 関数を呼び出すことで、DisableDefaultRoutes メンバーの現在の状態を照会できます。
Netioapi.h ヘッダーファイルは Iphlpapi.h ヘッダーファイルに自動的にインクルードされることに注意してください。Netioapi.h ヘッダーファイルを直接使用しないでください。
例
MIB_IPINTERFACE_TABLE 構造体を取得し、そのテーブル内の MIB_IPINTERFACE_ROW 構造体エントリのいくつかのメンバーを出力する例については、GetIpInterfaceTable 関数を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// NET_LUID_LH (x64 8 / x86 8 バイト)
typedef struct NET_LUID_LH {
ULONGLONG Value;
_Info_e__Struct Info;
} NET_LUID_LH;
// NL_INTERFACE_OFFLOAD_ROD (x64 1 / x86 1 バイト)
typedef struct NL_INTERFACE_OFFLOAD_ROD {
BYTE _bitfield;
} NL_INTERFACE_OFFLOAD_ROD;
// MIB_IPINTERFACE_ROW (x64 168 / x86 168 バイト)
typedef struct MIB_IPINTERFACE_ROW {
ADDRESS_FAMILY Family;
NET_LUID_LH InterfaceLuid;
DWORD InterfaceIndex;
DWORD MaxReassemblySize;
ULONGLONG InterfaceIdentifier;
DWORD MinRouterAdvertisementInterval;
DWORD MaxRouterAdvertisementInterval;
BOOLEAN AdvertisingEnabled;
BOOLEAN ForwardingEnabled;
BOOLEAN WeakHostSend;
BOOLEAN WeakHostReceive;
BOOLEAN UseAutomaticMetric;
BOOLEAN UseNeighborUnreachabilityDetection;
BOOLEAN ManagedAddressConfigurationSupported;
BOOLEAN OtherStatefulConfigurationSupported;
BOOLEAN AdvertiseDefaultRoute;
NL_ROUTER_DISCOVERY_BEHAVIOR RouterDiscoveryBehavior;
DWORD DadTransmits;
DWORD BaseReachableTime;
DWORD RetransmitTime;
DWORD PathMtuDiscoveryTimeout;
NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
DWORD LinkLocalAddressTimeout;
DWORD ZoneIndices[16];
DWORD SitePrefixLength;
DWORD Metric;
DWORD NlMtu;
BOOLEAN Connected;
BOOLEAN SupportsWakeUpPatterns;
BOOLEAN SupportsNeighborDiscovery;
BOOLEAN SupportsRouterDiscovery;
DWORD ReachableTime;
NL_INTERFACE_OFFLOAD_ROD TransmitOffload;
NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;
BOOLEAN DisableDefaultRoutes;
} MIB_IPINTERFACE_ROW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NET_LUID_LH
{
public ulong Value;
public _Info_e__Struct Info;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NL_INTERFACE_OFFLOAD_ROD
{
public byte _bitfield;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MIB_IPINTERFACE_ROW
{
public ushort Family;
public NET_LUID_LH InterfaceLuid;
public uint InterfaceIndex;
public uint MaxReassemblySize;
public ulong InterfaceIdentifier;
public uint MinRouterAdvertisementInterval;
public uint MaxRouterAdvertisementInterval;
[MarshalAs(UnmanagedType.U1)] public bool AdvertisingEnabled;
[MarshalAs(UnmanagedType.U1)] public bool ForwardingEnabled;
[MarshalAs(UnmanagedType.U1)] public bool WeakHostSend;
[MarshalAs(UnmanagedType.U1)] public bool WeakHostReceive;
[MarshalAs(UnmanagedType.U1)] public bool UseAutomaticMetric;
[MarshalAs(UnmanagedType.U1)] public bool UseNeighborUnreachabilityDetection;
[MarshalAs(UnmanagedType.U1)] public bool ManagedAddressConfigurationSupported;
[MarshalAs(UnmanagedType.U1)] public bool OtherStatefulConfigurationSupported;
[MarshalAs(UnmanagedType.U1)] public bool AdvertiseDefaultRoute;
public int RouterDiscoveryBehavior;
public uint DadTransmits;
public uint BaseReachableTime;
public uint RetransmitTime;
public uint PathMtuDiscoveryTimeout;
public int LinkLocalAddressBehavior;
public uint LinkLocalAddressTimeout;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public uint[] ZoneIndices;
public uint SitePrefixLength;
public uint Metric;
public uint NlMtu;
[MarshalAs(UnmanagedType.U1)] public bool Connected;
[MarshalAs(UnmanagedType.U1)] public bool SupportsWakeUpPatterns;
[MarshalAs(UnmanagedType.U1)] public bool SupportsNeighborDiscovery;
[MarshalAs(UnmanagedType.U1)] public bool SupportsRouterDiscovery;
public uint ReachableTime;
public NL_INTERFACE_OFFLOAD_ROD TransmitOffload;
public NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;
[MarshalAs(UnmanagedType.U1)] public bool DisableDefaultRoutes;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NET_LUID_LH
Public Value As ULong
Public Info As _Info_e__Struct
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NL_INTERFACE_OFFLOAD_ROD
Public _bitfield As Byte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MIB_IPINTERFACE_ROW
Public Family As UShort
Public InterfaceLuid As NET_LUID_LH
Public InterfaceIndex As UInteger
Public MaxReassemblySize As UInteger
Public InterfaceIdentifier As ULong
Public MinRouterAdvertisementInterval As UInteger
Public MaxRouterAdvertisementInterval As UInteger
<MarshalAs(UnmanagedType.U1)> Public AdvertisingEnabled As Boolean
<MarshalAs(UnmanagedType.U1)> Public ForwardingEnabled As Boolean
<MarshalAs(UnmanagedType.U1)> Public WeakHostSend As Boolean
<MarshalAs(UnmanagedType.U1)> Public WeakHostReceive As Boolean
<MarshalAs(UnmanagedType.U1)> Public UseAutomaticMetric As Boolean
<MarshalAs(UnmanagedType.U1)> Public UseNeighborUnreachabilityDetection As Boolean
<MarshalAs(UnmanagedType.U1)> Public ManagedAddressConfigurationSupported As Boolean
<MarshalAs(UnmanagedType.U1)> Public OtherStatefulConfigurationSupported As Boolean
<MarshalAs(UnmanagedType.U1)> Public AdvertiseDefaultRoute As Boolean
Public RouterDiscoveryBehavior As Integer
Public DadTransmits As UInteger
Public BaseReachableTime As UInteger
Public RetransmitTime As UInteger
Public PathMtuDiscoveryTimeout As UInteger
Public LinkLocalAddressBehavior As Integer
Public LinkLocalAddressTimeout As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public ZoneIndices() As UInteger
Public SitePrefixLength As UInteger
Public Metric As UInteger
Public NlMtu As UInteger
<MarshalAs(UnmanagedType.U1)> Public Connected As Boolean
<MarshalAs(UnmanagedType.U1)> Public SupportsWakeUpPatterns As Boolean
<MarshalAs(UnmanagedType.U1)> Public SupportsNeighborDiscovery As Boolean
<MarshalAs(UnmanagedType.U1)> Public SupportsRouterDiscovery As Boolean
Public ReachableTime As UInteger
Public TransmitOffload As NL_INTERFACE_OFFLOAD_ROD
Public ReceiveOffload As NL_INTERFACE_OFFLOAD_ROD
<MarshalAs(UnmanagedType.U1)> Public DisableDefaultRoutes As Boolean
End Structureimport ctypes
from ctypes import wintypes
class NET_LUID_LH(ctypes.Structure):
_fields_ = [
("Value", ctypes.c_ulonglong),
("Info", _Info_e__Struct),
]
class NL_INTERFACE_OFFLOAD_ROD(ctypes.Structure):
_fields_ = [
("_bitfield", ctypes.c_ubyte),
]
class MIB_IPINTERFACE_ROW(ctypes.Structure):
_fields_ = [
("Family", ctypes.c_ushort),
("InterfaceLuid", NET_LUID_LH),
("InterfaceIndex", wintypes.DWORD),
("MaxReassemblySize", wintypes.DWORD),
("InterfaceIdentifier", ctypes.c_ulonglong),
("MinRouterAdvertisementInterval", wintypes.DWORD),
("MaxRouterAdvertisementInterval", wintypes.DWORD),
("AdvertisingEnabled", ctypes.c_byte),
("ForwardingEnabled", ctypes.c_byte),
("WeakHostSend", ctypes.c_byte),
("WeakHostReceive", ctypes.c_byte),
("UseAutomaticMetric", ctypes.c_byte),
("UseNeighborUnreachabilityDetection", ctypes.c_byte),
("ManagedAddressConfigurationSupported", ctypes.c_byte),
("OtherStatefulConfigurationSupported", ctypes.c_byte),
("AdvertiseDefaultRoute", ctypes.c_byte),
("RouterDiscoveryBehavior", ctypes.c_int),
("DadTransmits", wintypes.DWORD),
("BaseReachableTime", wintypes.DWORD),
("RetransmitTime", wintypes.DWORD),
("PathMtuDiscoveryTimeout", wintypes.DWORD),
("LinkLocalAddressBehavior", ctypes.c_int),
("LinkLocalAddressTimeout", wintypes.DWORD),
("ZoneIndices", wintypes.DWORD * 16),
("SitePrefixLength", wintypes.DWORD),
("Metric", wintypes.DWORD),
("NlMtu", wintypes.DWORD),
("Connected", ctypes.c_byte),
("SupportsWakeUpPatterns", ctypes.c_byte),
("SupportsNeighborDiscovery", ctypes.c_byte),
("SupportsRouterDiscovery", ctypes.c_byte),
("ReachableTime", wintypes.DWORD),
("TransmitOffload", NL_INTERFACE_OFFLOAD_ROD),
("ReceiveOffload", NL_INTERFACE_OFFLOAD_ROD),
("DisableDefaultRoutes", ctypes.c_byte),
]#[repr(C)]
pub struct NET_LUID_LH {
pub Value: u64,
pub Info: _Info_e__Struct,
}
#[repr(C)]
pub struct NL_INTERFACE_OFFLOAD_ROD {
pub _bitfield: u8,
}
#[repr(C)]
pub struct MIB_IPINTERFACE_ROW {
pub Family: u16,
pub InterfaceLuid: NET_LUID_LH,
pub InterfaceIndex: u32,
pub MaxReassemblySize: u32,
pub InterfaceIdentifier: u64,
pub MinRouterAdvertisementInterval: u32,
pub MaxRouterAdvertisementInterval: u32,
pub AdvertisingEnabled: u8,
pub ForwardingEnabled: u8,
pub WeakHostSend: u8,
pub WeakHostReceive: u8,
pub UseAutomaticMetric: u8,
pub UseNeighborUnreachabilityDetection: u8,
pub ManagedAddressConfigurationSupported: u8,
pub OtherStatefulConfigurationSupported: u8,
pub AdvertiseDefaultRoute: u8,
pub RouterDiscoveryBehavior: i32,
pub DadTransmits: u32,
pub BaseReachableTime: u32,
pub RetransmitTime: u32,
pub PathMtuDiscoveryTimeout: u32,
pub LinkLocalAddressBehavior: i32,
pub LinkLocalAddressTimeout: u32,
pub ZoneIndices: [u32; 16],
pub SitePrefixLength: u32,
pub Metric: u32,
pub NlMtu: u32,
pub Connected: u8,
pub SupportsWakeUpPatterns: u8,
pub SupportsNeighborDiscovery: u8,
pub SupportsRouterDiscovery: u8,
pub ReachableTime: u32,
pub TransmitOffload: NL_INTERFACE_OFFLOAD_ROD,
pub ReceiveOffload: NL_INTERFACE_OFFLOAD_ROD,
pub DisableDefaultRoutes: u8,
}import "golang.org/x/sys/windows"
type NET_LUID_LH struct {
Value uint64
Info _Info_e__Struct
}
type NL_INTERFACE_OFFLOAD_ROD struct {
_bitfield byte
}
type MIB_IPINTERFACE_ROW struct {
Family uint16
InterfaceLuid NET_LUID_LH
InterfaceIndex uint32
MaxReassemblySize uint32
InterfaceIdentifier uint64
MinRouterAdvertisementInterval uint32
MaxRouterAdvertisementInterval uint32
AdvertisingEnabled byte
ForwardingEnabled byte
WeakHostSend byte
WeakHostReceive byte
UseAutomaticMetric byte
UseNeighborUnreachabilityDetection byte
ManagedAddressConfigurationSupported byte
OtherStatefulConfigurationSupported byte
AdvertiseDefaultRoute byte
RouterDiscoveryBehavior int32
DadTransmits uint32
BaseReachableTime uint32
RetransmitTime uint32
PathMtuDiscoveryTimeout uint32
LinkLocalAddressBehavior int32
LinkLocalAddressTimeout uint32
ZoneIndices [16]uint32
SitePrefixLength uint32
Metric uint32
NlMtu uint32
Connected byte
SupportsWakeUpPatterns byte
SupportsNeighborDiscovery byte
SupportsRouterDiscovery byte
ReachableTime uint32
TransmitOffload NL_INTERFACE_OFFLOAD_ROD
ReceiveOffload NL_INTERFACE_OFFLOAD_ROD
DisableDefaultRoutes byte
}type
NET_LUID_LH = record
Value: UInt64;
Info: _Info_e__Struct;
end;
NL_INTERFACE_OFFLOAD_ROD = record
_bitfield: Byte;
end;
MIB_IPINTERFACE_ROW = record
Family: Word;
InterfaceLuid: NET_LUID_LH;
InterfaceIndex: DWORD;
MaxReassemblySize: DWORD;
InterfaceIdentifier: UInt64;
MinRouterAdvertisementInterval: DWORD;
MaxRouterAdvertisementInterval: DWORD;
AdvertisingEnabled: ByteBool;
ForwardingEnabled: ByteBool;
WeakHostSend: ByteBool;
WeakHostReceive: ByteBool;
UseAutomaticMetric: ByteBool;
UseNeighborUnreachabilityDetection: ByteBool;
ManagedAddressConfigurationSupported: ByteBool;
OtherStatefulConfigurationSupported: ByteBool;
AdvertiseDefaultRoute: ByteBool;
RouterDiscoveryBehavior: Integer;
DadTransmits: DWORD;
BaseReachableTime: DWORD;
RetransmitTime: DWORD;
PathMtuDiscoveryTimeout: DWORD;
LinkLocalAddressBehavior: Integer;
LinkLocalAddressTimeout: DWORD;
ZoneIndices: array[0..15] of DWORD;
SitePrefixLength: DWORD;
Metric: DWORD;
NlMtu: DWORD;
Connected: ByteBool;
SupportsWakeUpPatterns: ByteBool;
SupportsNeighborDiscovery: ByteBool;
SupportsRouterDiscovery: ByteBool;
ReachableTime: DWORD;
TransmitOffload: NL_INTERFACE_OFFLOAD_ROD;
ReceiveOffload: NL_INTERFACE_OFFLOAD_ROD;
DisableDefaultRoutes: ByteBool;
end;const NET_LUID_LH = extern struct {
Value: u64,
Info: _Info_e__Struct,
};
const NL_INTERFACE_OFFLOAD_ROD = extern struct {
_bitfield: u8,
};
const MIB_IPINTERFACE_ROW = extern struct {
Family: u16,
InterfaceLuid: NET_LUID_LH,
InterfaceIndex: u32,
MaxReassemblySize: u32,
InterfaceIdentifier: u64,
MinRouterAdvertisementInterval: u32,
MaxRouterAdvertisementInterval: u32,
AdvertisingEnabled: u8,
ForwardingEnabled: u8,
WeakHostSend: u8,
WeakHostReceive: u8,
UseAutomaticMetric: u8,
UseNeighborUnreachabilityDetection: u8,
ManagedAddressConfigurationSupported: u8,
OtherStatefulConfigurationSupported: u8,
AdvertiseDefaultRoute: u8,
RouterDiscoveryBehavior: i32,
DadTransmits: u32,
BaseReachableTime: u32,
RetransmitTime: u32,
PathMtuDiscoveryTimeout: u32,
LinkLocalAddressBehavior: i32,
LinkLocalAddressTimeout: u32,
ZoneIndices: [16]u32,
SitePrefixLength: u32,
Metric: u32,
NlMtu: u32,
Connected: u8,
SupportsWakeUpPatterns: u8,
SupportsNeighborDiscovery: u8,
SupportsRouterDiscovery: u8,
ReachableTime: u32,
TransmitOffload: NL_INTERFACE_OFFLOAD_ROD,
ReceiveOffload: NL_INTERFACE_OFFLOAD_ROD,
DisableDefaultRoutes: u8,
};type
NET_LUID_LH {.bycopy.} = object
Value: uint64
Info: _Info_e__Struct
NL_INTERFACE_OFFLOAD_ROD {.bycopy.} = object
_bitfield: uint8
MIB_IPINTERFACE_ROW {.bycopy.} = object
Family: uint16
InterfaceLuid: NET_LUID_LH
InterfaceIndex: uint32
MaxReassemblySize: uint32
InterfaceIdentifier: uint64
MinRouterAdvertisementInterval: uint32
MaxRouterAdvertisementInterval: uint32
AdvertisingEnabled: uint8
ForwardingEnabled: uint8
WeakHostSend: uint8
WeakHostReceive: uint8
UseAutomaticMetric: uint8
UseNeighborUnreachabilityDetection: uint8
ManagedAddressConfigurationSupported: uint8
OtherStatefulConfigurationSupported: uint8
AdvertiseDefaultRoute: uint8
RouterDiscoveryBehavior: int32
DadTransmits: uint32
BaseReachableTime: uint32
RetransmitTime: uint32
PathMtuDiscoveryTimeout: uint32
LinkLocalAddressBehavior: int32
LinkLocalAddressTimeout: uint32
ZoneIndices: array[16, uint32]
SitePrefixLength: uint32
Metric: uint32
NlMtu: uint32
Connected: uint8
SupportsWakeUpPatterns: uint8
SupportsNeighborDiscovery: uint8
SupportsRouterDiscovery: uint8
ReachableTime: uint32
TransmitOffload: NL_INTERFACE_OFFLOAD_ROD
ReceiveOffload: NL_INTERFACE_OFFLOAD_ROD
DisableDefaultRoutes: uint8struct NET_LUID_LH
{
ulong Value;
_Info_e__Struct Info;
}
struct NL_INTERFACE_OFFLOAD_ROD
{
ubyte _bitfield;
}
struct MIB_IPINTERFACE_ROW
{
ushort Family;
NET_LUID_LH InterfaceLuid;
uint InterfaceIndex;
uint MaxReassemblySize;
ulong InterfaceIdentifier;
uint MinRouterAdvertisementInterval;
uint MaxRouterAdvertisementInterval;
ubyte AdvertisingEnabled;
ubyte ForwardingEnabled;
ubyte WeakHostSend;
ubyte WeakHostReceive;
ubyte UseAutomaticMetric;
ubyte UseNeighborUnreachabilityDetection;
ubyte ManagedAddressConfigurationSupported;
ubyte OtherStatefulConfigurationSupported;
ubyte AdvertiseDefaultRoute;
int RouterDiscoveryBehavior;
uint DadTransmits;
uint BaseReachableTime;
uint RetransmitTime;
uint PathMtuDiscoveryTimeout;
int LinkLocalAddressBehavior;
uint LinkLocalAddressTimeout;
uint[16] ZoneIndices;
uint SitePrefixLength;
uint Metric;
uint NlMtu;
ubyte Connected;
ubyte SupportsWakeUpPatterns;
ubyte SupportsNeighborDiscovery;
ubyte SupportsRouterDiscovery;
uint ReachableTime;
NL_INTERFACE_OFFLOAD_ROD TransmitOffload;
NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;
ubyte DisableDefaultRoutes;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIB_IPINTERFACE_ROW サイズ: 168 バイト(x64)
dim st, 42 ; 4byte整数×42(構造体サイズ 168 / 4 切り上げ)
; Family : ADDRESS_FAMILY (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; InterfaceLuid : NET_LUID_LH (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; InterfaceIndex : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; MaxReassemblySize : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; InterfaceIdentifier : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; MinRouterAdvertisementInterval : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; MaxRouterAdvertisementInterval : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; AdvertisingEnabled : BOOLEAN (+40, 1byte) poke st,40,値 / 値 = peek(st,40)
; ForwardingEnabled : BOOLEAN (+41, 1byte) poke st,41,値 / 値 = peek(st,41)
; WeakHostSend : BOOLEAN (+42, 1byte) poke st,42,値 / 値 = peek(st,42)
; WeakHostReceive : BOOLEAN (+43, 1byte) poke st,43,値 / 値 = peek(st,43)
; UseAutomaticMetric : BOOLEAN (+44, 1byte) poke st,44,値 / 値 = peek(st,44)
; UseNeighborUnreachabilityDetection : BOOLEAN (+45, 1byte) poke st,45,値 / 値 = peek(st,45)
; ManagedAddressConfigurationSupported : BOOLEAN (+46, 1byte) poke st,46,値 / 値 = peek(st,46)
; OtherStatefulConfigurationSupported : BOOLEAN (+47, 1byte) poke st,47,値 / 値 = peek(st,47)
; AdvertiseDefaultRoute : BOOLEAN (+48, 1byte) poke st,48,値 / 値 = peek(st,48)
; RouterDiscoveryBehavior : NL_ROUTER_DISCOVERY_BEHAVIOR (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; DadTransmits : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; BaseReachableTime : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; RetransmitTime : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; PathMtuDiscoveryTimeout : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; LinkLocalAddressBehavior : NL_LINK_LOCAL_ADDRESS_BEHAVIOR (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; LinkLocalAddressTimeout : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; ZoneIndices : DWORD (+80, 64byte) varptr(st)+80 を基点に操作(64byte:入れ子/配列)
; SitePrefixLength : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; Metric : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; NlMtu : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; Connected : BOOLEAN (+156, 1byte) poke st,156,値 / 値 = peek(st,156)
; SupportsWakeUpPatterns : BOOLEAN (+157, 1byte) poke st,157,値 / 値 = peek(st,157)
; SupportsNeighborDiscovery : BOOLEAN (+158, 1byte) poke st,158,値 / 値 = peek(st,158)
; SupportsRouterDiscovery : BOOLEAN (+159, 1byte) poke st,159,値 / 値 = peek(st,159)
; ReachableTime : DWORD (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; TransmitOffload : NL_INTERFACE_OFFLOAD_ROD (+164, 1byte) varptr(st)+164 を基点に操作(1byte:入れ子/配列)
; ReceiveOffload : NL_INTERFACE_OFFLOAD_ROD (+165, 1byte) varptr(st)+165 を基点に操作(1byte:入れ子/配列)
; DisableDefaultRoutes : BOOLEAN (+166, 1byte) poke st,166,値 / 値 = peek(st,166)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NL_INTERFACE_OFFLOAD_ROD
#field byte _bitfield
#endstruct
#defstruct global MIB_IPINTERFACE_ROW
#field short Family
#field byte InterfaceLuid 8
#field int InterfaceIndex
#field int MaxReassemblySize
#field int64 InterfaceIdentifier
#field int MinRouterAdvertisementInterval
#field int MaxRouterAdvertisementInterval
#field bool1 AdvertisingEnabled
#field bool1 ForwardingEnabled
#field bool1 WeakHostSend
#field bool1 WeakHostReceive
#field bool1 UseAutomaticMetric
#field bool1 UseNeighborUnreachabilityDetection
#field bool1 ManagedAddressConfigurationSupported
#field bool1 OtherStatefulConfigurationSupported
#field bool1 AdvertiseDefaultRoute
#field int RouterDiscoveryBehavior
#field int DadTransmits
#field int BaseReachableTime
#field int RetransmitTime
#field int PathMtuDiscoveryTimeout
#field int LinkLocalAddressBehavior
#field int LinkLocalAddressTimeout
#field int ZoneIndices 16
#field int SitePrefixLength
#field int Metric
#field int NlMtu
#field bool1 Connected
#field bool1 SupportsWakeUpPatterns
#field bool1 SupportsNeighborDiscovery
#field bool1 SupportsRouterDiscovery
#field int ReachableTime
#field NL_INTERFACE_OFFLOAD_ROD TransmitOffload
#field NL_INTERFACE_OFFLOAD_ROD ReceiveOffload
#field bool1 DisableDefaultRoutes
#endstruct
stdim st, MIB_IPINTERFACE_ROW ; NSTRUCT 変数を確保
st->Family = 100
mes "Family=" + st->Family
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。