Сообщения на форуме может размещать не только человек, но и бот - автоматически. Ниже приведен пример скрипта PHP с использованием cURL. Чей код использовался в качестве прототипа - уже не помню, в сети можно найти множество подобных примеров, но реально работающих маловато. Этот же тестировался на данном форуме, phpbb v.3.0.11, стили на основе prosilver и subsilver2.
Скрипт может выполняться как с сервера, так и с локального компьютера, подключенного к сети Интернет, с установленным сервером apache и PHP. Во время работы скрипта создается файл cookies (см. по тексту скрипта), поэтому необходимы права на запись.
Регистрация бота на форуме проводится человеком ))
Работу скрипта через proxy можно проверить установив Tor Browser, поскольку Tor может использоваться как proxy. При загруженной панели Validata и наличии подключения к сети Tor можно использовать модифицированный скрипт:
Вышеизложенное может использоваться для автоматизации размещения сообщений при интеграции форума phpbb3 с иными системами, в том числе автоматического управления, мониторинга и др.
Надеюсь, Вы не будете использовать приведенные примеры скриптов для разработки спам-ботов !
Скрипт может выполняться как с сервера, так и с локального компьютера, подключенного к сети Интернет, с установленным сервером apache и PHP. Во время работы скрипта создается файл cookies (см. по тексту скрипта), поэтому необходимы права на запись.
Регистрация бота на форуме проводится человеком ))
- Код: Выделить всё
<?
$login = 'bot'; // Логин на форуме
$password = '123456'; // Пароль на форуме
$link = 'http://myhost.ru/forum/'; // Ссылка на форум
$f = 2; $t = 99; // Номер радела и темы узнать можно из ссылки viewtopic.php?f=2&t=99 -> $f=2 a $t=99
$time = 10; // Время между постами в секундах (на версиях 3.x стоит около 5 сек)
$subject = 'Re: Я - бот !'; // Текст сабжа по умолчанию
$message = 'Бот приветствует Вас !'; // Текст поста по умолчанию
// Отладка
$debug = true; // Для отладки
// Параметры
//$f, $t // f, t - Номер радела и темы
$n = 1; // n - Количество сообщений (умолчание = 1 )
set_time_limit(0);
header( 'Content-type: text/html; charset=utf-8' );
$f = request_var('f', $f);
$t = request_var('t', $t);
$n = request_var('n', 1);
trace($login.': start. parameters are:<br />');
trace('f='.$f.'<br />');
trace('t='.$t.'<br />');
trace('n='.$n.'<br />');
function trace ($str)
{
global $debug
if ($debug)
{
echo $str;
ob_end_flush(); flush(); ob_start();
}
}
function request_var($var, $default)
{
if(isset($_GET[$var])) return $_GET[$var];
return $default;
}
function curl($url='', $post='', $referer='', $proxy='')
{
global $debug;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.10 forum bot');
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/bot_cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/bot_cookie.txt');
if(!empty($post))
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
} else
{
curl_setopt($ch, CURLOPT_POST, 0);
}
if(!empty($referer))
{
curl_setopt($ch, CURLOPT_REFERER, $referer);
} else
{
curl_setopt($ch,CURLOPT_REFERER, 1);
}
if(!empty($proxy))
{
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
$ex=curl_exec($ch);
curl_close($ch);
return $ex;
}
// Логин
trace('login.<br />');
$x = curl($link.'ucp.php?mode=login');
preg_match('#[a-z0-9]{32}#i',$x, $sid);
curl($link.'ucp.php?mode=login', 'username='.$login.'&password='.$password.'&redirect=index.php&sid='.$sid[0].'&login=Вход');
// Отправка поста
for($i=0; $i<$n; $i++)
{
trace('posting.<br />');
$x = curl($link.'posting.php?mode=reply&f='.$f.'&t='.$t);
preg_match('#[a-z0-9]{32}#i',$x, $sid);
preg_match('/name="creation_time" value="(.*?)"/',$x, $creation_time);
preg_match('/name="post" value="(.*?)"/',$x, $post);
preg_match('/name="form_token" value="(.*?)"/',$x, $form_token);
preg_match('/name="topic_cur_post_id" value="(.*?)"/',$x, $topic_cur_post_id);
preg_match('/name="lastclick" value="(.*?)"/',$x, $lastclick);
preg_match('/name="subject"(.*?)>/',$x, $xsubject);
if(isset($xsubject[1]))
{
preg_match('/value="(.*?)"/',$xsubject[1], $ssubject);
if(isset($ssubject[1])) $subject = $ssubject[1];
}
$p = array (
'icon' => 0,
'subject' => $subject,
'addbbcode20' => 100,
'message' => $message,
'topic_cur_post_id' => $topic_cur_post_id[1],
'lastclick' => $lastclick[1],
'post' => $post[1],
'attach_sig' => 'on',
'creation_time' => $creation_time[1],
'form_token' => $form_token[1],
'fileupload' => '',
'filecomment' => '',
);
curl($link.'posting.php?mode=reply&f='.$f.'&t='.$t, $p, $link.'posting.php?mode=reply&f='.$f.'&t='.$t);
// Пауза между постами
if(($i+1)<$n)
{
trace('sleep '.$time.' sec:');
for($i=0;$i<$time;$i++)
{
trace(' '.($time-$i).' ... ');
sleep(1);
}
trace('0.<br />');
}
}
// Логаут
trace('logout.<br />');
curl($link.'ucp.php?mode=logout'.'&sid='.$sid[0]);
// Пауза между логинами
trace('sleep '.$time.' sec:');
for($i=0;$i<$time;$i++)
{
trace(' '.($time-$i).' ... ');
sleep(1);
}
trace('0.<br />');
trace($login.': stop.<br />');
?>
Работу скрипта через proxy можно проверить установив Tor Browser, поскольку Tor может использоваться как proxy. При загруженной панели Validata и наличии подключения к сети Tor можно использовать модифицированный скрипт:
- Код: Выделить всё
<?
$login = 'bot'; // Логин на форуме
$password = '123456'; // Пароль на форуме
$link = 'http://myhost.ru/forum/'; // Ссылка на форум
$f = 2; $t = 99; // Номер радела и темы узнать можно из ссылки viewtopic.php?f=2&t=99 -> $f=2 a $t=99
$time = 10; // Время между постами в секундах (на версиях 3.x стоит около 5 сек)
$subject = 'Re: Я - бот !'; // Текст сабжа по умолчанию
$message = 'Бот приветствует Вас !'; // Текст поста по умолчанию
// Отладка
$debug = true; // Для отладки
// Параметры
//$f, $t // f, t - Номер радела и темы
$n = 1; // n - Количество сообщений (умолчание = 1 )
// tor
$torIp = '127.0.0.1';
$torProxyPort = '9050';
set_time_limit(0);
header( 'Content-type: text/html; charset=utf-8' );
$f = request_var('f', $f);
$t = request_var('t', $t);
$n = request_var('n', 1);
trace($login.': start. parameters are:<br />');
trace('f='.$f.'<br />');
trace('t='.$t.'<br />');
trace('n='.$n.'<br />');
function trace ($str)
{
global $debug
if ($debug)
{
echo $str;
ob_end_flush(); flush(); ob_start();
}
}
function request_var($var, $default)
{
if(isset($_GET[$var])) return $_GET[$var];
return $default;
}
function curl($url='', $post='', $referer='', $proxy='')
{
global $debug;
global $torIp, $torProxyPort;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.10 forum bot');
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/bot_cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/bot_cookie.txt');
if(!empty($post))
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
} else
{
curl_setopt($ch, CURLOPT_POST, 0);
}
if(!empty($referer))
{
curl_setopt($ch, CURLOPT_REFERER, $referer);
} else
{
curl_setopt($ch,CURLOPT_REFERER, 1);
}
if(!empty($proxy))
{
curl_setopt($ch, CURLOPT_PROXY, $proxy);
} else
{
curl_setopt($cl, CURLOPT_PROXY, $torIp.':'.$torProxyPort);
curl_setopt($cl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
}
$ex=curl_exec($ch);
curl_close($ch);
return $ex;
}
// Логин
trace('login.<br />');
$x = curl($link.'ucp.php?mode=login');
preg_match('#[a-z0-9]{32}#i',$x, $sid);
curl($link.'ucp.php?mode=login', 'username='.$login.'&password='.$password.'&redirect=index.php&sid='.$sid[0].'&login=Вход');
// Отправка поста
for($i=0; $i<$n; $i++)
{
trace('posting.<br />');
$x = curl($link.'posting.php?mode=reply&f='.$f.'&t='.$t);
preg_match('#[a-z0-9]{32}#i',$x, $sid);
preg_match('/name="creation_time" value="(.*?)"/',$x, $creation_time);
preg_match('/name="post" value="(.*?)"/',$x, $post);
preg_match('/name="form_token" value="(.*?)"/',$x, $form_token);
preg_match('/name="topic_cur_post_id" value="(.*?)"/',$x, $topic_cur_post_id);
preg_match('/name="lastclick" value="(.*?)"/',$x, $lastclick);
preg_match('/name="subject"(.*?)>/',$x, $xsubject);
if(isset($xsubject[1]))
{
preg_match('/value="(.*?)"/',$xsubject[1], $ssubject);
if(isset($ssubject[1])) $subject = $ssubject[1];
}
$p = array (
'icon' => 0,
'subject' => $subject,
'addbbcode20' => 100,
'message' => $message,
'topic_cur_post_id' => $topic_cur_post_id[1],
'lastclick' => $lastclick[1],
'post' => $post[1],
'attach_sig' => 'on',
'creation_time' => $creation_time[1],
'form_token' => $form_token[1],
'fileupload' => '',
'filecomment' => '',
);
curl($link.'posting.php?mode=reply&f='.$f.'&t='.$t, $p, $link.'posting.php?mode=reply&f='.$f.'&t='.$t);
// Пауза между постами
if(($i+1)<$n)
{
trace('sleep '.$time.' sec:');
for($i=0;$i<$time;$i++)
{
trace(' '.($time-$i).' ... ');
sleep(1);
}
trace('0.<br />');
}
}
// Логаут
trace('logout.<br />');
curl($link.'ucp.php?mode=logout'.'&sid='.$sid[0]);
// Пауза между логинами
trace('sleep '.$time.' sec:');
for($i=0;$i<$time;$i++)
{
trace(' '.($time-$i).' ... ');
sleep(1);
}
trace('0.<br />');
trace($login.': stop.<br />');
?>
Вышеизложенное может использоваться для автоматизации размещения сообщений при интеграции форума phpbb3 с иными системами, в том числе автоматического управления, мониторинга и др.
Надеюсь, Вы не будете использовать приведенные примеры скриптов для разработки спам-ботов !