Ne v kontakte Antisocial programmer's blog

Как не надо делать сайты автосерфинга или Получаем посетителей на халяву

Есть такая система обмена показами - asurf.net.ru. Идея заключается в том, что после того, как ты просмотришь (под чутким руководством их скриптов) N нужных сайтов, твой адрес заносится в этот список и те, кто будут добавлять свой сайт после вас будут вынуждены посмотреть ваш сайт. В итоге вы получите N просмотров. В целом система оказалась удачной, стала пользоваться популярностью и даже было запущено для аналогичных сервиса на других доменах. Особо замечательным свойством этой системы оказалось то, что она не требует ни регистрации, ни ввода какой бы то ни было капчи… Как вы думаете, какая мысль меня тут же посетила? Правильно, автоматизировать это дело и на халяву рубить посетителей. Ну а если еще и учесть, что на наиболее активно прокручиваемые в системе сайты вешаются сквозняки, в том числе со страничеко с PR5, то идея становится вообще крайне заманчивой. :) Ладно, автоматизировать, так автоматизировать. За пару минут я выяснил, что навигация осуществляется с помощью мета-тега в верхнем фрейме. В итоге выстроилась такая схема вызовов адресов:

0) http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru
1) http://asurf.net.ru/nextN.php
...
N) http://asurf.net.ru/nextN.php
N+1) http://asurf.net.ru/save.php

N - это количество хитов, которое мы хотим получить. Система поддерживает значения N только 3, 5, 9, 15, 23. Как человек ленивый, я подумал, что пусть даже скриптом, но столько скачиваний делать как-то совсем не здорово. Не долго думая, я попробовал вместо 23 вызовов делать всего 3 и это, как ни странно, сработало! Чуть-чуть поэксперементировав я пришел к выводу, что системе пофигу, сколько раз я загружаю страницу http://asurf.net.ru/nextN.php. При чем настолько пофигу, что если я вызову http://asurf.net.ru/save.php сразу после http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru, то система все равно будет считать, что я честно посмотрел всю ту чушь, что полагается! B) Теперь дело осталось за малым. За пол-часа я наваял первую версию скрипта, который будет автоматом делать все необходимое.

<?php
/**
 * AClicker 1.1
 * Asurf.net.ru auto surfing script by Alek$
 * http://nevkontakte.org.ru
 */
/**
 * Запрещается модифицировать данный скрипт без разрешения автора.
 */
// Usage [hits] [site] [promos]

// Define log entries types
define('ST_INFO', "Information");
define('ST_WARN', "Warning");
define('ST_ERROR', "Error");

// Include curl http library
require_once("http.php");

// Init argv[]
if(empty($argv))
{
    $argv = explode('S', $_REQUEST['q']);
    array_unshift($argv, '');
}
// Obtain number of requires hits
$hits = array(3,5,9,15,23);
if(in_array($argv[1],$hits))
{
    $hits = $argv[1];
}
else
{
    $hits = 3;
    log_action('Invalid hit number! Assuming 3...', ST_WARN);
}

// Obtain which site promote
$site = array(
    'http://testsite'.rand(3000,30000).'.ru',
    'http://nevkontakte.org.ru',
);

if(isset($site[$argv[2]]))
{
    $site = $site[$argv[2]];
}
else
{
    $site = $site[0];
    log_action("Invalid site id! Assuming $site ...", ST_WARN);
}

// Obtain which promoter use
$promos = array(
    'all',
    'asurf.net.ru',
    'rpanel.in',
    'surf.rpanel.info',
);

if(isset($promos[$argv[3]]))
{
    $promo = $promos[$argv[3]];
}
else
{
    $promo = $promos[1];
    log_action("Invalid promoter id! Assuming $promo ...", ST_WARN);
}

