В этой статье я расскажу об одном их способов накрутки счетчиков. Зачем? Да хотя бы для того, чтобы "подняться" в различных TOPах.
Возьмем, для примера, рейтинг wwwsupertop.ru. Все зарегистрированные пользователи, кроме того что получают в свое распоряжение счетчик посещений, так еще и участвуют в рейтинге. Чем больше цифра на счетчике, тем твоя страница ближе к первому месту. Следовательно, чтобы попасть на первое место, надо чтобы счетчик показал как можно большую цифру. Логично? А после того как нужная страница окажется в призовой тройке(или даже на первом месте), ее заметят, и реальные посетители повалят толпами.
ПРЕДВАРИТЕЛЬНЫЕ ПРИГОТОВЛЕНИЯ
Итак, нам понадобятся:
Свежий список proxy-серверов. Взять такой можно, например, на wwwproxychecker.ru
Сервер с поддержкой PHP и SQL. Вот здесь могут быть сложности. Советую поискать временный "халявный" хостинг или, на худой конец, установить на своем компьютере те же Apache+MySQL.
Немного времени.
В базе данных нам понадобится несколько таблиц. Уверен, что ты знаешь SQL, поэтому напишу сразу, как они создаются:
1. Таблица, состоящая из одной колонки и одного ряда. В ней хранится номер прокси, который мы использовали последним.
CREATE TABLE lastproxy(proxyid int)
2. Еще одна таблица, состоящая из одной колонки и одного ряда. В ней хранится номер useragent, который мы использовали последним.
CREATE TABLE lastproxyagent(agentid int)
3. Таблица со списком проксей. proxyid - порядковый номер, proxyname - адрес прокси, proxyport - порт. Заполнишь таблицу сам из свежего списка прокси-серверов.
CREATE TABLE proxylist(proxyid int, proxyname char(64), proxyport int)
4. Таблица, хранящая список UserAgent-ов. Нужно для того, чтобы разнообразить список браузеров "пользователя" - чтобы враги не догадались. Впиши туда всякие ie4.0, ie5.0, ie6.0, netscape, opera и т.д.
CREATE TABLE proxyagent(agentid int, agent char(64))
5. Таблица, используемая как обычный счетчик, - в ней хранится общее количество обращений к прокси-серверам.
CREATE TABLE proxycount(counter int)
ПИШЕМ СКРИПТ
Как ты, наверняка, уже понял, скрипт будет писаться на PHP.
Назовем его PHPCount.php. Для большего удобства пользования (например, для работы с html-формами) в скрипт передаются следующие переменные:
$ref - адрес сервера, с которого якобы зашел пользователь (серверная переменная Referer);
$url - ссылка, на которую надо зайти.
В итоге скрипт вызываем на выполнение примерно так: PHPCount.php?ref=http://www.i-am-hacker.ru&url=http://www.rambler.ru/kartinka.gif
Теперь сам скрипт. Он будет выглядеть так:
// не забываем проверить, переданы ли переменные $ref и $url - иначе ничего работать не будет
if (($url=="") || ($ref=="")) {echo "Ты забыл ввести переменные $ref и $url!";}
//если все в порядке, то
else {
// здесь должны идти стандартные строчки подключения к той базе данных, с которой ты работаешь
// ...
// создаем переменные, которые понадобятся для того чтобы через проксю запросить нужный нам урл
$ref="Referer: $ref";
$useragent="User-Agent: ";
$accept0="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, */*";
$accept1="Connection: Keep-Alive";
$accept2="Accept-Language: ru";
$accept3="Accept-Encoding: gzip, deflate";
// типа мы - эксплорер и даже круче
while(1!=2) // зацикливание
{
//запрашиваем номер последней прокси, которую мы использовали
$a=mysql_query("select * from lastproxy");
$lastproxy=mysql_result($a,0,"proxyid");
$lastproxy++;
//считаем общее количество наших проксей
$proxys=mysql_numrows(mysql_query("select * from proxylist"));
//если номер прокси, которую мы собираемся использовать, превышает общее количество известных прокси-серверов, начинаем с самого начала
if ($lastproxy>$proxys) $lastproxy=1;
//удаляем номер последнего использованного проксика ...
mysql_query("delete from lastproxy");
//... и вставляем туда номер, который собираемся использовать в данный момент
mysql_query("insert into lastproxy values($lastproxy)");
// далее выполняем те же самые операции с таблицей lastproxyagent
$a=mysql_query("select * from lastproxyagent");
$lastagent=mysql_result($a,0,"agentid");
$lastagent++;
$agents=mysql_numrows(mysql_query("select * from proxyagent"));
if ($lastagent>$agents) $lastagent=1;
mysql_query("delete from lastproxyagent");
mysql_query("insert into lastproxyagent values($lastagent)");
//выбираем из списка проксей ту, чей номер хотим использовать сейчас
$a=mysql_query("select * from proxylist where proxyid=$lastproxy");
//считываем адрес проксика
$proxyname=mysql_result($a,0,"proxyname");
//и порт
$proxyport=mysql_result($a,0,"proxyport");
//выбираем из таблицы нужный нам в данный момент agent
$a=mysql_query("select * from proxyagent where agentid=$lastagent");
$agentname=mysql_result($a,0,"agent");
$useragent="$useragent $agentname";
//вызываем основную функцию, которая выполнит всю "грязную работу", используя данные из наших переменных
$stroka=get_http_headers($proxyname,$proxyport,$useragent,$accept0,$accept1,$accept2,$accept3,$ref,$url);
//выводим на экран (для себя) основные переменные
print $proxyname.":".$proxyport." [$agentname] ".$lastproxy."/".$lastagent;
//обычный счетчик. Считываем значение, увеличиваем, перезаписываем.
$a=mysql_query("select * from proxycount");
$pk=mysql_result($a,0,"counter");
$pk++;
mysql_query("delete from proxycount");
mysql_query("insert into proxycount values($pk)");
}
А вот и основная функция, выполняющая основную работу по подключению к указанному прокси-серверу:
function get_http_headers ($proxy,$proxyport,$useragent,$accept0,$accept1,$accept2,$accept3,$ref,$url,$proto="HTTP/1.0")
{
//если url без _, дописываем оный
if(!eregi( "^_", $url)) { $url = "_".$url; }
$uri = parse_url($url);
//порт стандартный - 80
$port = ( $uri[ "port"] ? $uri[ "port"] : 80 );
//открываем сокет
$sock = fsockopen($proxy,$proxyport);
//если ошибка (например, proxy не найден), то выходим из функции
if(!$sock) { return(-1); }
if (!strlen($uri[path])) {$uri[path] = "/";}
//строим запрос к серверу ...
$req=sprintf("GET %s %s\nHost: %s\n%s\n%s\n%s\n%s\n\n\n",$url,$proto,$uri[host],$ref,$accept0,$accept2,$accept3);
// ... и отсылаем его
fputs($sock, $req);
//делаем паузу
$date = getdate();
$datesec=$date[seconds];
$changes=0;
while ($changes<5)
{
$date = getdate();
$datesec2=$date[seconds];
if ($datesec2!=$datesec) { $datesec=$datesec2; $changes++;}
}
//закрываем сокет и выходим из функции
fclose($sock);
$output="ok";
return($output);
}
Итог - перед тобой полностью рабочий скрипт, который успешно справляется с поставленной перед ним задачей. Согласен, что скрипт не доработанный, однако ничто не мешает тебе это сделать самому. Например, добавить распределение количества показов в зависимости от времени суток примерно так:
$date = getdate();
$dateh =$date[hours];
if (($dateh>=0) && ($dateh<3)) $n=100;
if (($dateh>=3) && ($dateh<12)) $n=30;
if (($dateh>=12) && ($dateh<22)) $n=50;
if (($dateh>=22) && ($dateh<=24)) $n=100;
Или еще что придумать - это твое дело. Главное - чтобы скрипт выполнял свое дело, не так ли? .
P.S. Хочу выразить свою благодарность человеку с irc-канала #s.k.l, скрывающемуся под псевдонимом Ilia Sprite. Без него этот скрипт вряд ли бы существовал.
Источник _http://www.xakep.ru/magazine/xs/029/064/1.asp