トランスポート層より上のトラフィックを傍受する
質問
第一に、私はネットワークプログラミングが比較的初心者です。 HTTPトラフィックがサーバーアプリケーションに到達する前にインターセプトして遅延させたい。 libnetfilter_queueを掘り下げて、適切に遅延させるために必要なすべての情報を提供していますが、レベルが低すぎます。ここでトラフィックを遅延させることはできますが、IPデータグラムをほぼ即座に受け入れない限り(遅延したいときにスタックに送信する場合)、それらは再送されます(ACKが到着しない場合)。 / p>
TCPを処理する必要はありません。TCPが配信するペイロードだけを処理する必要があります。だから私の質問は、特定のポートでトラフィックが宛先に到達する前にインターセプトする方法ですが、TCPが確認してチェックした後ですか?
ありがとう
編集:タグとlibnetfilter_queueから明らかであることを願います-これはLinux向けです
解決
HTTPプロキシを介して接続をハイジャックします。クライアントでHTTP_PROXYを設定できない場合、または現在のサーバーのIPとポート番号で実行するフィルターを設定して、実サーバーを別のIPに移動できない場合、これを行うための良い方法をGoogleに提供します。
したがって、実際のTCP接続はクライアントとユーザーの間であり、ユーザーとサーバーの間です。 TCPは常にミッションの達成を確認するため、ACKを処理する必要はありません。
編集:オリジナルに対するコメントは、iptablesを使用して同じマシン上の透過プロキシプロセスを介してトラフィックをリダイレクトするというこのアイデアをすでに思いついたものです。
他のヒント
まあ、コメントで提案したことをやったので、それがうまくいくように感じたとしても機能します。
(または)問題は、当然のことながら、Webサーバーがすべてのリクエストがlocalhostから来ていると考えることです。本当に、この遅延がクライアントとサーバーの両方に透過的であることを望みます(もちろん時間を除いて!)。これについて何かできることはありますか?
そうでない場合、その影響は何ですか?各HTTPセッションは異なるポートを介して行われます-それらはあるべきように完全に分離されるのに十分ですか?おそらく、多くのセッションのアドレスが同じNATの背後にある場合に機能すると考えてください。