ASP.NET でユーザーのクライアント IP アドレスを取得するにはどうすればいいですか? 質問する

ASP.NET でユーザーのクライアント IP アドレスを取得するにはどうすればいいですか? 質問する

ASP.NET で IP アドレスを取得する必要がありますRequest.UserHostAddressが、これは通常、ユーザーの ISP の IP アドレスであり、たとえばリンクをクリックしたユーザーのマシンの IP アドレスとはまったく同じではありません。実際の IP アドレスを取得するにはどうすればよいでしょうか?

たとえば、Stack Overflow のユーザー プロファイルでは、「最後のアカウント アクティビティ: 4 時間前、86.123.127.8 から」となっていますが、私のマシンの IP アドレスは少し異なります。Stack Overflow はこのアドレスをどうやって取得するのでしょうか?

一部の Web システムでは、何らかの目的で IP アドレス チェックが行われます。たとえば、特定の IP アドレスでは、ユーザーは 24 時間ごとにダウンロード リンクを 5 回だけクリックすることができます。この IP アドレスは一意である必要があります。膨大な数のクライアントやインターネット ユーザーを抱える ISP では、この IP アドレスは一意ではありません。

よく理解できましたか?

ベストアンサー1

多くの場合、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")

この方法は絶対確実ではありませんが、より良い結果をもたらす可能性があります。以下は、VB.NETのASP.NETコードです。James Crowley のブログ投稿「Gotcha: HTTP_X_FORWARDED_FOR が複数の IP アドレスを返す」

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

おすすめ記事