5

サーバーがルーターの背後にある場合、どうすればユーザーのパブリックIPを取得できますか?

私はしようとしています:

protected string GetIPAddress() 
{
    System.Web.HttpContext context = System.Web.HttpContext.Current;
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }
    return context.Request.ServerVariables["REMOTE_ADDR"]; 
}

しかし、私が得るのはルーターゲートウェイだけです。

どうやら、REMOTE_ADDR私の場合は機能せず、どちらも機能しませんHTTP_X_FORWARDED_FOR

私の場合、ユーザーのパブリックIPを取得する方法について何かアイデアはありますか?

ありがとう。

4

3 に答える 3

2

HTTPレベルでIPとルーティングを処理しようとしています。

アプリケーション層では、パケットはすでにルーティング/ IP層を通過しており、その情報は取り除かれています。

HTTPレベルで表示されるパケットは、IP情報がないアプリケーション層レベルでリモートエンドポイントから送信されたものとまったく同じであるため、HTTPヘッダーを調べてもIMHOには役立ちません。

編集: @Marc Gravellが言ったように、一部のリバースプロキシはこの情報をHTTPヘッダーに追加します。したがって、それが行われる場合は、(構成されている場合は)自分のものを確認する必要があります。

この回答には、確認できる他のサーバー変数がいくつかリストされています。

于 2012-11-01T12:34:47.507 に答える
0

唯一の信頼できる方法は、インターネット上の既知のサービスに連絡して、要求がどのIPから送信されているかを通知することです。もちろん、そのサービスは機能し続け、到達可能である必要があります。そうしないと、この機能が機能しなくなります。たとえば、http://whatismyip.com

于 2012-11-01T12:35:44.337 に答える
0

それを取得する方法はありません。

ただし、ユーザーがページを開いているのがローカルネットワークからであるかWebからであるかはわかります。

IPがルーターがWebからの要求に割り当てるIPである場合、それがWebからのものであることは明らかです。

于 2012-11-10T10:49:23.650 に答える