2016-11-07 14 views
0

ビルドしたアプリケーションのクライアントIPアドレスを記録しようとしています。これは、devサーバー上で正常に動作します。しかし、ロード・バランサを備えた実動サーバーにソリューションをデプロイするとすぐに、クライアントIPではなくロード・バランサのIPアドレスがログに記録されているようです。ログクライアントのIPアドレス

私はHTTP_X_FORWARD_FORヘッダーを追加する必要があることを理解します。

これは私のコードです:誰かが私が私が

答えて

1

訪問者がプロキシサーバーまたはルーターの後ろにあり、標準のRequest.UserHostAddressがプロキシサーバーまたはルーターのIPアドレスのみを取得することがあります。この場合、ユーザーのIPアドレスはサーバー変数( "HTTP_X_FORWARDED_FOR")に格納されます。

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"]; 
} 

上記のコードは、あなたがそれを有効にするのに役立ちます。

0

別の実行可能な選択肢を行っている間違いを識別するのに役立つことができれば

private static string GetCurrentIp() 
    { 
     String clientIP = 
      (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null) ? 
      HttpContext.Current.Request.UserHostAddress : 
      HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

     return clientIP; 
    } 

は感謝です:

var remoteIpAddress = request.HttpContext.Connection.RemoteIpAddress; 

は、あなたがきたと言っていませんこれを使用する必要がありますが、この方法ではプロセスがはるかに簡単です。

以前はこれは.NET Core RC1では壊れていましたが、RC2以降は生産準備が整いました。