PHP は実際の IP の取得、IP のシミュレート、IP の隠蔽、プロキシ IP、IP の偽装、高匿名性プロキシ、共通匿名プロキシ、透過的プロキシ IP
私は、PHP 業界の主要なオープンソース システムと、ユーザーの実際の IP を国際的に取得している 6 つのケースを大まかにリストします (Magento Zencart Zend Framework Yii を含む...国内のものについては言及しません! それらをすべて抹消します!):
<?php function 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 error_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 $iipp = $_SERVER["REMOTE_ADDR"]; echo $iipp ; ?>
<?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 function 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 if(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 を取得するために業界で一般的に使用されている方法を読んだ後、共通のパターンを発見しました。その主なコアは
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
REMOTE_ADDR
さまざまな進化、コードの互換性だけ!
質問: HTTP_CLIENT_IP を偽造してシミュレートし、HTTP_X_FORWARDED_FOR を偽造してシミュレートし、REMOTE_ADDR を偽造してシミュレートできれば、ユーザーの実際の IP を追跡できないという目的は達成できるのではないでしょうか?
答え: 上記の理解は完全に正しいです!これを実行すると、ユーザーの実際の IP を取得し、ユーザーの IP を識別子として使用するシステムの 99% を完全に停止できます。
(カール、ソケット、fsocketopen、stream_socket_client):
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%系统
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%系统
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); curl_setopt($curl, CURLOPT_PROXY, '1.1.1.1:8080');//自行百度获得普匿代理IP即可,高匿代理IP更佳! //优点:通杀100%系统