«Знание — могущество».

7 апреля 2009

Универсальный флудер на PHP

написал Figaroo в рубрике Web-разработка @ 10:20

Представляю вашему вниманию универсальный флудер на языке PHP.

Исходник под катом.

<?php
/*
* Figaroo Multi-purpose Flooder v1.0
*
* Описание: универсальный флудер
* Требования: разрешение на работу с сокетами
* Автор - Figaroo, http://blogfigaroo.ru/
*/

// неограниченное время выполнения скрипта
set_time_limit(0);

// настройки
define('URL', 'POST http://localhost/poligon/global_flooder/test.php'); // HTTP-метод и URL скрипта, который будем флудить
define('TIMES', 3); // количество сообщений, которых требуется отправить
define('ANTIFLOOD', 5); // время задержки (антифлуда), в секундах
define('COOKIES', 'param1=a; param2=b'); // кукисы
define('REFERER', 'http://localhost/poligon/global_flooder/test.php'); // реферер
define('USERAGENT', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'); // юзер-агент
define('RNDVAR', '<VAR>'); // случайный текст будет подставлен вместо этого

// данные для отправки методом GET
// <VAR> будет заменено на случайное значение
$GET_DATA = array(
	'text' => 'Привет всем!',
);

// данные для отправки методом POST
// <VAR> будет заменено на случайное значение
$POST_DATA = array(
	'message' => 'Тест. message =) [<VAR>]',
	'test' => '123',
);

// флудим
$count = 0; // счётчик отправленных сообщений
$url = explode(' ', URL);
$method = $url[0];
$url = parse_url($url[1]);
if (!@$url['port']) $url['port'] = 80;
$GET_DATA = array_function('rnd_var_handl', $GET_DATA);
$GET_DATA = $GET_DATA ? http_build_query($GET_DATA) : '';
$POST_DATA = array_function('rnd_var_handl', $POST_DATA);
$POST_DATA = $POST_DATA ? http_build_query($POST_DATA) : '';

// отправка сообщений в цикле
for ($i = 0; $i < TIMES; $i++) {
	$fp = @fsockopen(@$url['host'], @$url['port'], $errno, $errstr, 10);
	if (!$fp) continue;
	// формируем заголовки запроса:
	$req = $method." ".@$url['path'].($GET_DATA ? '?'.$GET_DATA : '')." HTTP/1.1\r\n";
	$req .= "Host: ".@$url['host']."\r\n";
	if (USERAGENT) $req .= "User-agent: ".USERAGENT."\r\n";
	if (COOKIES) $req .= "Cookie: ".COOKIES."\r\n";
	if (REFERER) $req .= "Referer: ".REFERER."\r\n";
	if ($method == "POST") {
		$req .= "Content-type: application/x-www-form-urlencoded\r\n";
		$req .= "Content-Length: ".strlen($POST_DATA)."\r\n";
	}
	// отсылаем запрос
	$req .= "\r\n";
	if ($method == 'POST') $req .= $POST_DATA;
	fwrite($fp, $req);
	fclose($fp);
	$count++;
	// ждём $antiflood микросекунд и повторяем цикл
	if (ANTIFLOOD) sleep(ANTIFLOOD + 1);
}

// замена "случайной" переменной
function rnd_var_handl ($data) {
	return str_replace(RNDVAR, md5(microtime(1)), $data);
}

// рекурсивная обработка массивов
function array_function ($func, $array) {
	if (!is_array($array)) return call_user_func($func, $array);
	foreach ($array as $k => $v) {
		if (is_array($v)) $array[$k] = array_function($func, $v);
		else $array[$k] = call_user_func($func, $v);
	}
	return $array;
}

?>
<html>
<body>
<b>Отчёт:</b>

<ul>
<li>Отправлено <b><?=$count?></b> <b><?=$method?></b>-запросов из <b><?=TIMES?></b> требуемых;</li>
<li>Интервал отправки сообщений составил <b><?=ANTIFLOOD?></b> сек.;</li>
<li>Подключение осуществлялось через <b><?=@$url['host']?>:<?=@$url['port']?></b>;</li>
<li>Требуемый скрипт: <b><?=@$url['path']?></b>;</li>
</ul>
<i>Figaroo Multi-purpose Flooder v1.0</i>

</body>
</html>

Скачать архив с исходником и тестирующим примером: global_flooder.rar.

Комментарии (2) »

  1. а что он флудит???

    Комментарий by ф — 26 августа 2009 @ 21:17


  2. Всё, что пожелаете. =)

    Комментарий by Figaroo — 26 августа 2009 @ 21:27


RSS-лента комментариев к этой записи

Оставить комментарий

Пожалуйста, заполните все поля.

© Валерий 'Figaroo' Киркиж, 2008-2012 гг.