Вертикаль власти eto'o Хакер, номер #080, стр. 080-124-3 Начнем с самого главного - с регистрации ботов и выдаче команды для выполнения. Первым делом создадим таблицу bots, которая имеет следующую структуру: [структура таблицы bots] CREATE TABLE BOTS ( ID INT NOT NULL PRIMARY KEY, IP VARCHAR(15), EXTENDED VARCHAR(300) ); Здесь ID - это уникальный ключ, который генерируется самим ботом при установке в системе. При каждом обращении к скрипту бот передает через GET-запрос параметр id, в котором находится этот идентификатор. Соответственно, при каждом обращении сценарий должен проверять, есть ли в таблице bots запись с таким идентификатором и, если нет, добавлять такую строчку, фактически регистрируя нового бота. Нужно так же понимать, что тип INT, который я указал в этой таблице для поля ID, может быть заменен на любой другой исходя из того, как работает бот: к примеру, если генерируемый ключ - это шестнадцатеричное число, или произвольная строка, нужно поменять INT на VARCHAR. Идем дальше. В поле IP записывается адрес внешнего сетевого интерфейса пользователя. Само собой, что если юзер работает через локальную сеть с «серой» адресацией, сюда будет записываться внешний ip-адрес его шлюза. Помимо переменной id, бот так же может передавать сценарию набор некоторых свойств пользовательского компьютера: это может быть, к примеру, информация о внутренних сетевых интерфейсах, или найденные в системе пароли, или информация об используемом железе, что угодно. Обрати внимание, что здесь почти нет ограничений на количество и, главное, структуру свойств бота. Ведь в разных системах могут налагаться различные требования и бот может иметь различные свойства. Однако эта свобода наказуема: информация о свойствах бота должна быть записана в строгом формате XML-документа. Я приведу пример такого описания, чтобы тебе было понятнее: [пример XML-документа со свойствами бота] <info> <param name="email" symbolic="Пароли от e-mail"> host.ru:login:c00lpa55worD </param> <param name="freq" symbolic="Частота процессора"> 2000 </param> <param name="netbios" symbolic="Netbios-имя"> station </param> <param name="external" symbolic="Внешний IP"> 217.10.41.56 </param> </info> На самом деле, эта фишка с XML была придумана, чтобы обеспечить универсальность и расширяемость системе. Ведь для разных ботов набор свойств может быть различным, и если бы я тупо в таблице сделал статичное число постоянных полей, то переделка такой системы заключалась бы в полной перестройке таблицы и скриптов. А в нашем случае ничего переделывать не нужно, нужно лишь соблюдать установленный формат записываемых данных и обеспечить одинаковую структуру информации для всех ботов. При этом особо следует отметить, что система автоматически позволит производить сортировку и поиск по содержимому каждого элемента <param>, для расшифровки данных (фактически, для подписи колонок таблицы) будет использоваться содержимое свойства symbolic, а параметр name будет использован внутри сценария при выборке информации. |