2011-08-02 16 views
18

I次のコードを持っている:テスト環境でユーザーのIP addrressを返しますが、我々は生産にウェブサイトを展開するときに、この変数は、アプリケーションがホストされているサーバーのIPを持っていない、なぜServerVariable ["REMOTE_ADDR"]はサーバのIPを返しますか?

string ip = Request.ServerVariables["REMOTE_ADDR"]; 

。どんな助け?

+2

あなたはそれが何を返すと思いますか?これを参照してください:http://stackoverflow.com/questions/3812166/difference-between-remote-host-and-remote-addr – Oded

+3

@Odedそのstackoverflow答えが受け入れられ、いくつかのupvotesがありますが、間違っています。 – mhenry1384

+0

同じ 'HttpContext.Current.Request.ServerVariables [" REMOTE_ADDR "]。ToString();'と 'Request.UserHostAddress。ToString(); ' – Kiquenet

答えて

23

私の推測では、途中にプロキシがあると思います。 HTTP_X_FORWARDED_FOR最初の使用、およびそれがnullだ場合、MSDN articleからREMOTE_ADDR

を使用します。

だけREMOTE_ADDRサーバー変数を取得することは十分なはずですが、私はこのようなコードも確認する必要があることが示唆されたリソースをオンラインで見つけHTTP_X_FORWARDED_FOR変数。要求がアドレスを変換するプロキシサーバー経由で来た場合は、正しいアドレスを含むこの変数です。存在しないサーバー変数を要求すると、ServerVariablesプロパティーは空の文字列を戻します。したがって、このプロパティがテストに表示されない場合でも、その値を取得しようとしても問題は発生しません。

UPDATE:それはあなたが設定をオンに変更していているLoad Balancerの場合は

、あなたは彼らがIPが通過発信を持つことができるかどうかを確認するために依頼する必要があります。私はこれがマイクロソフトのISAサーバでできることを知っています。

それはオプションではない場合、あなたは試してみて、彼らはその結果生産かどうかを確認することができ、これらの他のサーバー変数があります:あなたが古い、VBスタイルのサーバー変数の代わりRequest.UserHostAddressを使用しないのはなぜ

"HTTP_X_COMING_FROM" 
"HTTP_X_FORWARDED_FOR" 
"HTTP_X_FORWARDED" 
"HTTP_X_REAL_IP" 
"HTTP_VIA" 
"HTTP_COMING_FROM" 
"HTTP_FORWARDED_FOR" 
"HTTP_FORWARDED" 
"HTTP_FROM" 
"HTTP_PROXY_CONNECTION" 
"CLIENT_IP" 
"FORWARDED" 
+0

それはあなたが間違ったIPアドレス –

+0

@Bhargavミストリを送信するプロキシを持っているので、間違っている - 私は複数の生産ボックスで実行されている同様のコードがあります。私は過去にこの問題に遭遇し、プロキシの問題が原因であることを保証することができます。いくつかのプロキシサーバーはHTTP_X_FORWARDED_FORをスプーフィングするか、またはすべてをオフにすることができます。 – zeroef

+0

@zeroef助けてくれてありがとう。私はHTTP_X_FOWARD_FORに変更を加えましたが、私はまだ同じIPを取得しています。私はインフラストラクチャチームと話をしました。それは、戻ってくるサーバIPではなく、実際にはロードバランサIPであることが分かりました。何かご意見は? – FelixMM

4

は?

MSDN Libraryを参照してください。

他にも述べたように、リバースプロキシ/ SSLターミネータのIPアドレスは、元のクライアントから来たように見えない場合に表示されます(少なくともISAサーバでは可能です。おそらくほとんどの他の逆プロキシで)。

そうでなければ、クライアントのパブリックアドレスを取得します(ほとんどのLANはNATであるため、おそらくクライアントサイトのルーターアドレスです)。

実稼働環境での設定とテスト環境との違いは?

実際にWebサーバーまたは同じネットワーク内の他のサーバーのIPアドレスを取得していますか。

0

これは古い質問ですが、私はそれを渡って走りました。私は答えを知っていると思います。答えは上記のものより簡単です...私は今日、同じ問題に直面しました。私はあなたがページをXMLHTTPによって呼び出されているIPから取得しようとしていると確信しています。これは、リクエストではなくユーザであるため、サーバIPを返します。