获取用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。
------------------------------------------------------------------------------------------------------------
proxy_pass http://yourdomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
-
在默认情况下,Nginx 并不会对 XFF 头做任何处理
- 此时 Nginx 后面的 Resin/Apache/Tomcat 通过 request.getHeader("X-FORWARDED-FOR") 获得的ip仍然是原始ip。
-
当 Nginx 设置 X-Forwarded-For 等于 $proxy_add_x_forwarded_for 时:
- 如果从CDN过来的请求没有设置 XFF 头(通常这种事情不会发生),XFF 头为 CDN 的ip
- 此时相对于 Nginx 来说,客户端就是 CDN
- 如果 CDN 设置了 XFF 头,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for 的话:
- XFF 头为“客户端IP,Nginx负载均衡服务器IP”,这样取第一个值即可
- 这也就是大家所常见的场景!
- 如果从CDN过来的请求没有设置 XFF 头(通常这种事情不会发生),XFF 头为 CDN 的ip
Client -> Apache WebServer + Weblogic http plugin -> Weblogic Instances
proxy_set_header HTTP_CLIENT_IP $remote_addr;
内网IP:172.16.100.10
客户端IP:123.123.123.123
测试页面: test.jsp
<%
out.println("x-forwarded-for: " + request.getHeader("x-forwarded-for"));
out.println("remote hosts: " + request.getRemoteAddr());
%>
nginx 配置一proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;wget测试wget -O aa --header="X-Forwarded-For:192.168.0.1" "http://test.com/test.jsp"页面返回结果:x-forwarded-for: 192.168.0.1, 123.123.123.123remote hosts: 172.16.100.10curl测试curl -H "X-Forwarded-For:192.168.0.1" "http://test.com/test.jsp"x-forwarded-for: 192.168.0.1, 123.123.123.123remote hosts: 172.16.100.10
nginx 配置二
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
wget测试:
wget -O aa --header="X-Forwarded-For:192.168.0.1" "http://test.com/test.jsp"
页面返回结果:
x-forwarded-for: 123.123.123.123
remote hosts: 172.16.100.10
curl测试
curl -H "X-Forwarded-For:192.168.0.1" "http://test.com/test.jsp"
x-forwarded-for: 123.123.123.123
remote hosts: 172.16.100.10
测试结果:
1、配置
增加了一个真实ip X-Forwarded-For,并且顺序是增加到了“后面”。
2、配置
清空了客户端伪造传入的X-Forwarded-For,
保证了使用 request.getHeader("x-forwarded-for") 获取的ip为真实ip,
或者用“,”分隔,截取 X-Forwarded-For 最后的值。
相关推荐
反向代理是指客户端请求到达Nginx服务器时,Nginx并不直接返回内容,而是根据配置将请求转发到实际的后端服务器,获取内容后再返回给客户端。这样做的好处包括负载均衡、安全防护以及提高响应速度等。 **二、Nginx...
`$_SERVER['REMOTE_ADDR']`是这个数组中的一个键,通常用于获取客户端的IP地址。但请注意,如果用户通过代理服务器访问,`REMOTE_ADDR`可能存储的是代理服务器的IP而非用户的实际IP。在这种情况下,可以尝试使用其他...
在使用CDN的情况下,服务器接收到的客户端IP地址实际上是CDN节点的IP地址。可以通过特定的Nginx配置来获取客户端的真实IP地址: ```nginx http { proxy_set_header X-Real-IP $remote_addr; proxy_set_header ...
在ASP.NET中,获取客户端MAC(Media Access Control)地址是一项常见的需求,特别是在网络管理、设备认证或者特定的安全应用场景中。MAC地址是网络设备的物理地址,用于标识连接到网络的设备。然而,由于HTTP协议的...
在实际应用中,获取客户端IP可能会受到各种因素的影响,比如NAT、代理服务器、CDN服务等,因此,正确地获取并处理IP地址是一个需要细心考虑的问题。了解这些细节对于优化服务、提高用户体验以及确保网络安全都至关...
2. **获取IP地址**:`HttpServletRequest`对象有一个`getRemoteAddr()`方法,它返回客户端的IP地址。然而,如果应用运行在反向代理服务器(如Nginx)后,这个方法可能会返回代理服务器的IP。因此,我们需要检查`X-...
2. **IP反向查找**:获取CDN分配给特定域名的IP后,可以尝试进行反向DNS查找,找出该IP对应的主机名,然后对主机名再次进行正向解析,可能会揭示原始IP。 3. **网络扫描**:利用Python中的网络扫描库(如Scapy、...
"Python-通过扫描全网绕过CDN获取网站IP地址"这个主题涉及到CDN(内容分发网络)的工作原理,以及如何利用Python进行网络扫描来获取真实的服务器IP。CDN是一种分布式网络服务,它能够通过将内容缓存到全球各地的边缘...
- **CDN与反向代理**:若使用CDN或反向代理,需确保计数逻辑在最接近源服务器的地方执行,以避免重复计算。 2. IP地址记录: 记录客户端IP地址可以提供以下信息: - **用户识别**:虽然IP地址不等同于唯一用户,...
防止 CDN 造成无法获取客户真实 IP 地址
3. **JavaScript检测**:另一种方法是通过JavaScript在客户端获取IP,然后将其发送回服务器。这种方式可能会被浏览器的隐私设置或用户代理阻止,因此不如服务器端的解决方案可靠。 4. **第三方服务**:有些CDN提供...
在实际应用中,我们可以根据需要调整反向代理转发规则,例如根据用户的IP地址、浏览器类型等信息来进行转发。同时,我们也可以使用其他技术,例如负载均衡器、CDN 等来实现反向代理转发功能。 使用 Web APP 实现...
在JavaScript中,获取客户端的IP地址、MAC地址和主机名通常是由于特定的需求,例如实现个性化服务、定位或安全验证。由于JavaScript的安全限制,它本身并不直接支持这些操作,但可以通过一些间接的方式实现。以下是7...
反向代理(Reverse Proxy)是网络服务的一种架构模式,其工作原理是,客户端的请求首先会到达反向代理服务器,然后由反向代理服务器决定将请求转发到哪个内部服务器(如Web服务器、应用服务器等)。这样做的好处包括...
然而,由于代理服务器、负载均衡器、CDN(内容分发网络)等中间设施的存在,直接从HTTP请求中获取的IP地址可能并不是用户的真实IP。本篇文章将详细介绍如何在不同情况下获取用户的真实IP地址,并探讨可能遇到的问题...
7ghostPHP反向代理脚本通过将HTTP请求重定向到其他服务器,实现了这一目的,尤其适用于负载均衡和内容分发网络(CDN)场景。 首先,`.htaccess`文件是Apache Web服务器配置的一部分,用于实现对目录级别的配置,...
获取IP地址通常有两种主要方法:服务器端获取和客户端获取。服务器端获取是通过HTTP请求头中的信息,如"REMOTE_ADDR"、"HTTP_X_FORWARDED_FOR"等字段,来确定客户端的IP地址。但需要注意的是,如果用户使用了代理或...
由于互联网的复杂性,用户的IP地址可能会被代理服务器、CDN服务、NAT转换等多层网络设备所遮蔽,因此获取到真实的IP地址并不总是一件简单的事情。本文将详细介绍如何在PHP中正确地获取用户的真实IP。 首先,PHP提供...
使用这个数据库时,你需要将其导入到你的MySQL服务器中,然后编写SQL查询来获取IP地址的相关信息。例如,你可以创建一个简单的查询来查找某个IP地址所在的国家: ```sql SELECT country_name FROM ip_table WHERE ...