1

次のシナリオでは、サーバー Y でクライアント IP を取得しようとしています。

クライアントがサーバー X を要求し、サーバー X はその要求をサーバー Y に転送します。

そしてリターンフローは Y->X->client です

httpヘッダーの「REMOTE_ADDR」(実際にはrequest.environ ['REMOTE_ADDR']から取得)にはサーバーXのIPがあります。サーバーYのクライアントのIPはどこから取得できますか?

アップデート:

XにはパブリックIPがあります。Y はプライベート ネットワーク内にあり、外部からアクセスすることはできません。現在、同じプライベート ネットワークでクライアントを使用しており、パブリック ネットワーク経由で X を要求しています。

Xでヘッダーを操作してクライアントのIPを含めることなく、ヘッダーに必要なものが既にあるかどうかを知りたいだけです。

4

2 に答える 2

2

アプリケーションがプロキシの背後にある場合、リクエストのリモート アドレスは、実際のクライアントではなく、プロキシからのものとしてアプリケーションに表示されます。

「実際の」アドレスを渡すための http 仕様の規定はありませんが、これを行うための事実上の標準は、プロキシにX-Forwarded-For ヘッダーを設定させることです。

Werkzeug はこれを支援する修正ツールを提供しており、 Flask docsに詳細な例があり、request.remote_addr期待どおりになるはずです。

于 2013-01-16T15:04:49.560 に答える
0

あなたの主張にもかかわらず、X はユーザーの要求に基づいて Y に独自の要求を行うため、基本的にプロキシです。REMOTE_ADDRしたがって、それが X のものであることは完全に有効です。

X-Original-User-IPユーザーの IP を Y が使用できるようにするなど、X の要求にカスタム ヘッダーを追加する必要があります。ProxyFix必要に応じてこれX-Forwarded-Forを使用できます。REMOTE_ADDR

Y は X のみが使用でき、直接アクセスできないことを確認する必要があります。そうしないと、そのカスタム ヘッダーを送信するだけで、自分の IP アドレスを偽装することができます。

于 2013-01-16T17:27:38.567 に答える