Muh*_*tar 68
您可以使用此方法获取客户端计算机的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;
}
Wou*_*ons 38
在使用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;
}
这篇维基百科文章更彻底地解释了风险.
Ant*_*ony 34
应该使用HTTP_X_FORWARDED_FOR但它可以返回由逗号分隔的多个IP地址.看到这个页面.
所以你应该经常检查它.我个人使用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;
}
小智 12
在MVC 6中,您以这种方式检索IP地址:
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()