プログラムを監視し、特定のポートで行う送信要求をリダイレクトする Windows 上の C++ の方法はありますか? シンプルな C++ http プロキシがあり、ポート 80 上のすべてのブラウザ リクエストを自動的にリダイレクトできるようにしたいと考えています。
3 に答える
これを行う簡単な方法は、Windowsカーネルフックを作成してソケット要求をトラップし、それらをプロキシに再ルーティングすることです。
これに関するいくつかの有用なドキュメントは次のとおりです。
http://www.internals.com/articles/apispy/apispy.htm
Windows Vista以降を使用している場合は、Windows Filtering Platform(WFP)を検討してください。
http://www.microsoft.com/whdc/device/network/wfp.mspx
Detours(商用)とEasyHook(無料)も検討してください。これらは、フックの作成とAPI呼び出しのリダイレクト(Win32とアプリケーションの両方)のプロセスを大幅に簡素化します。
[任意の宛先ポート]から[1つのポート]を意味する場合は、特別なドライバーに依存する必要があります。Windowsの問題は、パケットをネイティブにブロック[ドロップ]できないことです。たとえば、一般的な解決策はwinpcapです。ただし、トラフィックを監視することはできますが、トラフィックを停止したり、便利な方法で変更したりすることはできません。
Windowsで私が見た唯一の解決策は、開いているTUN/TAPアダプターを使用することです。これにより、システムを離れるすべてのパケットを変更できるようになります。
使用する宛先ポートが事前にわかっている場合は、かなり簡単になります。宛先ポートのみを変更するパススルーc++ソケットプログラムを作成するだけです。
ブラウザのリクエストをリダイレクトしたい場合は、ブラウザの設定を編集するだけです。
プログラムは、ホストOSのカーネルモードで管理者権限を使用して実行する必要があります。
私はWindowsカーネルフックの経験が豊富ではありませんが、BSDとLinuxでは、ソケットを作成するためのシステムコールを上書きし、すべてのソケットを選択したプロキシソケットに簡単にリダイレクトできるカーネルモジュールをインストールするのは簡単です。