Ne v kontakte Asocial 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) Теперь дело осталось за малым. За пол-часа я наваял первую версию скрипта, который будет автоматом делать все необходимое.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?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] - номер сайта, на котором будем раскручивать наш сайт. Вот их список:
    1
    2
    3
    4
    5
    6
    
    $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 Теперь остается залить скрипт на хостинг и настроить крон так, чтобы он регулярно вызывал этот скрипт. Отчеты о своей работе он будет складывать в простой текстовый файл, так что вы всегда сможете проконтролировать эффективность его работы. Вот и все. На последок скажу, что сейчас обкатываю новую версию скрипта с более удобными настройками :) Да, и последнее: я буду очень благодарен, если вы заодно со своим сайтом время от времени будете пиарить и мой :)