如何获取伪装ip下的真实ip地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取伪装ip下的真实ip地址相关的知识,希望对你有一定的参考价值。

取客户端ip其实不是个简单的活儿,因为存在Ip欺骗,和代理问题,所以获取客户端的IP的真实性会打折扣的,不能百分百准确.但是我们还是尽量找一个比较完善的获取客户端真正ip方法.使用php获取IP的方法能找到很多.

php获取用户(客户端)真实IP地址的三种方法
查看代码打印
01 function get_real_ip()
02 $ip=false;
03 if(!empty($_SERVER[\'HTTP_CLIENT_IP\']))
04 $ip=$_SERVER[\'HTTP_CLIENT_IP\'];
05
06 if(!empty($_SERVER[\'HTTP_X_FORWARDED_FOR\']))
07 $ips=explode (\', \', $_SERVER[\'HTTP_X_FORWARDED_FOR\']);
08 if($ip) array_unshift($ips, $ip); $ip=FALSE;
09 for ($i=0; $i < count($ips); $i++)
10 if(!eregi (\'^(10│172.16│192.168).\', $ips[$i]))
11 $ip=$ips[$i];
12 break;
13
14
15
16 return ($ip ? $ip : $_SERVER[\'REMOTE_ADDR\']);
17
第二种方法:
查看代码打印
01 function get_real_ip()
02 static $realip;
03 if(isset($_SERVER))
04 if(isset($_SERVER[\'HTTP_X_FORWARDED_FOR\']))
05 $realip=$_SERVER[\'HTTP_X_FORWARDED_FOR\'];
06 else if(isset($_SERVER[\'HTTP_CLIENT_IP\']))
07 $realip=$_SERVER[\'HTTP_CLIENT_IP\'];
08 else
09 $realip=$_SERVER[\'REMOTE_ADDR\'];
10
11 else
12 if(getenv(\'HTTP_X_FORWARDED_FOR\'))
13 $realip=getenv(\'HTTP_X_FORWARDED_FOR\');
14 else if(getenv(\'HTTP_CLIENT_IP\'))
15 $realip=getenv(\'HTTP_CLIENT_IP\');
16 else
17 $realip=getenv(\'REMOTE_ADDR\');
18
19
20 return $realip;
21
第三种方法,摘自DISCUZ,应该还不错吧!
查看代码打印
01 // 获取IP地址(摘自discuz)
02 function getIp()
03 $ip=\'未知IP\';
04 if(!empty($_SERVER[\'HTTP_CLIENT_IP\']))
05 return is_ip($_SERVER[\'HTTP_CLIENT_IP\'])?$_SERVER[\'HTTP_CLIENT_IP\']:$ip;
06 elseif(!empty($_SERVER[\'HTTP_X_FORWARDED_FOR\']))
07 return is_ip($_SERVER[\'HTTP_X_FORWARDED_FOR\'])?$_SERVER[\'HTTP_X_FORWARDED_FOR\']:$ip;
08 else
09 return is_ip($_SERVER[\'REMOTE_ADDR\'])?$_SERVER[\'REMOTE_ADDR\']:$ip;
10
11
12 function is_ip($str)
13 $ip=explode(\'.\',$str);
14 for($i=0;$i<count($ip);$i++)
15 if($ip[$i]>255)
16 return false;
17
18
19 return preg_match(\'/^[0-9]1,3\\.[0-9]1,3\\.[0-9]1,3\\.[0-9]1,3$/\',$str);
20
参考技术A 用辅助软件可以查出来 参考技术B

兔!《》子动态IP ,支持手机和电脑用的,IP覆盖全国,IP很多

你如果需要改不同的IP地址,刷网站点击量,这个对你有很大帮助

隐藏IP

使用LVS或者阿里云的SLB后如何获取访客真实的IP地址

阿里云服务器使用SLB后如何获取真实IP(使用LVS等负载均衡方案之后如何获取真实的IP)

使用7层负载均衡之后最终realserver的访问都是由proxy发起的,所以日志中记录的访问IP都是proxy的IP,这时候如果想获取真实IP,阿里云官方提供了使用 http_realip_module或者mod_rpaf来获取真实IP(这种办法除了可以获取IP记录到日志中,还可以禁止特定IP访问站点),这种方法有个弊病就是需要配置文件里面把proxy的请求IP全写进去,而且如果SLB的服务器集群扩容,而你不知道, 那么很可惜扩容的服务器发起的请求,在您的日志中记录的都是他的服务器IP而不是访客的ip~~

其实不用那么复杂,SLB服务器会把客户的真实IP记录在http头X_FORWARDED_FOR 字段中。

实际apache和nginx都是可以直接读取http头中任何字段值的,所以可以在logformat中配置X_FORWARDED_FOR 这个字段,测试情况如下:

Apache:

日志格式配置

技术分享

技术分享

LogFormat “‘realip:’%{X-Forwarded-For}i ‘slbip:’%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

重启apache后测试可以获取到真实IP,情况如下:

技术分享

其中有realip还是-的记录,记录是SLB服务器健康检查的记录并不是客户访问的记录,可以忽略。

技术分享

Nginx

日志配置情况如下:

技术分享

技术分享

  log_format  main  ‘realip:$http_x_forwarded_for slbip:$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;


测试后可以获取真实的IP,情况如下:

技术分享

技术分享

同上,没获取到realip的都是健康检查的记录,不是客户访问的记录,可以忽略。

这个方法非阿里云官方提供的,我在自己的几台服务器测试都完全没问题,不知道阿里云官方处于什么目的没有推荐这种方法。

应该有一些弊端吧,总之,如果这种方法你测试可以满足你的需求,那么你可以尝试一下~~


本文出自 “Holy” 博客,请务必保留此出处http://holy2010.blog.51cto.com/1086044/1934419

以上是关于如何获取伪装ip下的真实ip地址的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取用户真实的ip

使用LVS或者阿里云的SLB后如何获取访客真实的IP地址

如何绕过用CDN的域名 获取真实IP地址

如何获取用户的真实IP

nginx如何获取自己的ip

java中,如何获取真实的IP地址?