当前位置:  开发笔记 > 后端 > 正文

UserHostAddress提供错误的IP

如何解决《UserHostAddress提供错误的IP》经验,为你挑选了3个好方法。

我收集用户访问我网站的IP地址的统计信息,我注意到只有两个IP地址,172.16.16.1和172.16.16.248.我用来确定IP地址的属性是

Request.UserHostAddress

IP地址信息丢失的原因是什么?所有用户都来自世界各地,因此他们不能仅仅支持两个代理.



1> Dave Anderso..:

你可能想要这样的东西;

string SourceIP = String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_FORWARDED_FOR"]) ? Request.ServerVariables["REMOTE_ADDR"] : Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(",")[0];

HTTP_X_FORWARDED_FOR标头获取代理服务器后面的IP地址.

请参阅此页面,更详细地解释原因; 获得用户的真实IP


请注意,链式代理可能会导致多个HTTP_X_FORWARDED_FOR标头.

2> Mathieu Gars..:

这看起来像反向代理的工作.当您使用反向代理时,客户端将连接到代理,代理本身会打开与服务器的新连接.由于ASP.NET使用传入连接的信息来填充用户地址,因此您将获得反向代理的地址.

如果您确实在此配置中,则需要来自反向代理的帮助才能获得正确的信息.大多数反向代理提供了使用客户端的真实IP地址向HTTP请求添加标头的可能性.查看代理的文档.



3> tomfanning..:

基于Dave Anderson的回答,这里有一个片段,它考虑了一系列反向代理.

string forwardedFor = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

string ipStr = string.IsNullOrWhiteSpace(forwardedFor) 
                   ? Request.ServerVariables["REMOTE_ADDR"] 
                   : forwardedFor.Split(',').Select(s => s.Trim()).First();

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