5


4

C ++リダイレクト送信接続

Windows上のC でプログラムを監視し、特定のポートで行う送信要求をリダイレクトする方法はありますか? 単純なC httpプロキシがあり、それを介してポート80上のすべてのブラウザー要求を自動的にリダイレクトできるようにしたい。

3 Answer


5


簡単な方法は、ソケットリクエストをトラップしてプロキシに再ルーティングするWindowsカーネルフックを作成することです。

これに関するいくつかの有用なドキュメントは次のとおりです。

Windows Vista以上を使用している場合は、Windows Filtering Platform(WFP)を検討してください。

また、http://research.microsoft.com/en-us/projects/detours/ [Detours](商用)およびhttp://easyhook.codeplex.com/[EasyHook](無料)もご覧ください。 これらは、フックの記述とAPI呼び出しのリダイレクト(Win32とアプリケーションの両方)のプロセスを大幅に簡素化します。


1


[任意の宛先ポート]から[1つのポート]を意味する場合、特別なドライバーに依存する必要があります。 Windowsの問題は、パケットをネイティブにブロック[ドロップ]できないことです。 たとえば、一般的なソリューションはwinpcapです。 ただし、トラフィックを監視できますが、トラフィックを停止したり、便利な方法で変更したりすることはできません。

Windowsで私が見た唯一の解決策は、http://en.wikipedia.org/wiki/TUN/TAP [open TUN / TAP adapter]を使用することです。 それにより、システムを離れるすべてのパケットを変更できます。

使用する宛先ポートが事前にわかっている場合は、かなり単純になります。 宛先ポートのみを変更するパススルーc ++ソケットプログラムを記述するだけです。

ブラウザのリクエストをリダイレクトする場合は、ブラウザの設定を編集するだけです。


0


プログラムは、ホストOSのカーネルモードで管理者権限で実行する必要があります。

Windowsカーネルフックに関する豊富な経験はありませんが、BSDとlinuxでは、ソケットを作成するためのシステムコールを上書きするカーネルモジュールをインストールするのは簡単で、すべてのソケットを選択したプロキシソケットに簡単にリダイレクトできます。