Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Опять socket'ы. Вопрос самым искушенным.
 
 автор: neudor   (22.03.2006 в 19:56)   письмо автору
 
 

У меня опять socket'ы. Сразу к делу.

Предположим, я делаю демона, который будет брутфорсить форму - т.е. посылать заголовки, меняя определенным образом значение переменных в POST или GET запросах. Это так, для примера.
Смысл именно в том, что мне нужно послать на один и тот же сервер:80 много однотипных пакетов.

Вопрос. Мне обязательно для этого каждый раз разрывать и по новой устанавливать соединение с сокетом? Или можно как-то пихнуть следующий заголовок в уже открытый? Например, как-нибудь сместив указатель на начало (как в файле, fseek() )?

Или это все же невозможно?

   
 
 автор: JIEXA   (22.03.2006 в 22:09)   письмо автору
 
   для: neudor   (22.03.2006 в 19:56)
 

Помойму каждый раз надо открывать и закрывать соединение...

   
 
 автор: cheops   (22.03.2006 в 23:09)   письмо автору
 
   для: neudor   (22.03.2006 в 19:56)
 

/*Чего-то у вас задача какая-то не здоровая... */ Как получите ответ от сервера - можете отправлять новый запрос в этом же сеансе.

   
 
 автор: neudor   (23.03.2006 в 20:37)   письмо автору
 
   для: cheops   (22.03.2006 в 23:09)
 

Прошу прощения за такой длинный код.

Это вот не работает должным образом.
<?php
set_time_limit
(0);

//Открываем socket
$socket fsockopen('www.74.ru'80);
if (!
$socket)
{
    echo 
"Unable to connect to target server\r\n";
    die(
"Socket Error =(");
}

//Запрос 1
$s_query="GET / HTTP/1.0\n";
$s_query.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\n";
$s_query.="Accept-Language: ru\n";
$s_query.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n";
$s_query.="Host: 74.ru\n";
$s_query.="Proxy-Connection: Keep-Alive\n\n";

fputs($socket$s_query);

//Ответ 1
$html_source="";
while (!
feof($socket))
{
   
$html_source .= fgets($socket256); // получаем данные из сокета
}

//Запись ответа в файл 1
$handle=fopen("01.txt""wt");
fwrite($handle$html_source);
fclose($handle);
echo 
"File 01.txt done<br><br>";

//Запрос 2
$s_query="GET /job HTTP/1.0\n";
$s_query.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\n";
$s_query.="Referer: http://softtime.ru\n";
$s_query.="Accept-Language: ru\n";
$s_query.="Proxy-Connection: Keep-Alive\n";
$s_query.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n";
$s_query.="Host: 74.ru\n\n";

fputs($socket$s_query);

//Ответ 2
$html_source="";
while (!
feof($socket))
{
    
$html_source .= fgets($socket256); // получаем данные из сокета
}

//Запись ответа в файл 2
$handle=fopen("02.txt""wt");
fwrite($handle$html_source);
fclose($handle);
echo 
"File 02.txt done<br><br>";

//конец работы с socket'ом
fclose($socket);

?>

Файл 02.txt пустой. А вот если перед посылкой второго заголовка закрыть сокет и открыть по новой, то все получится. Или я что-то упустил?
А, господин cheops?
->можете отправлять новый запрос в этом же сеансе
я чего-то не сделал или не так понял?

   
 
 автор: XPraptor   (24.03.2006 в 12:26)   письмо автору
 
   для: neudor   (23.03.2006 в 20:37)
 

HTTP 1.0 не поддерживает Keep Alive только HTTP 1.1.
В принципе уже почти все сервера поддерживают HTTP 1.1 но еще встречаются ленивые, которые не переставили апачю.

А вот прокси, процентов на 80 не поддерживают Keep Alive, поэтому разрывай конект и снова конектся к проксям.

   
 
 автор: neudor   (24.03.2006 в 22:30)   письмо автору
 
   для: XPraptor   (24.03.2006 в 12:26)
 

Это значит, если я переставлю Апач и в заголовках поменяю HTTP 1.0 на HTTP 1.1, то будет работать и мой вариант?
Или нужно что-то ещё?

   
 
 автор: cheops   (25.03.2006 в 13:41)   письмо автору
 
   для: neudor   (24.03.2006 в 22:30)
 

В принципе да нужно только поменять $s_query="GET /job HTTP/1.0\n"; на $s_query="GET /job HTTP/1.1\n", а зачем Apache переустанавливать? Правда если скрипт будет работать под Windows скорость заметно упадёт при переходе от 1.0 к 1.1.

   
 
 автор: neudor   (26.03.2006 в 12:43)   письмо автору
 
   для: cheops   (25.03.2006 в 13:41)
 

Ну, я поменял, но файл 02 так и не заполнился.
Попробовал послать только второй заголовок - все нормально, ответ пришел. Может, шняга где-то в другом месте притаилась?
Кстати, у меня Apache/1.3.12 - не в этом ли дело?

И еще, работать медленнее не стало. По-моему, даже наоборот...

   
 
 автор: cheops   (26.03.2006 в 15:21)   письмо автору
 
   для: neudor   (26.03.2006 в 12:43)
 

Странно, вообще никакой крамолы в первом запросе вроде нет...

   
 
 автор: neudor   (26.03.2006 в 21:50)   письмо автору
 
   для: cheops   (26.03.2006 в 15:21)
 

>Странно, вообще никакой крамолы в первом запросе вроде
>нет...
Не совсем понял, что вы хотели сказать...

   
 
 автор: cheops   (27.03.2006 в 02:08)   письмо автору
 
   для: neudor   (26.03.2006 в 21:50)
 

Я лишь хотел сказать, что тоже пока не понимаю в чём может быть дело - надо подумать...

   
 
 автор: Trianon   (27.03.2006 в 10:22)   письмо автору
 
   для: cheops   (27.03.2006 в 02:08)
 

А по-моему, надо честно учитывать Content-Length, а не опираться на feof.

   
 
 автор: XPraptor   (27.03.2006 в 13:53)   письмо автору
 
   для: Trianon   (27.03.2006 в 10:22)
 

Вы же конектитись к проксе как я понял? Прокси очень редко поддерживают незакрытое соединение, попробуйте законектится к какому нить хосту напрямую, без прокси и посмотреть заполнится ли второй файл.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования