|
|
|
| У меня опять socket'ы. Сразу к делу.
Предположим, я делаю демона, который будет брутфорсить форму - т.е. посылать заголовки, меняя определенным образом значение переменных в POST или GET запросах. Это так, для примера.
Смысл именно в том, что мне нужно послать на один и тот же сервер:80 много однотипных пакетов.
Вопрос. Мне обязательно для этого каждый раз разрывать и по новой устанавливать соединение с сокетом? Или можно как-то пихнуть следующий заголовок в уже открытый? Например, как-нибудь сместив указатель на начало (как в файле, fseek() )?
Или это все же невозможно? | |
|
|
|
|
|
|
|
для: neudor
(22.03.2006 в 19:56)
| | Помойму каждый раз надо открывать и закрывать соединение... | |
|
|
|
|
|
|
|
для: neudor
(22.03.2006 в 19:56)
| | /*Чего-то у вас задача какая-то не здоровая... */ Как получите ответ от сервера - можете отправлять новый запрос в этом же сеансе. | |
|
|
|
|
|
|
|
для: 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($socket, 256); // получаем данные из сокета
}
//Запись ответа в файл 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($socket, 256); // получаем данные из сокета
}
//Запись ответа в файл 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?
->можете отправлять новый запрос в этом же сеансе
я чего-то не сделал или не так понял? | |
|
|
|
|
|
|
|
для: neudor
(23.03.2006 в 20:37)
| | HTTP 1.0 не поддерживает Keep Alive только HTTP 1.1.
В принципе уже почти все сервера поддерживают HTTP 1.1 но еще встречаются ленивые, которые не переставили апачю.
А вот прокси, процентов на 80 не поддерживают Keep Alive, поэтому разрывай конект и снова конектся к проксям. | |
|
|
|
|
|
|
|
для: XPraptor
(24.03.2006 в 12:26)
| | Это значит, если я переставлю Апач и в заголовках поменяю HTTP 1.0 на HTTP 1.1, то будет работать и мой вариант?
Или нужно что-то ещё? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: cheops
(25.03.2006 в 13:41)
| | Ну, я поменял, но файл 02 так и не заполнился.
Попробовал послать только второй заголовок - все нормально, ответ пришел. Может, шняга где-то в другом месте притаилась?
Кстати, у меня Apache/1.3.12 - не в этом ли дело?
И еще, работать медленнее не стало. По-моему, даже наоборот... | |
|
|
|
|
|
|
|
для: neudor
(26.03.2006 в 12:43)
| | Странно, вообще никакой крамолы в первом запросе вроде нет... | |
|
|
|
|
|
|
|
для: cheops
(26.03.2006 в 15:21)
| | >Странно, вообще никакой крамолы в первом запросе вроде
>нет...
Не совсем понял, что вы хотели сказать... | |
|
|
|
|
|
|
|
для: neudor
(26.03.2006 в 21:50)
| | Я лишь хотел сказать, что тоже пока не понимаю в чём может быть дело - надо подумать... | |
|
|
|
|
|
|
|
для: cheops
(27.03.2006 в 02:08)
| | А по-моему, надо честно учитывать Content-Length, а не опираться на feof. | |
|
|
|
|
|
|
|
для: Trianon
(27.03.2006 в 10:22)
| | Вы же конектитись к проксе как я понял? Прокси очень редко поддерживают незакрытое соединение, попробуйте законектится к какому нить хосту напрямую, без прокси и посмотреть заполнится ли второй файл. | |
|
|
|