主に HTTPS で始まる URL をフィルタリングするために、Windows 用のホストベースのファイアウォールを開発したいと考えています。Microsoft が、ファイアウォール/フィルター フック、NDIS、TDI、WSA、Winsock 2 (LSP) などの非推奨の古い技術の代替として WFP を提示していることを知っています。ただし、WFP は現在、ホスト名または URL によるフィルターをサポートしていません。また、WFP は C/C++ のみであり、.NET で使用できる C# ラッパーはありません。
@basil のWinDivertデモ アプリ webfilterを試してみました。これは、TCP ポート 80 (デフォルト HTTP) で IPv4 のアウトバウンド トラフィックのパケットを解析し、サーバー接続をリセット (TCP RST) し、クライアント (ブラウザー) に HTML 応答を送信し、続いて TCP FIN を送信します。コマンドライン引数としてテキストファイルで指定されたブラックリストに登録されたエントリのいずれかに URL が一致し、それ以外の場合はそれらを再挿入する場合...
handle = WinDivertOpen(
"outbound && " // Outbound traffic only
"ip && " // Only IPv4 supported
"tcp.DstPort == 80 && " // HTTP (port 80) only
"tcp.PayloadLength > 0", // TCP data packets only
WINDIVERT_LAYER_NETWORK, priority, 0
);
私の質問は: このコードを変更して、HTTPS (ポートをデフォルトの 443 に変更) と IPv6 をサポートすることはできますか? もしそうなら、マネージ C# コードから呼び出す P\Invoke ラッパー クラスを作成したいと考えています。
Extra : このソリューションは SSH トンネリングを使用してバイパスできますが、バイパスする別の方法はありますか?