当前位置:  开发笔记 > 编程语言 > 正文

如何获取IP地址?

如何解决《如何获取IP地址?》经验,为你挑选了4个好方法。

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

string ipaddress = Request.UserHostAddress;

Muhammad Akh.. 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;
}

`X-Forwarded-For`可以包含多个IP地址. (7认同)

拆分HTTP_X_FORWARDED_FOR并选择最后更好 - 请参阅答案http://stackoverflow.com/a/13249280/52277 (2认同)


Wouter Simon.. 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;
}

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



1> Muhammad Akh..:

您可以使用此方法获取客户端计算机的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;
}


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

2> Wouter Simon..:

在使用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;
}

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



3> Anthony..:

应该使用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;
}


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

4> 小智..:

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

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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有