Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Тестирую локально бота (на apache). Не работает. Где ошибка? |

29.03.2007, 15:26
|
|
Новичок
Регистрация: 27.03.2007
Сообщений: 4
Провел на форуме: 9047
Репутация:
0
|
|
Тестирую локально бота (на apache). Не работает. Где ошибка?
Народ...помогите понять в чем дело... значит поднял на компе апач,залил туда скрипт бота...вроде всё работает....но он находит ошибку как я понял в скрипте....вот заходит в чат,но как только баузер загрузил страницу..выдается ошибка и бот выходит..Мож кто знает в чем дело?
Вот что в браузере пишет. Fatal error: Maximum execution time of 30 seconds exceeded in x:\home\localhost\www\bot.php on line 142
А вот и сам скрипт.
PHP код:
<?
// === Определение функций =================================
// функция выбирает кто куда вышел или пришел =)
// $resp - HTML-код в котором будет производиться поиск (ответ сервера)
// &$who - кто вошел/вышел (арг. по ссылке)
// &$action - комментарий на действие (арг. по ссылке)
// &$code - код действия (арг. по ссылке)
function ComeLeft($resp, &$who, &$action, &$code){ // определить кто
$code = -1; // значение (-1) если ни кто не входил и не выходил
if (strpos($resp, "top.pu(")){
$action = 'приперся к нам )))';
$code = 1; // значение (1) - обнаружен вход чатланина
}
if (strpos($resp, "top.du(")){
$action = 'Ушол эх ну и ладно !';
$code = 2; // значение (2) - зфиксирован выход чатланина
}
if ($code==1 or $code==2){
preg_match("/\('([^']+)/",$resp,$tmp); // определение ника
$who = $tmp[1]; // вынуть ник из массива
}
} // конец функции ComeLeft
// функция выбирает кто что кому и куда сказал =)
// $resp - HTML-код в котором будет производиться поиск (ответ сервера)
// &$who - кто сказал (арг. по ссылке)
// &$to - кому сказал (арг. по ссылке)
// &$mes - что сказал (арг. по ссылке)
// &$code - код действия (арг. по ссылке)
function GetSpeak($resp, &$who, &$to, &$mes, &$code){
// кто сказал
$code = -1; // значение (-1) если ни кто не говорил
// каму сказал и куда
preg_match_all("/\,'([^',]+)/",$resp,$tmp,PREG_PATTERN_ORDER);
// если сказал в общую комнату
if (strlen($tmp[1][1])==0){
$nm = $tmp[1][0];
$pos = strpos($nm, ':');
// если сказал просто так без адресата
if (!$pos) {
$to = '';
$mes = $nm;
$code = 1; // значение (1) - сказано в общую комнату без адресата
}
else { // если сказал кому-то конкретно
$to = substr($nm,0,$pos);
$mes = substr($nm, $pos+2, strlen($nm));
$code = 2; // значение (2) - сказано в общую комнату кому то конкретно
}
}
else{ // если сказал в приват
$to = $tmp[1][0];
$mes = $tmp[1][1];
$code = 3; // значение (3) - сказано в приват
}
if ($code==1 or $code==2 or $code==3){
preg_match("/\ms\('([^']+)/",$resp,$tmp); // определение ника
$who = $tmp[1]; // вынуть ник из массива
}
} // конец функции GetSpeak
// функция отправки POST- и GET-запросов --------------------------------------------
// $method - метод POST или GET (строковая перем.)
// $link - должна содержать полную ссылку (важно для прокси)
// $header - массив строк полей заголовка
// $rdata - строка запроса(Content) для POST-запроса
// $view - true/false - разрешить/запретить вывод запроса и ответа на страницу (не выводить по умолч.)
// $sresp - true/false - получить/игнорировать ответ сервера (получать по умолч.)
// $proxy - true/false - использовать/неисп. прокси (не использовать по умолч.)
// $phost - хост/ip прокси (локалхост по умолч.)
// $pport - порт прокси (81 по умолч.)
function PostGet($nick,$method,$link,$header,$rdata,$view=false,$sresp=true,$proxy=false,$phost="127.0.0.1",$pport=81) {
// перевод в верхний регистр аргумента $method (POST или GET)
$method = strtoupper($method);
// разбивка $link на протокол, хост и скрипт => $array
/* $array[0] => http://moders.ucoz.ru/search.htm?query=Клуб модераторов
[1] => http://
[2] => www.moders.ucoz.ru
[3] => /search.htm?query=Клуб модераторов */
preg_match("/(http:\\/\\/)?([^\\/\r\n]+)([^\r\n]+)/", $link, $array);
// если использовать прокси, то полная ссылка, нет - только скрипт
if ($proxy)
$link = $array[0]; // полная ссылка
else
$link = $array[3]; // только скрипт
// первая строка запроса вида: 'POST/GET $link HTTP /1.0'
$req = $method." ".$link." HTTP/1.0\r\n";
// объединение строк массива $header в одну строку через '\r\n'
$req.= implode("\r\n",$header)."\r\n";
// поле Host
$req.= "Host: ".$array[2]."\r\n";
// если Post-запрос, то вычислить длину запроса(Content) и добавить его,
// в противном случае (Get-запрос) - добавить к заголовку перевод строки '\r\n'
if ($method == "POST") {
$req.= "Content-Length: ".strlen($rdata)."\r\n"; // длина Content
$req.= "\r\n".$rdata."\r\n\r\n"; // добавить Content
}
else
$req.= "\r\n"; // при GET добавить перенос
// если использовать прокси, то применить настроки прокси,
// в противном случае - выделенный из $link хост и 80 порт
if ($proxy){
$h = $phost; // для прокси
$p = $pport;
}
else {
$h = $array[2]; // без прокси
$p = 80;
}
// создание сокета
$sock = fsockopen ($h,$p,$errno,$errstr);
// режим сокета: блокирующий - если получать ответ сервера
// неблокирующий - если игнорировать ответ сервера
socket_set_blocking($sock, $sresp);
// отправка запроса и получение ответа
if (!$sock) { // если ошибка
echo "$errstr ($errno)"; // вывести ошибку
echo $sock; // вывести дискриптор сокета
fclose($sock); // закрыть сокет
exit; // конец
}
else { // без ошибок
fputs($sock, $req); // отправка запроса
if ($sresp) // если получать ответ сервера
while (!feof($sock)) // до конца
$response.= fgets($sock); // читать ответ
else { // без ответа (пятый запрос на IRC)
// --- действия в чате ------
//$enter = file('enter.txt'); // сообщения на вход
//$exit = file('выход.lst'); // и выход
//$hi = file('приветствие.lst'); // приветствие
$list = file('file.txt'); // чтение из файла в массив (используемые сообщения)
//sleep(rand(10,20)); // задержка 7 секунд
SendMessage($to, /* $hi[rand(0,count($hi)-1)] */ 'Всем привет :)', $header[2], $array[2]); // приветствие
while (true == true){ // бесконечный цикл
usleep(100000);
$response = fgets($sock); // читать ответ
if (strlen($response)>0){
// --- реакция на разговор ------
GetSpeak($response, $who, $to, $mes, $Scode); // определит
if ($Scode==2 or $Scode==3){
if ((time()-$u)>=7) {
if ($to==$nick){ // обращение ко мне
$n = rand(0,count($list)-1); // выбрать случайную фразу
$ms = str_replace(" ","+",$list[$n]); // поменять в сообщении все пробелы на '+'
sleep(rand(7,10)); // задержка 7-10 секунд
if ($Scode==2) SendMessage('', $who.': '.$ms, $header[2], $array[2]); // в общую комнату
if ($Scode==3) SendMessage($who, $ms, $header[2], $array[2]); // в личку
$u = time();
}
}
}
// --- реакция на вход или выход ------
ComeLeft($response, $who, $action, $Lcode); // определить
if ($Lcode==1){ // вход
// if ((time()-$u)>=7) {
sleep(rand(3,10));
SendMessage('', $who.': '.$action/* $enter[rand(0,count($enter)-1)] */, $header[2], $array[2]);
// $u = time(); }
}
if ($Lcode==2){ // выход
// if ((time()-$u)>=7) {
sleep(rand(3,10));
SendMessage('', $who.': '.$action/* $exit[rand(0,count($exit)-1)] */, $header[2], $array[2]);
// $u = time(); }
}
}
}
// --- действия в чате ------
}
fclose($sock); // закрыть сокет
}
// вывод запроса и ответа на страницу
/* if ($view) {
echo "<b><<--- $method-запрос -----------</b><br>";
echo str_replace("\r\n","<br>",$req);
echo "<b>>>--- ответ сервера --------</b><br>";
echo str_replace("\r\n","<br>",$response)."<br>";
} */
return $response;
}; // конец функции PostGet
// функция возвращает значение поля Location ----------------------------------------
function GetLocation ($response, $view=false) {
// поиск поля Location
preg_match("/\bLocation:\s[^\r]*/", $response, $temp);
$location = str_replace('Location: ', '',$temp[0]);
// if ($view) echo '<b>-> Location</b><br>'.$location.'<br><br>'; // вывод на страницу
return $location;
}
// функция возвращает найденые поля Set-Cookie одной строкой ------------------------
function GetCookie ($response, $view=false) {
// поиск полей Set-Cookie
preg_match_all('/Set-Cookie:\s([^;]+)/',$response,$temp,PREG_PATTERN_ORDER);
// объединение куков в одну строку, через точку с запятой с пробелом
$i = implode("; ",$temp[1]);
// if ($view) echo '<b>-> Cookie</b><br>'.$i.'<br><br>'; // вывод на страницу
return $i;
}
// функция возвращает список юзеров ----------------------------------------
// $co - поле 'Cookie: ' с куками MRCU и TICKET
// $host - хост без 'http://'
function ListNick($co, $host){
// составление HTTP заголовка запроса
$req = "GET /cgi-xml/list HTTP/1.0\r\n";
$header = $req."Content-Type: text/html\r\n";
$header.= $co."\r\n";
$header.= "Proxy-Connection: keep-alive\r\n";
$header.= "Host: ".$host."\r\n";
$header.= "Accept: text/html, */*\r\n";
$header.= "Referer: http://chat.mail.ru/cgi-xml/chat\r\n";
$header.= "User-Agent: Mozilla/3.0 (compatible; Indy Library)\r\n\r\n";
// вывод запроса и ответа на страницу
// echo "<b>--- GET-запрос на список юзеров ----------></b><br>";
// echo str_replace("\r\n","<br>",$header)."<br><br>";
// создание сокета
$sockMS = fsockopen ($host,80,$errno,$errstr);
socket_set_blocking($sockMS, true); // блокирующий режим
// отправка запроса и получение ответа
if (!$sockMS) { // если ошибка
echo "$errstr ($errno)<br/>\n";
echo $sockMS;
fclose($sockMS);
exit;
}
else { // без ошибок
fputs($sockMS, $header); // отправить запрос
$response = ''; // читать ответ
while (!feof($sockMS)) // до конца
$response.= fgets($sockMS); // читать ответ
fclose($sockMS);
}
// поиск чатлан в ответе сервера и запись их в массив(двухмерный)
preg_match_all("/top.au\('([^']+)/",$response,$tmp,PREG_PATTERN_ORDER); // поиск ников
return $tmp[1]; // возвращает массив юзеров
} // конец функции ListNick
// функция отправки сообщения (можно процедуру) ------------------------------------
function SendMessage($to, $mes, $co, $host){
// составление контента запроса
$rdata = "to=".$to."&message=".$mes."\r\n";
// составление HTTP заголовка запроса
$req = "POST /cgi-xml/post HTTP/1.0\r\n";
$header = $req."Content-Type: application/x-www-form-urlencoded\r\n";
$header.= "Content-Length: ".strlen($rdata)."\r\n";
$header.= $co."\r\n";
$header.= "Proxy-Connection: keep-alive\r\n";
$header.= "Host: ".$host."\r\n";
$header.= "Accept: text/html, */*\r\n";
$header.= "Referer: http://chat.mail.ru/data-xml/keyboard.html\r\n";
$header.= "User-Agent: Mozilla/3.0 (compatible; Indy Library)\r\n";
$header.= "\r\n".$rdata;
// вывод запроса и ответа на страницу
// echo "<b>--- POST-запрос отправки мессаги ----------></b><br>";
// echo str_replace("\r\n","<br>",$header)."<br><br>";
// создание сокета
$sockMS = fsockopen ($host,80,$errno,$errstr);
socket_set_blocking($sockMS, false); // неблокирующий режим
// отправка запроса без получение ответа
if (!$sockMS) {
echo "$errstr ($errno)<br/>\n";
echo $sockMS;
fclose($sockMS);
exit;
}
else {
fputs($sockMS, $header);
fclose($sockMS);
}
} // конец функции SendMessage
// функция составления ника случайным образом -----------------------------
function GenerateNick() {
// гласные буквы
$Galf[1] = 'а'; $Galf[2] = 'е'; $Galf[3] = 'ё'; $Galf[4] = 'и'; $Galf[5] = 'о'; $Galf[6] = 'у';
$Galf[7] = 'ы'; $Galf[8] = 'э'; $Galf[9] = 'ю'; $Galf[10] = 'я';
// согласные буквы (не все :) )
$Salf[1] = 'б'; $Salf[2] = 'в'; $Salf[3] = 'г'; $Salf[4] = 'д'; $Salf[5] = 'ж'; $Salf[6] = 'з'; $Salf[7] = 'й';
$Salf[8] = 'к'; $Salf[9] = 'л'; $Salf[10] = 'м'; $Salf[11] = 'н'; $Salf[12] = 'п'; $Salf[13] = 'р'; $Salf[14] = 'с';
$Salf[15] = 'т'; $Salf[16] = 'ф'; $Salf[17] = 'х'; $Salf[18] = 'ц'; $Salf[19] = 'ч'; $Salf[20] = 'ш'; $Salf[21] = 'щ';
$Salf[22] = 'ь';
// подборка букв
for ($i = 1; $i <= rand(1, 14); $i++) {
$registr = rand(0,1); // регистр буквы
$glas = abs($glas-1); // чередование '1/0'
// выбор буквы
if ($glas)
$bukv = $Galf[rand(1,10)];
else
$bukv = $Salf[rand(1,22)];
// выбор регистра буквы
if ($registr)
$bukv = strtoupper($bukv);
else
$bukv = strtolower($bukv);
$name.= $bukv;
}
return $name; // возвращет сгенерированный ник
} // конец функции GenerateNick
// функция авторизации (5 запросов) -------------------------------------------------
function Auth ($login, $pas, $nick='terminator', $nroom='1:1', $domain='mail.ru') {
// --- Первый POST-запрос -----------------------------------------------------------
// составление контента запроса
$room = substr($nroom,2,strlen($nroom)-2);
$rdata = "page=http://".$nroom[0].".chat.mail.ru/".
"&FailPage=http://chat.mail.ru/data-xml/erlogin.html".
"&enter=1812".
"&mra=".
"&mra_status=".
"&Login=".$login.
"&Domain=".$domain.
"&Password=".$pas.
"&nick=".$nick.
"&nickcolor=".rand(0,12).
"&textcolor=".rand(0,12).
"&roomleft=".
"&room=".$room;
// составление куков
$cookie = "Login=".$login."; ".
"Domain=".$domain."; ".
"nick=".$nick."; ".
"nickcolor=0; ".
"textcolor=0; ".
"room=".$room."; ".
"silent=0; ".
"signore=0";
// составление HTTP заголовка запроса
$header[1]= "Content-Type: application/x-www-form-urlencoded";
$header[2]= "Cookie: ".$cookie;
$header[3]= "Proxy-Connection: keep-alive";
$header[5]= "Accept: text/html, */*";
$header[6]= "Referer: my.chat.mail.ru";
$header[7]= "User-Agent: Mozilla/3.0 (compatible; Indy Library)";
// отправка запроса
$response = PostGet($nick, "post", "http://my.chat.mail.ru/cgi-bin/auth", $header, $rdata, true);
// --- Второй GET-запрос ------------------------------------------------------------
// редактирование полей HTTP заголовка
$header[1]= "Content-Type: text/html";
$cookie2 = GetCookie($response,true);
$header[2].= "; ".$cookie2;
// отправка запроса
$response = PostGet($nick, "get", GetLocation($response,true), $header, "", true);
// --- Третий GET-запрос ------------------------------------------------------------
// отправка запроса
$response = PostGet($nick, "get", GetLocation($response,true), $header, "", true);
// --- Четвертый GET-запрос ---------------------------------------------------------
// добавление новых куков MRCU и TICKET
$cookie3 = GetCookie($response,true);
$header[2]= "Cookie: ".$cookie3;
$header[6]= "Referer: chat.mail.ru";
// отправка запроса
$response = PostGet($nick, "get", "http://".$nroom[0].".chat.mail.ru/cgi-xml/chat", $header, "", true);
// --- Пятый GET-запрос -------------------------------------------------------------
// добавление новых куков MRCU и TICKET
$header[2]= "Cookie: ".$cookie3;
$header[6]= "Referer: ".$nroom[0].".chat.mail.ru";
// отправка запроса
$response = PostGet($nick, "get", "http://".$nroom[0].".chat.mail.ru/cgi-xml/irc", $header, "", true, false);
return $header[2];
}
// ================================================
// --- Данные для авторизации -------------------------------------------------------
$login = 'abcrew';
$pas = '*****';
$domain = 'mail.ru';
$nick = 'КОЛЯ_СЕКСИ';
$nroom = '1:1432504'; // Эротика"
// авторизация (возвращает куки последнего запроса - могут пригодится)
$hs = auth($login, $pas, /*GenerateNick()*/$nick, $nroom, $domain);
?>
Последний раз редактировалось FQziT; 29.03.2007 в 18:29..
Причина: юзай тег php, чтобы пост не растягивался....
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|