2

node.js + socket.io では、次のコードを使用してユーザーの IP アドレスを取得します。

var clientIP = socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;

しかし、結果は間違っています。console.logこれらの値を実行したところ、次の結果が得られました。

socket.handshake.address.address明らかに内部 IP (127.xxx) です

x-forwarded-forcloud9 のプロキシ (107.23.232.64、54.236.78.114、107.23.123.140) の 1 つです。

どうやら二重プロキシが使用されており、プロキシ層の 1 つが'x-forwarded-for'ヘッダーを提供していませんね。cloud9 でユーザーの実際の IP を取得することは絶対に不可能ですか? 私のプロジェクトには不可欠です。

4

1 に答える 1

2

実際、Cloud9 は 2 層プロキシを使用して、ワークスペースで実行されているアプリケーションへのアクセスを提供しています。最初のプロキシはアクセス権をチェックし、2 番目のプロキシはワークスペースへのリクエストをトンネリングします。2 番目のプロキシは、インフラストラクチャ プロバイダーの OpenShift によってホストさx-forwarded-forれ、最初のプロキシによって設定されたヘッダーが上書きされます。残念ながら、現時点ではこれを修正する手段がありません。コメントで述べたように、リモートの IP に依存しないようにしてください。

于 2013-10-03T09:09:42.520 に答える