PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR[]转载

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。 
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER[‘REMOTE_ADDR‘]; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER[‘HTTP_CLIENT_IP‘]; //代理端的(有可能存在,可伪造)
$_SERVER[‘HTTP_X_FORWARDED_FOR‘]; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

三个值区别如下:

一、没有使用代理服务器的情况:

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。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

//获取用户IP
$ip = ‘‘;
foreach (array(‘HTTP_CLIENT_IP‘, ‘HTTP_X_FORWARDED_FOR‘, ‘HTTP_FROM‘, ‘REMOTE_ADDR‘) as $v) {
   if (isset($_SERVER[$v])) {
       if (! preg_match(‘/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/‘, $_SERVER[$v])) {
                continue;
   } 
          $ip = $_SERVER[$v];
   }
}

uset($ip,$v);

时间: 2024-10-10 12:37:56

PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR[]转载的相关文章

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

nginx前端代理tomcat取真实客户端IP

使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一个新的Header,用来存储$remote_add,然后再Tomcat获取记录这个值. 新增nginx配置. server { listen 80; server_name www.xxxxx.com; location / { proxy_pass http://IP:8080/; proxy_set_header X-Real-IP $rem

让nginx反向代理能够记录来自客户端的真实IP地址

上一节,我们说到了让Nginx能够正确识别用户到底访问的是哪个虚拟主机的域名,本章,我们讨论一下,如何让Nginx能够记录来自客户端的真实IP地址. 1.首先,我们看一下httpd的访问日志,看看客户端的IP地址是哪一个? 192.168.1.6 - - [29/Apr/2015:07:51:07 +0800] "GET / HTTP/1.0" 200 13 192.168.1.6 - - [29/Apr/2015:07:51:07 +0800] "GET / HTTP/1.

PHP 使用CURL库IP欺骗,隐藏真实客户端IP

首先搭建环境,建立个ip.php. 代码如下: <? error_reporting(0); function GetIP(){ if($_SERVER['HTTP_CLIENT_IP']){ $onlineip=$_SERVER['HTTP_CLIENT_IP']; }elseif($_SERVER['HTTP_X_FORWARDED_FOR']){ $onlineip=$_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $onlineip=$_SERVER['R

PHP获取客户端的真实IP

REMOTE_ADDR只能获取访问者本地连接中设置的IP,如中南民族大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址, 如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP.如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面. // 定义一个函数getIP() function getIP() { global $ip; if (getenv("HTTP_CLIENT_IP

nginx做反向负载均衡,后端服务器获取真实客户端ip

开门见山,操作如下: 首先,在前端nginx上需要做如下配置: location / { proxy_pass http://test1; proxy_set_hearder host $host; proxy_set_header X-Real_IP $remoute_addr; proxy_set_header $proxy_add_x_forwarded_for; }; nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换:这样操作完成后,real-ser

多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.javapeixun.com.cn / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.

通过HttpservletRequest对象获取客户端的真实IP地址

这篇文章主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache.Squid.nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的UR

apache关于记录真实客户端ip和不记录健康检查日志

由于负载均衡会转发客户端的请求到web服务器,所以web服务往往记录的是负载均衡的IP,现在可以通过下面的配置,让apache记录真实客户端IP 语法 #LogFormat  "\"%{X-Forwarded-For}i\"%l %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined 普通日志和记录客户端IP的apache日志比较 #L