ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Чаты
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Тестирую локально бота (на apache). Не работает. Где ошибка?
  #1  
Старый 29.03.2007, 15:26
Аватар для ЮЮ2
ЮЮ2
Новичок
Регистрация: 27.03.2007
Сообщений: 4
Провел на форуме:
9047

Репутация: 0
Question Тестирую локально бота (на 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==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+2strlen($nm));
$code 2// значение (2) - сказано в общую комнату кому то конкретно
}
}
else{ 
// если сказал в приват
$to $tmp[1][0];
$mes $tmp[1][1];
$code 3// значение (3) - сказано в приват
}
if (
$code==or $code==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==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==2SendMessage(''$who.': '.$ms$header[2], $array[2]); // в общую комнату
 
if ($Scode==3SendMessage($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($sockMStrue); // блокирующий режим
  // отправка запроса и получение ответа
  
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($sockMSfalse); // неблокирующий режим
  // отправка запроса без получение ответа
  
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(114); $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$rdatatrue);

  
// --- Второй 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""truefalse);
  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, чтобы пост не растягивался....
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки Windows 2 SVipeR Windows 9 02.03.2009 19:28
Ошибки Windows dinar_007 Windows 19 01.07.2007 13:32
Настройка бота вида eggdrop MicRO *nix 0 11.12.2006 03:26
Вводный курс по созданию и настройке Irc ботов KPOT_f!nd Чужие Статьи 0 15.10.2006 02:17
Начальная настройка Apache Grinder Чужие Статьи 7 21.06.2006 21:24



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