if($promo == 'all')
{
    log_action("Starting multipromo request queue for $hits hits to $site");
    for($i = 1; $i < sizeof($promos); $i++)
    {
        $promo = $promo = $promos[$i];
        log_action("Starting request for $hits hits to $site at $promo");

        $curl = &new Curl_HTTP_Client();

        //pretend to be IE6 on windows
        $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
        $curl->set_user_agent($useragent);

        $cookies_file = "./cookies.txt";
        fclose(fopen($cookies_file, 'w'));
        $curl->store_cookies($cookies_file);
        //if you want to send some post data
        //form post data array like this one
        $post_data = array(
            'h'     => $hits,
            'url'   => $site,
        );
        //and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
        $html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
        if(preg_match('##', $html_data))
        {
            $html_data = $curl->fetch_url("http://$promo/save.php");
            if(preg_match('##', $html_data))
            {
                log_action('Succeed');
            }
            else
            {
                echo $html_data;
                $html_data = str_replace("\n",'',$html_data);
                log_action("Error at step 2! Responce: $html_data", ST_ERROR);
            }
        }
        else
        {
            echo $html_data;
            $html_data = str_replace("\n",'',$html_data);
            log_action("Error at step 1! Responce: $html_data", ST_ERROR);
        }
    }
}
else
{
    log_action("Starting request for $hits hits to $site at $promo");

    $curl = &new Curl_HTTP_Client();

    //pretend to be IE6 on windows
    $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
    $curl->set_user_agent($useragent);

    $cookies_file = "./cookies.txt";
    fclose(fopen($cookies_file, 'w'));
    $curl->store_cookies($cookies_file);
    //if you want to send some post data
    //form post data array like this one
    $post_data = array(
        'h'     => $hits,
        'url'   => $site,
    );
    //and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
    $html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
    if(preg_match('##', $html_data))
    {
        $html_data = $curl->fetch_url("http://$promo/save.php");
        if(preg_match('##', $html_data))
        {
            log_action('Succeed');
        }
        else
        {
            echo $html_data;
            $html_data = str_replace("\n",'',$html_data);
            log_action("Error at step 2! Responce: $html_data", ST_ERROR);
        }
    }
    else
    {
        echo $html_data;
        $html_data = str_replace("\n",'',$html_data);
        log_action("Error at step 1! Responce: $html_data", ST_ERROR);
    }
}

log_action();

function log_action($log = '', $status = ST_INFO, $display = true)
{
    static $aid;
    static $string = array();

    if(empty($log))
    {
        $out = implode('',$string);
        $fp = fopen(date('y-m-d').'.txt','a');
        fwrite($fp, $out);
        fclose($fp);
        return;
    }

    if(empty($aid))
    {
        $aid=number_format(microtime(true),5,'','');
    }
    $date = date('y-m-d H:M');
    $string[] = "$aid [$date] $status: $log\n";

    if($display)
        echo "$aid [$date] $status: $log\n";

}
?>

Скрипт можно использовать как из командной строки, так по http. В перво случае формат аргументов такой: clicker.php [hits] [site] [promos] В случае с вызовом во http это выглядит так: http://www.site.ru/clicker.php?q=[hits]S[site]S[promos] Теперь о самих параметрах. Все три параметра - числа.

  • [hits] - 3, 5, 9, 15, 23 - количество хитов, которое вы хотите получить на свой сайт
  • [site] - номер сайта, который будем раскручивать. чтобы добавить в скрипт свой сайт вам необходимо после строки 'http://nevkontakte.org.ru', добавить такую же, только указать URL своего сайта.
  • [promos] - номер сайта, на котором будем раскручивать наш сайт. Вот их список:
    $promos = array(
        'all',
        'asurf.net.ru',
        'rpanel.in',
        'surf.rpanel.info',
    );
    
    нумерация начинается с нуля, поэтому у asurf.net.ru номер 1, у rpanel.in - 2 и т.д. Чтобы одним махом добавиться на все сайты, нужно указать 0.

В итоге, чтобы потребовать 23 хита на каждом сайте автосерфинга для сайта nevkontakte.org.ru нужно открыть в браузере http://www.site.ru/clicker.php?q=23S1S0 Теперь остается залить скрипт на хостинг и настроить крон так, чтобы он регулярно вызывал этот скрипт. Отчеты о своей работе он будет складывать в простой текстовый файл, так что вы всегда сможете проконтролировать эффективность его работы. Вот и все. На последок скажу, что сейчас обкатываю новую версию скрипта с более удобными настройками :) Да, и последнее: я буду очень благодарен, если вы заодно со своим сайтом время от времени будете пиарить и мой :)

blog comments powered by Disqus