Статьи Подделать IP при помощи Curl

Discussion in 'Статьи' started by Anwy, 19 Mar 2015.

  1. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Мн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:
    <?php
    function get_page_from_ip($url,$ip
    {
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_USERAGENT'Internet Explorer/6.0 (X11; U; Windows XP SP2; en-US; rv:1.7.2) Gecko/20040804');
    curl_setopt($chCURLOPT_HTTPHEADER, array(
    'Accept-Language: en-us,en;q=0.7,de-de;q=0.3',
    'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
    'X-Forwarded-For: '$ip));
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    $page curl_exec($ch);
    curl_close($ch);
    return 
    $page;
    }
    echo 
    get_page_from_ip('http://2ip.ru/''19.19.19.19');
    ?>
    Вот так простенько... и что же я увидел, когда (как видно из примера) загрузил (этим скриптом) страницу сайта сервиса по определению IP:
    результат работы примера

    IP подменен (настоящий не скрыт, но под 99% подозрение подставлен другой, если не учитывать, что для примера я взял слишком палевные цифры...)

    Если Вам интересно, что происходит на 2ip.ru, то можете посмотреть такой вот класс для определения прокси серверов:

    PHP:


    /**
    * Proxy Detector v0.1
    * copyrights by: Daantje Eeltink ([email protected])
    * 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 [email protected]
    *
    * Todo:
    * Add open proxy black list scan.
    */
    class proxy_detector {
    /**
    * CONSTRUCTOR
    * Set defaults...
    */
    function proxy_detector(){
    $this->config = array();
    $this->lastLog "";
    //set default headers
    $this->scan_headers = array(
    'HTTP_VIA',
    'HTTP_X_FORWARDED_FOR',
    'HTTP_FORWARDED_FOR',
    'HTTP_X_FORWARDED',
    'HTTP_FORWARDED',
    'HTTP_CLIENT_IP',
    'HTTP_FORWARDED_FOR_IP',
    'VIA',
    'X_FORWARDED_FOR',
    'FORWARDED_FOR',
    'X_FORWARDED',
    'FORWARDED',
    'CLIENT_IP',
    'FORWARDED_FOR_IP',
    'HTTP_PROXY_CONNECTION'
    );
    }
    /**
    * VOID setHeader( STRING $trigger )
    * Set new header trigger...
    */
    function setHeader($trigger){
    $this->scan_headers[] = $trigger;
    }
    /**
    * ARRAY $triggers = getHeaders( VOID )
    * Get all triggers in one array
    */
    function getHeaders(){
    return 
    $this->scan_headers;
    }
    /**
    * VOID setConfig( STRING $key, STRING $value)
    * Set config line...
    */
    function setConfig($key,$value){
    $this->config[$key] = $value;
    }
    /**
    * MIXED $config = getConfig( [STRING $key] )
    * Get all config in one array, or only one config value as a string.
    */
    function getConfig($key=''){
    if(
    $key)
    return 
    $this->config[$key];
    else
    return 
    $this->config;
    }
    /**
    * STRING $log = getLog( VOID )
    * Get last logged information. Only works AFTER calling detect()!
    */
    function getLog(){
    return 
    $this->lastLog;
    }
    /**
    * BOOL $proxy = detect( VOID )
    * Start detection and return true if a proxy server is detected...
    */
    function detect(){
    $log "";
    //scan all headers
    foreach($this->scan_headers as $i){
    //proxy detected? lets log...
    if($_SERVER[$i])
    $log.= "trigger $i: ".$_SERVER[$i]."\n";
    }
    //let's do something...
    if($log){
    $log $this->lastLog date("Y-m-d H:i:s")."\nDetected proxy server: ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." ({$_SERVER['REMOTE_ADDR']})\n".$log;
    //mail message
    if($this->getConfig('MAIL_ALERT_TO'))
    mail($this->getConfig('MAIL_ALERT_TO'),"Proxy detected at {$_SERVER['REQUEST_URI']}",$log);
    //write to file
    $f $this->getConfig('LOG_FILE');
    if(
    $f){
    if(
    is_writable($f)){
    $fp fopen($f,'a');
    fwrite($fp,"$log\n");
    fclose($fp);
    }else{
    die(
    "Fatal Error: Couldn't write to file: '$f'
    Please check if the path exists and is writable for the webserver or php..."
    );
    }
    }
    //done
    return true;
    }
    //nope, no proxy was logged...
    return false;
    }
    }
    ?>
     
    madik, DVK, kardinalmax and 1 other person like this.
  2. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Ох лол. Статью ещё кто-то лайкнул спустя сотни лет :))
     
  3. devton

    devton Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    3,372
    Likes Received:
    5,124
    Reputations:
    48