【问题标题】:Can IP address for same user change within a user session in an ASP.Net app?同一用户的 IP 地址可以在 ASP.Net 应用程序的用户会话中更改吗?
【发布时间】:2016-07-17 15:09:04
【问题描述】:

我正在使用下面的代码在我的 ASP.Net 应用程序中获取用户的 IP 地址。

问题userIPAddress 变量的值是否可以针对同一用户在同一用户会话中的请求进行更改?我假设用户可以从笔记本电脑或移动设备访问 ASP.Net 应用程序。

string userIPAddress =  System.Web.HttpContext.Current.Request.UserHostAddress;

【问题讨论】:

  • 如果在代理服务器后面或在使用动态 dhcp 服务器的 Intranet 环境中,可能会被更改。审核:thepcspy.com/read/getting_the_real_ip_of_your_usersstackoverflow.com/questions/9726576/…获取用户ip地址
  • UserHostAddress 不获取代理服务器的 IP 地址,所以该代理服务器后面的所有用户都会给出相同的 UserHostAddress?我不确定代理服务器是动态IP还是静态IP。
  • IP地址是代理服务器的地址(根据ISP服务和他自己的路由器配置可能是静态的/动态的),所以代理服务器后面的所有用户都有相同的真实IP地址。代理服务器,真的,是 Natting,它的意思是,通过给每个外部不可见的私有 IP 地址来管理用户(但可以访问:))。
  • @M.Hassan,感谢您提供丰富的评论。

标签: c# asp.net


【解决方案1】:

用户的 IP 地址可能因各种原因而更改,新的 DHCP 租约或只是手动更改静态 IP 地址。

因为 ASP.Net 会话只是基于会话,所以即使用户有不同的UserHostAddress,相同的会话也会继续。

您可以通过在您的应用程序中建立一个会话然后手动更改您的静态 IP 地址来轻松地对此进行测试。您的会话保持不变。

【讨论】:

  • 感谢您的回答。所以看来使用UserHostAddress的IP地址是不可靠的。我试图在 ASP.Net 应用程序中使用 IP 地址来确定用户是否被黑客冒充使用另一台计算机。但是由于其不可靠性,为此使用 IP 地址永远不会起作用。
  • 它可靠地显示了用户的当前地址,(或介于两者之间的代理)但你是对的,假设冒充是不可靠的。
  • 在 ASP.Net 中获得的 IP 地址应仅用于信息目的only,并且由于其不可靠而绝不用于实施业务规则。
  • 我首先想到为什么IP地址可以改变是因为设备切换到另一个网络。例如,当智能手机从移动数据切换到 Wi-Fi 时,反之亦然。
  • @hvd,随着当今技术的快速发展,人们永远不应该依赖 IP 地址。
【解决方案2】:

要获取用户的真实 IP 地址,首先检查此值是有意义的:

HttpContext.Current.Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]

如果该值为空或 null,则检查 UserHostAddress 属性。 以下代码来自参考:http://jacobmsaylor.com/?p=1693

private string GetClientIPAddress()
    {
        if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
        {
            // Let's first check for a proxy
            var ipAddresses = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',');
            return ipAddresses[0].Trim();
        }
        else if (System.Web.HttpContext.Current.Request.UserHostAddress != null
            && System.Web.HttpContext.Current.Request.UserHostAddress != string.Empty)
        {
            // If they are not using one
            return System.Web.HttpContext.Current.Request.UserHostAddress;
        }
        else
        {               
            return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        }
    }

【讨论】:

  • 但是由于互联网服务提供商采取的各种安全措施,即使您提供的方法也不可靠。我认为在 ASP.Net 中获得的任何 IP 地址都仅供参考,绝不能用于在 ASP.Net 应用程序中实现某些业务逻辑。
  • 当然,它不是 100% 可靠的,但可能会被某些站点用于控制,例如用户下载。因此,带有身份验证的 Cookie 用于识别用户:他是谁 :)
  • X-Forwarded_For 由发件人控制。只有在您控制发件人的情况下(例如,如果它由您控制的负载均衡器设置),它才是值得信赖的。
  • 看来,在 ASP.Net 中获取 IP 地址是不可靠的。
猜你喜欢
  • 2019-08-18
  • 2011-03-10
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多