Здравствуйте, долго думал, в какую тему это написать. Пишу флудер на PHP для форума на PHP. Капча-солвер уже есть, но и я никак не могу получить прямую ссылку на на саму капчу. За ее отрисовку отвечает captcha.php. Прямое обращение к www. ... /captcha.php через браузер приводит к блокировке IP на час (видимо, защита от DDOS). Есть система обновления капчи - яваскриптом меняется src картинки на "captcha.php?" + Math.random(); (Math.random(); - псевдослучайное число от 0.0 до 0.1). Переход по адресу captcha.php?0.74653984762364762 (любое случайное число) даёт пустую страницу. Я пытался отследить входящие и исходящие пакеты с помощью HTTPAnalyzer4 и скорректировать их с помощью InetCrack 1.39. Получилось, что пакеты, отправляемые на captcha.php при полном обновлении страницы с капчей и пакеты, отправляемые при прямом обращении к captcha.php, полностью аналогичны, но в первом случает капча отображается, ответ сервера - (Status-Line):HTTP/1.1 200 OK Server:nginx Date:Sun, 03 May 2009 10:23:59 GMT Content-Type:image/jpeg Connection:keep-alive X-Powered-ByHP/5.2.5 Expires:Thu, 19 Nov 1981 08:52:00 GMT Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma:no-cache Content-Length:2602 а во втором капчи нет и ответ - (Status-Line):HTTP/1.1 200 OK Server:nginx Date:Sun, 03 May 2009 10:26:26 GMT Content-Type:text/html; charset=utf-8 Connection:keep-alive X-Powered-ByHP/5.2.5 Content-Length:0 Я совсем недавно начал программировать на PHP, с перловой капчей никогда таких проблем не было, так что я мог упустить что-нибудь элементарное(хотя вопрос мало относится к программированию). В общем, нужна прямая ссылка на капчу.
alex.k12 Покажи запросы, которые отсылаешь ты, и отсылает бразуер. Проблема скорее всего в отсутствующих/лишних заголовках, отсутствие печенек от реги
Это запрос при обновлении яваскриптом, капча отображается: (Request-Line):GET /captcha.php?0.4754704378147092 HTTP/1.1 Host:www.xxx.ru User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 Accept:image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language:ru,en-us;q=0.7,en;q=0.3 Accept-Encoding:gzip,deflate Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive:300 Connection:keep-alive Referer:http://www.xxx.ru/thread/ Cookie: ptime=1241296071153; postpassword=GnBUUhUE; __utma=258285515.2829712575002160600.1241289110.1241297769.1241345446.3; __utmz=258285515.1241289110.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=258285515; PHPSESSID=r8gnmi48baunol1g8hr6c4nbe7; __utmb=258285515.5.10.1241345446 Это запрос при обновлении яваскриптом, но уже с локальной (сохраненной) страницы, капча не отображается: (Request-Line):GET /captcha.php?0.08763163143809893 HTTP/1.1 Host:www.xxx.ru User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 Accept:image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language:ru,en-us;q=0.7,en;q=0.3 Accept-Encoding:gzip,deflate Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive:300 Connection:keep-alive Cookie: ptime=1241296071153; postpassword=GnBUUhUE; __utma=258285515.2829712575002160600.1241289110.1241297769.1241345446.3; __utmz=258285515.1241289110.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=258285515; PHPSESSID=r8gnmi48baunol1g8hr6c4nbe7; __utmb=258285515.5.10.1241345446 Как видно, разница только в реферере, который я потом меняю в InetCrack (и в ответе все равно не получаю капчу), и в случайно сгенерированном числе.
Хм, в InetCrack отсылаю следующий запрос: GET http://www.0chan.ru/captcha.php?0.74863849026476354 HTTP/1.1 Host:www.0chan.ru User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 Accept:image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language:ru,en-us;q=0.7,en;q=0.3 Accept-Encoding:gzip,deflate Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive:300 Connection:keep-alive Referer:http://www.0chan.ru/a/ Cookie:kustyle_site=Photon; kustyle=Photon; ptime=1241357131244; postpassword=GnBUUhUE; __utma=258285515.2829712575002160600.1241289110.1241345446.1241349907.4; __utmz=258285515.1241289110.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=258285515; PHPSESSID=r8gnmi48baunol1g8hr6c4nbe7; __utmb=258285515.6.10.1241349907 Получаю ответ: HTTP/1.1 200 OK Server=nginx Date=Sun, 03 May 2009 11:37:49 GMT Content-Type=text/html; charset=utf-8 Connection=keep-alive X-Powered-By=PHP/5.2.5 Content-Length=0 Реферер есть, капчи нет. Gifts, как/с помощью чего ты передаешь?
alex.k12 PHP: $a = array("GET /captcha.php?0.74863849026476354 HTTP/1.1", "Host: www.0chan.ru", "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv: 1.9.0.10) Gecko/2009042316 Firefox/3.0.10", "Accept: image/png,image/*;q=0.8,*/*;q=0.5", "Accept-Language: ru,en-us;q=0.7,en;q=0.3", "Accept-Encoding: gzip,deflate", "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7", "Keep-Alive: 300", "Connection: keep-alive", "Referer: http://www.0chan.ru/", "Cookie: kustyle_site=Photon; kustyle=Photon; ptime=1241357131244; postpassword=GnBUUhUE; __utma=258285515.2829712575002160600.1241289110.12 41345446.1241349907.4; __utmz=258285515.1241289110.1.1.utmcsr=(direct)|ut mccn=(direct)|utmcmd=(none); __utmc=258285515; PHPSESSID=r8gnmi48baunol1g8hr6c4nbe7; __utmb=258285515.6.10.1241349907", "\r\n"); $f = fsockopen('www.0chan.ru',80) or die('Can\'t connect'); fwrite($f,implode("\r\n",$a)); while ($in = fread($f,4096)) {echo $in;} fclose($f);
Warning: fsockopen() [function.fsockopen]: unable to connect to www.0chan.ru:80 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. ) in C:\www\index.php on line 14 Дело в настройках сервера, наверное.
Дело в InetCracker'e. Не знаю почему, но тот же самый запрос в другой программе исправно выдает капчу, всё в порядке. Спасибо за помощь. Теперь другой вопрос, теперь уже по PHP. Перерыл все настройки, а ошибка всё та же. Гугл не помог. Gifts, если не сложно, выложи настройки PHP и Apache (если ты его используешь). Вот мои настройки http://rapidshare.com/files/228705261/info.rar.html
alex.k12 Проблема скорее всего не в ПХП, сокеты у вас включены. Возможно фаер блочит соединение? Попробуйте банально: PHP: echo file_get_contents ('http://www.0chan.ru/captcha.php?0.74863849026476354'); Или попробуйте включить курл (в php.ini найдите строчку ";extension=php_curl.dll" и убрать точку с запятой) И попробовать этот скрипт: PHP: <? function post($url='',$content='',$referer='') { GLOBAL $cookie,$verbose; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,0); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); if ($cookie) curl_setopt($ch, CURLOPT_COOKIE, implode('; ',$cookie)); if ($content) {curl_setopt($ch, CURLOPT_POST301, 1); curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $content);} else {curl_setopt($ch, CURLOPT_POST, 0);} if ($referer) curl_setopt($ch, CURLOPT_REFERER, $referer); $ss=curl_exec($ch); curl_close($ch); if (preg_match_all('#^Set-Cookie: (([^;=]+)=([^;=\n\r]+))#mi',$ss,$cook)) { if ($tmpcookie=array_combine($cook[2],$cook[1])) $cookie=(array)$tmpcookie + (array)$cookie; } $ss=preg_replace('~^.*?\r\n\r\n~si','',$ss); return $ss; } echo post('http://www.0chan.ru/captcha.php?0.74863849026476354', null, 'http://www.0chan.ru/'); Копия скрипта тут: http://deadone.info/chan.txt
C курлом всё работает замечательно. Интересно только почему с fsockopen() проблемы. echo file_get_contents ('http://www.0chan.ru/captcha.php?0.74863849026476354') выдает пустую страницу, как при прямом обращении http://www.0chan.ru/captcha.php?0.74863849026476354 из браузера, т.е. без реферера никак, нужен запрос.