1

Windows で Windows Filtering Platform コールアウトを使用して TCP 接続を追跡しています。ALE 確立レイヤーとエンドポイント クロージャー レイヤーのフィルターは、接続の開始と終了を検出するのに最適です。ただし、各方向のトラフィックのサイズと、できればパケット数も知る必要がありますが、閉鎖情報でそれを見つけることができませんでした。

ストリーム レイヤーを使用して各パケットを監視することは可能ですが、カーネル空間でセッション テーブルを維持し、各パケットのセッションを常に更新することは、多くのオーバーヘッドと複雑さを追加するため、魅力的ではありません。

WindowsでWFPを使用してTCPセッションのバイト数を効率的に取得する方法を知っている人はいますか? 代替案も歓迎します。

4

1 に答える 1

1

私もこの問題を一度解決しようとしましたが、最終的には次のようになりました。IPv4のみ有効です!

FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 レイヤーでは、FwpsFlowAssociateContext0 関数を使用して独自のコンテキストを作成できます。その後、DITNO_FIREWALL_STREAM_CALLOUT_V4 および DITNO_FIREWALL_DATAGRAM_DATA_CALLOUT_V4 レイヤーで、バイト カウンターをインクリメントし、メタデータをコンテキスト構造に保存します。

flowDeleteFn が呼び出されると、フローが終了し、カウンターの準備が整ったことを意味します。コンテキストに使用されているメモリを解放する必要があります。

ところで、それに近づくためのカーネル内機能の運はありますか?

于 2016-11-04T00:24:33.027 に答える