Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #80, АВГУСТ 2005 г.

Вертикаль власти

eto'o

Хакер, номер #080, стр. 080-124-4


Вообще говоря, такие вещи, как, например, пароли от различных сервисов - это данные, которые сами по себе имеют некоторую структуру: они состоят из логина, пароля и, собственно, узла аутентификации. Соответственно, по большому счету, для каждого такого типа нужно было создавать отдельную структуру с разделенными полями, однако я предпочел для универсальности привести эти данные к атомарному виду, разделив поля символом двоеточия и склеив их в строку.

[учет ботов]

Но, довольно лирики, перейдем к программированию :). Давай для затравки напишем функцию, которая будет производить регистрацию нового бота в системе. В общем-то, тут все предельно ясно и сводится к составлению несложного sql-запроса:

[функция регистрации нового бота в системе]

function RegBot($id,$ip,&$extend) {

$re=mysql_query("insert into bots values('$id', '$ip', '$extend')");

return($re);

}

Вызов этой функции осуществляется при условии, что содержимое всех переменных корректное (id - число, ip - адрес ipv4, extand - корректный xml-документ). Написать такую проверку - дело несложное, приводить код я здесь не буду, лучше подсмотри его на нашем диске (функция checktype).

[команды]

Теперь о том, каким образом ботам будут выдаваться команды. Как я уже говорил, наша система будет поддерживать, что называется, индивидуальный подход: работничков можно будет организовывать в группы и каждой группе назначать свое задание. Причем создание групп может осуществляться как при помощи явного перечисления входящих туда ботов, так и при помощи некоторого фильтра. Для дальнейшего изложения потребуется еще одна таблица:

[таблица wrk_grp]

CREATE TABLE WRK_GRP(

BOT_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

W_ID INT NOT NULL);

Эта таблица будет разбивать множество ботов на так называемые «команды», для каждой из которых можно будет организовывать собственное задание. Добавление бота в команду по идентификатору - дело плевое, сводится к простому составлению запроса. Куда интереснее выглядит формирование списка команды по фильтру, среди параметров которого просто обязаны быть такие поля, как «страна», «штат», «город» и т.д. Здесь мы сталкиваемся с проблемой классификации ботов по географическому признаку и чуть позже я расскажу тебе, как такая проблема решается.

Что касается выдачи задания, то это реализуется чрезвычайно просто. Создается еще одна таблица с «заданиями», куда вбиваются пары «идентификатор_группы» - «выполняемая команда». Когда бот обращается к скрипту, сценарий смотрит, в какой группе работает зомби, делая SELECT W_ID FROM WRK_GRP WHERE BOT_ID=$id. Затем аналогичным запросом из таблицы с заданиями выбирается команда для этого бота и помещается в стандартный поток вывода. Теперь расскажу о том, как можно определить географическое положение бота.

[урок географии]

Как ты уже понял, при добавлении в таблицу bots информации о новом боте, записывается и ip-адрес хоста. Напрашивается вопрос: а можно ли, и, если можно, то с какой точностью, определить местоположение клиента?

Назад на стр. 080-124-3  Содержание  Вперед на стр. 080-124-5