ASP.NET中用户IP地址的防伪检测

4

我尝试过从以下方法中获取IP地址:

HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] & 
Request.UserHostAddress & Request.ServerVariables["REMOTE_ADDR"]

问题是这样的:当使用Request.ServerVariables["REMOTE_ADDR"]获取客户端IP时,返回的是代理服务器的IP地址,而HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]可能被篡改。我希望能够找到一种可靠的方法来获取客户端IP,避免被篡改。如有帮助,将不胜感激。

3
除非使用HTTPS协议(其中请求头和正文是加密的),否则客户端和你之间的任何代理都可以修改X-Forwarded-For头信息。但是,一些代理会解密数据包并注入任何他们想要的内容。在工作中,我们为单点登录系统执行此操作。因此,简而言之,很遗憾,不可能做到这一点。 - Will
2个回答

9
我希望有一种无法被篡改的方法来获取客户端IP地址。
很抱歉,这种方法不存在。
问题在于Request.ServerVariables["REMOTE_ADDR"]返回代理IP。
假设用户在公司代理后面。你将获得此代理IP,这对于所有目的而言都是最接近用户IP的东西。我的意思是,如果你得到了用户的最终内部IP,比如192.168.0.15,那对你有什么用呢?

7
我认为你不需要为互联网的工作方式道歉 :P - annakata
有没有一种方法可以找到用户的 IP 地址?例如,如果客户端从代理服务器请求网页,我想知道该代理服务器的互联网 IP 地址,而不是客户端无法篡改的内部 IP 地址。 - zeemz
我偶然得到了公司代理内部IP地址而不是互联网IP地址。 - zeemz

2
除了@Developer Art之外,还需要考虑到互联网上许多IP地址都是从私有类'C'地址代理的。例如,尽管我家的电缆调制解调器具有公共IP地址,但我的路由器为内部类C地址(例如192.168.1.123)提供了代理服务。
最后...鉴于192和10地址是大多数消费者路由器的标准,您的大多数用户将通过以这两个数字之一开头的地址进入,并且在任何情况下都不会是唯一的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接