如何获取IP地址?

时间:2009-12-15 12:45:43

标签: c# .net asp.net

我想获取在我的网站上注册的IP地址。如何在ASPNET中执行此操作。我使用了以下代码,但是,它没有获得正确的IP地址

string ipaddress = Request.UserHostAddress;

6 个答案:

答案 0 :(得分:65)

您可以使用此方法获取客户端计算机的IP地址。

public static String GetIP()
{
    String ip = 
        HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(ip))
    {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

    return ip;
}

答案 1 :(得分:37)

在您使用IP地址进行安全性的情况下,您应该了解您的基础架构。

如果您在Web服务器和设置标题的客户端之间使用代理,则应该能够信任最后一个地址。然后你使用像穆罕默德建议的代码更新,以始终从转发头获取最后一个IP地址(见下面的代码)

如果您不使用代理,请注意X-Forwarded-For标头很容易欺骗。我建议你忽略它,除非你有明确的理由不这样做。

我更新了Muhammed Akhtar的代码如下,以便您选择:

public string GetIP(bool CheckForward = false)
{
    string ip = null;
    if (CheckForward) {
        ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    }

    if (string.IsNullOrEmpty(ip)) {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    } else { // Using X-Forwarded-For last address
        ip = ip.Split(',')
               .Last()
               .Trim();
    }

    return ip;
}

Wikipedia article更彻底地解释了风险。

答案 2 :(得分:34)

应该使用HTTP_X_FORWARDED_FOR但是它可以返回由逗号分隔的多个IP地址。见this page

所以你应该经常检查它。我个人使用Split功能。

public static String GetIPAddress()
{
    String ip = 
        HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(ip))
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    else
        ip = ip.Split(',')[0];

    return ip;
}

答案 3 :(得分:7)

在MVC 6中,您可以通过以下方式检索IP地址:

HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()

答案 4 :(得分:3)

如果客户通过透明的非匿名代理进行连接,您可以从以下地址获取其地址:

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

如果无法以这种方式获得IP,则可以返回null或“unknown”。

Request.ServerVariables["REMOTE_ADDR"]应与Request.UserHostAddress相同,如果请求不是来自非匿名代理,则可以使用其中任何一个。

但是,如果请求来自匿名代理,则无法直接获取客户端的IP。这就是为什么他们称这些代理匿名

答案 5 :(得分:-1)

setSize