如何获取IP地址?

Dev*_*404 52 .net c# asp.net

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

string ipaddress = Request.UserHostAddress;
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

  • `X-Forwarded-For`可以包含多个IP地址. (7认同)
  • 拆分HTTP_X_FORWARDED_FOR并选择最后更好 - 请参阅答案http://stackoverflow.com/a/13249280/52277 (2认同)

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;
}
Run Code Online (Sandbox Code Playgroud)

这篇维基百科文章更彻底地解释了风险.


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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我会小心,你选择的第一个项目可能是192.168.xx你通常想得到最后一个,因为这是连接到你的系统的最后一个代理或客户端(可能是最可靠的来源).请参阅[维基百科文章](http://en.wikipedia.org/wiki/X-Forwarded-For)我使用的代码是这样的:`ip =(HttpContext.Request.ServerVariables ["HTTP_X_FORWARDED_FOR"] ??"" ).Split( '')最后()修剪();` (18认同)
  • @WouterSimons,根据相同的[维基百科文章](https://en.wikipedia.org/wiki/X-Forwarded-For)"最左边是原始客户端",所以应该使用First()而不是持续() (4认同)

小智 12

在MVC 6中,您以这种方式检索IP地址:

HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
Run Code Online (Sandbox Code Playgroud)

  • 您可以跳过第一部分...当您已经拥有“Context”时,为什么还要通过“Request”来获取“Context”?这应该只是“HttpContext.Connection.RemoteIpAddress.ToString()” (3认同)