2

ユーザーの HTTP リクエストを次のように変更することは可能ですか?

www.example.com/options

それ以外の

www.example.com/options_and_params

私のシナリオでは、約 30000 人のユーザーが会社のネットワーク バックボーンに接続しており、バックボーン スイッチと Radware LoadProof の間に 1 つ以上のサーバーを (現在取り組んでいるコードで) 追加して、この作業を実現したいと考えています。

一晩中グーグルで調べた後、私には手がかりがありませんが、さらにいくつか質問があります:

  1. ネットワークを介してすべてのパケットを傍受する必要はありません。iptables などの助けを借りて、必要なパッケージを除外できます。iptablesを使用する前にそれを行いました。ただし、パケットは HTTP ストリームと同じではありません。HTTP の再構築を行う必要がありますか?
  2. HTTP 要求の URL コンテンツを変更する方法を見つけたとしても、それをネットワーク ストリームに戻す必要があります。私が知っているように、TCP パケットにはチェックサムがあり、コンテンツを変更した後は間違っているはずです。新しいチェックサムを計算し、パケットをネットワークに戻すにはどうすればよいですか?

ネットワークプログラミングやパケット処理の開発をするのは初めてです。どんな提案でも大歓迎です。

4

2 に答える 2

1

これは、HTTP/1.0 と HTTP/1.1 のどちらを実行しているか、および変更が必要な最初の要求か、単一の HTTP 1.1 セッション内のすべての要求かによって異なります。

パケットがあり、送信前に変更でき、リクエストのみを変更しようとしている場合、典型的なパケットの長さと HTTP リクエスト ストリーム内の URL の場所 (最初のすぐ近く) とそれがTCPストリームで最初に送信されるという事実は、送信された最初のパケットの最初のNバイトに存在するため、複数のパケットに分割されないことをかなり安全に想定できると思います.

ただし、これが HTTP/1.1 ストリームの場合、複数のリクエストが同じ TCP 接続を介して送信されます。この場合、将来のリクエストでは URL が 2 つの TCP パケットに分割される可能性があります。

HTTP/1.0 を強制できる場合、または最初のリクエストまたはすべてのリクエストを HTTP/1.0 に変更する場合は、最初のパケットが TCP ストリームの最初のパケットに対応することはほぼ間違いありません。 URL が複数のパケットに分割されていることを確認してください。つまり、再構築は行われず、置換のみを行うことができます。

ただし、これには新しい TCP 接続が必要であり、かなり非効率的です。

そうせずに HTTP/1.1 のままにしておくと、URL は将来のリクエストのランダムなポイントにある可能性があるため、複数の TCP パケット (URL のサイズを考えると現実的には 2 つ) に分割される可能性があります。

于 2012-10-12T22:25:21.217 に答える
0

あなたの質問が正しければ、これはおそらく nginx のような高速なリバース プロキシで実行できます。

于 2012-10-12T22:15:51.193 に答える