Компьютерный муравейник Петя, Волк и Никита Хакер, номер #073, стр. 073-056-3 Управляющая система Как ты, наверное, уже догадался, необходимо написать несколько функций, которые будут вызываться в зависимости от параметра action, например вот так: if($_GET[action]==”register” && isset($_GET[key])) { register_dll($_GET[key]); } Всего таких функций должно быть как минимум три: для регистрации нового клиента, для получения работы и возвращения результата вычислений. Как они будут работать? Тут целесообразно еще ко всему прочему собирать некоторую статистику, поэтому я решил использовать в этой системе для удобства сервер БД MySQL. Когда клиент регистрируется, функция просто добавляет новую запись в таблицу с dll’ками. Когда вызывается функция получения работы, сценарий добавляет запись в таблицу с активными процессами перебора, чтобы ты знал, над каким диапазоном в данный момент работает каждый компьютер. И наконец, когда вызывается процедура получения нового задания, скрипт должен сгенерировать для клиента диапазон перебираемых паролей. Тут, кстати, возможно еще вот что сделать. Поскольку ты будешь располагать сведениями о том, как быстро каждый из клиентов справляется с определенным диапазоном, можно генерировать каждому модулю индивидуальное количество проверяемых вариантов - ведь одно дело, если пользователь работает на дохлом четырехсотом целероне, и совсем другое, если на 3 гГц интеловском камне. Я приведу примерный, поскипанный и прокомментированный, код функции, которая отдает модулю текущее задание. Вот он: Функция получения задания function getwork($key) { /* $arr – строка с подбираемыми символами, $k - ее длина, $M – число вариантов, отдаваемых клиенту за раз, $wo – массив с записью об активном хэше. */ $start=$wo[c_start]; //Начальная комбинация $l=StrLen($start); if($l==1) { $La=pow($k,$l);} else { $La=pow($k,$l)-pow($k,$l-1)*(strpos($arr,$start[0])+1); } //$La – число возможных вариантов без переноса разряда /* Тут порезано. Если осталось вариантов меньше, чем надо отдать пользователю, отдаем все, что есть в пределах текущего количества разрядов, но сдвигаем разряд для следующего клиента. Если же вариантов больше, вычисляем символ, где надо остановиться. */ mysql_query("update hashes set c_start=’$start’ where hash=’$wo[hash]’"); //Обновляем табличку, исправляя начальную комбинацию для следующего клиента |