模拟IP、隐藏IP、代理IP、伪装IP、高匿代理、普匿代理、透明代理IP , 你永远获得不到我的真实IP
PHP世界不算漏洞的漏洞 - 你永远获得不到我的真实IP
我粗略列举6种PHP业内、国际各大开源系统获取用户真实IP的案例(包括Magento Zencart Zend Framework Yii...国内的就不提了吧!通杀!):
PHP获取用户真实IP方法1:
<?phpfunction GetIP(){if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $cip = $_SERVER["HTTP_CLIENT_IP"]; }elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){ $cip = $_SERVER["HTTP_X_FORWARDED_FOR"]; }elseif(!empty($_SERVER["REMOTE_ADDR"])){ $cip = $_SERVER["REMOTE_ADDR"]; }else{ $cip = "无法获取!"; }return $cip; }echo GetIP();?>
PHP获取用户真实IP方法2:
<?phperror_reporting (E_ERROR | E_WARNING | E_PARSE);if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){ $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; }elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){ $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"]; }elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]){ $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; }elseif (getenv("HTTP_X_FORWARDED_FOR")){ $ip = getenv("HTTP_X_FORWARDED_FOR"); }elseif (getenv("HTTP_CLIENT_IP")){ $ip = getenv("HTTP_CLIENT_IP"); }elseif (getenv("REMOTE_ADDR")){ $ip = getenv("REMOTE_ADDR"); }else{ $ip = "Unknown"; }echo $ip;?>
PHP获取用户真实IP方法3:
<?php$iipp = $_SERVER["REMOTE_ADDR"];echo $iipp ;?>
PHP获取用户真实IP方法4:
<?php$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];echo $user_IP?>
PHP获取用户真实IP方法5:
<?phpfunction get_real_ip(){ $ip=false;if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; }if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); if($ip){ array_unshift($ips, $ip); $ip = FALSE; } for($i = 0; $i < count($ips); $i++){ if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])){ $ip = $ips[$i]; break; } } }return($ip ? $ip : $_SERVER['REMOTE_ADDR']); }echo get_real_ip();?>
PHP获取用户真实IP方法6:
<?phpif(getenv('HTTP_CLIENT_IP')){ $onlineip = getenv('HTTP_CLIENT_IP'); }elseif(getenv('HTTP_X_FORWARDED_FOR')){ $onlineip = getenv('HTTP_X_FORWARDED_FOR'); }elseif(getenv('REMOTE_ADDR')){ $onlineip = getenv('REMOTE_ADDR'); }else{ $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR']; }echo $onlineip;?>
获取用户真实IP原理:
客官看完了业界常用的获取用户真实IP方法后,发现有个共同规律,主要核心就是
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
REMOTE_ADDR
不同的演变,只是代码兼容性罢了!
如何模拟用户真实IP?
问:如果可以伪造模拟HTTP_CLIENT_IP,伪造模拟HTTP_X_FORWARDED_FOR,伪造模拟REMOTE_ADDR,不就可以达到追踪不到用户真实IP的目的了么?
答:楼上理解完全正确!如果做到这样完全可以通杀99%的获取用户真实IP,以用户IP为标识的系统!
支招【LET采集技巧】(curl、socket、fsocketopen、stream_socket_client):
如何模拟HTTP_CLIENT_IP?HTTP_CLIENT_IP可以模拟么?伪装HTTP_CLIENT_IP!
curl_setopt($curl, CURLOPT_HTTPHEADER, array ( 'Client_Ip: '.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255), ));//优点:伪造成本低,通杀90%系统
如何模拟HTTP_X_FORWARDED_FOR?HTTP_X_FORWARDED_FOR可以模拟么?伪装HTTP_X_FORWARDED_FOR!
curl_setopt($curl, CURLOPT_HTTPHEADER, array ( 'X-Forwarded-For: '.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255), ));//优点:伪造成本低,通杀90%系统
上面方法综合整理版如下:
$forwarded_ip = mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255);
$client_ip = mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$forwarded_ip, 'CLIENT-IP:'.$client_ip));
如何模拟REMOTE_ADDR?REMOTE_ADDR可以模拟么?伪装REMOTE_ADDR!
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); curl_setopt($curl, CURLOPT_PROXY, '1.1.1.1:8080');//自行百度获得普匿代理IP即可,高匿代理IP更佳! //优点:通杀100%系统