多くの場合、あなたの Web サイトを訪れた人の IP アドレスを知りたいと思うでしょう。ASP.NET にはこれを行うための方法がいくつかありますが、これまで見てきた最良の方法の 1 つは、ServerVariables コレクションの "HTTP_X_FORWARDED_FOR" を使用することです。
これが理由です...
訪問者がプロキシ サーバーまたはルーターの背後にいる場合があり、標準Request.UserHostAddress
ではプロキシ サーバーまたはルーターの IP アドレスのみがキャプチャされます。この場合、ユーザーの IP アドレスはサーバー変数 ("HTTP_X_FORWARDED_FOR") に格納されます。
したがって、最初に「HTTP_X_FORWARDED_FOR」をチェックし、それが空の場合は単純に を返しServerVariables("REMOTE_ADDR")
ます。
この方法は絶対確実というわけではありませんが、より良い結果につながる可能性があります。以下は、 James Crowley のブログ投稿「Gotcha: HTTP_X_FORWARDED_FOR が複数の IP アドレスを返す」から引用した VB.NET の ASP.NET コードです。
C#
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"];
}
VB.NET
Public Shared Function GetIPAddress() As String
Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
Dim sIPAddress As String = context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If String.IsNullOrEmpty(sIPAddress) Then
Return context.Request.ServerVariables("REMOTE_ADDR")
Else
Dim ipArray As String() = sIPAddress.Split(New [Char]() {","c})
Return ipArray(0)
End If
End Function