Мнoгие сaйты испoльзуют прoверку нa испoльзoвaние proxy серверa. Прoверкa oснoвывaется нa aнaлизе HTTP зaгoлoвкoв, кoтoрые мoжнo легкo пoдделaть нa php. Тaким oбрaзoм, мoжнo выдaть свoй нaстoящий ip зa прoкси, a зa нaстoящий выдaть aбсoлютнo любoй ip - хoть ФБР-ий или прoстo 01.01.01.01
Крoме тoгo мoжнo пoдделaть и все oстaльные дaнные(брaузер, oС, стрaницa oткудa пришли...)
Мoдифицируйте... будет хoрoшим дoпoлнением в цепoчки прoкси, кoтoрoе свoей "пoддельнoстью" вынесет всем мoзг)
Сейчaс пoкaжу кaк этo делaется...
В PHP для имитaции клиентa(брaузерa) существует зaмечaтельнoе средствo curl. Примерoв пo испoльзoвaнию, aвтoризaции нa сервисaх и тд. в интернете пoлнo.
А для того чтоб сделать то, о чем я писал выше, нужно добавить в HTTP заголовки строку:
X-Forwarded-For: 01.01.01.01
где цифры - наш IP адрес.
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
Вот так простенько... и что же я увидел, когда (как видно из примера) загрузил (этим скриптом) страницу сайта сервиса по определению IP:
результат работы примера
IP подменен (настоящий не скрыт, но под 99% подозрение подставлен другой, если не учитывать, что для примера я взял слишком палевные цифры...)
Если Вам интересно, что происходит на 2ip.ru, то можете посмотреть такой вот класс для определения прокси серверов:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]
[/COLOR][COLOR="#FF8000"]/**
* Proxy Detector v0.1
* copyrights by: Daantje Eeltink (me@daantje.nl)
* http://www.daantje.nl
*
* first build: Mon Sep 18 21:43:48 CEST 2006
* last build: Tue Sep 19 10:37:12 CEST 2006
*
* Description:
* This class can detect if a visitor uses a proxy server by scanning the
* headers returned by the user client. When the user uses a proxy server,
* most of the proxy servers alter the header. The header is returned to
* PHP in the array $_SERVER.
*
* License:
* GPL v2 licence. (http://www.gnu.org/copyleft/gpl.txt)
*
* Support:
* If you like this class and find it usefull, please donate one or two
* coins to my PayPal account me@daantje.nl
*
* Todo:
* Add open proxy black list scan.
*/
[/COLOR][COLOR="#007700"]class[/COLOR][COLOR="#0000BB"]proxy_detector[/COLOR][COLOR="#007700"]{
[/COLOR][COLOR="#FF8000"]/**
* CONSTRUCTOR
* Set defaults...
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]proxy_detector[/COLOR][COLOR="#007700"](){
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]config[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]lastLog[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#FF8000"]//set default headers
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]scan_headers[/COLOR][COLOR="#007700"]= array(
[/COLOR][COLOR="#DD0000"]'HTTP_VIA'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_X_FORWARDED_FOR'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_FORWARDED_FOR'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_X_FORWARDED'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_FORWARDED'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_CLIENT_IP'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_FORWARDED_FOR_IP'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'VIA'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'X_FORWARDED_FOR'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'FORWARDED_FOR'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'X_FORWARDED'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'FORWARDED'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'CLIENT_IP'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'FORWARDED_FOR_IP'[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#DD0000"]'HTTP_PROXY_CONNECTION'
[/COLOR][COLOR="#007700"]);
}
[/COLOR][COLOR="#FF8000"]/**
* VOID setHeader( STRING $trigger )
* Set new header trigger...
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]setHeader[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$trigger[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]scan_headers[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$trigger[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]/**
* ARRAY $triggers = getHeaders( VOID )
* Get all triggers in one array
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]getHeaders[/COLOR][COLOR="#007700"](){
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]scan_headers[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]/**
* VOID setConfig( STRING $key, STRING $value)
* Set config line...
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]setConfig[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]config[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]/**
* MIXED $config = getConfig( [STRING $key] )
* Get all config in one array, or only one config value as a string.
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]getConfig[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]){
if([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"])
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]config[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]];
else
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]config[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]/**
* STRING $log = getLog( VOID )
* Get last logged information. Only works AFTER calling detect()!
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]getLog[/COLOR][COLOR="#007700"](){
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]lastLog[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]/**
* BOOL $proxy = detect( VOID )
* Start detection and return true if a proxy server is detected...
*/
[/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]detect[/COLOR][COLOR="#007700"](){
[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#FF8000"]//scan all headers
[/COLOR][COLOR="#007700"]foreach([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]scan_headers[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#FF8000"]//proxy detected? lets log...
[/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]])
[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#DD0000"]"trigger[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#DD0000"]: "[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]].[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]//let's do something...
[/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]lastLog[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]date[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Y-m-d H:i:s"[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]"\nDetected proxy server: "[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]gethostbyaddr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REMOTE_ADDR'[/COLOR][COLOR="#007700"]]).[/COLOR][COLOR="#DD0000"]" ([/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REMOTE_ADDR'[/COLOR][COLOR="#007700"]]}[/COLOR][COLOR="#DD0000"])\n"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#FF8000"]//mail message
[/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getConfig[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'MAIL_ALERT_TO'[/COLOR][COLOR="#007700"]))
[/COLOR][COLOR="#0000BB"]mail[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getConfig[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'MAIL_ALERT_TO'[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#DD0000"]"Proxy detected at[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REQUEST_URI'[/COLOR][COLOR="#007700"]]}[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#FF8000"]//write to file
[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getConfig[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'LOG_FILE'[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]){
if([/COLOR][COLOR="#0000BB"]is_writable[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"])){
[/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fopen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'a'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#0000BB"]$log[/COLOR][COLOR="#DD0000"]\n"[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]);
}else{
die([/COLOR][COLOR="#DD0000"]"Fatal Error: Couldn't write to file: '[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#DD0000"]'
Please check if the path exists and is writable for the webserver or php..."[/COLOR][COLOR="#007700"]);
}
}
[/COLOR][COLOR="#FF8000"]//done
[/COLOR][COLOR="#007700"]return[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#FF8000"]//nope, no proxy was logged...
[/COLOR][COLOR="#007700"]return[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"];
}
}
[/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR]