|
|
|
|
|
|
1.1. Принципы работы системы ICQ (клиент-сервер) Служба общения ICQ состоит из двух частей - клиента и сервера. Соединение между ними устанавливается при помощи стека протоколов TCP/IP. Используются UDP соединение и TCP соединение. Связь между сервером и клиентом осуществляется при помощи UDP пакетов по протоколу компании Mirabilis Vx, где x - номер версии протокола. Между собой (передача сообщений, файлов, ссылок) клиенты работают по протоколу TCP. 1.2. Связь клиент-сервер В университетской службе общения ICQ в основном используется протокол компании Мирабилис V3 (а также протоколы v5 и OSCAR v7/v8/v9) и в дальнейшем речь будет идти именно о нем. В настоящее время последней версией протокола является OSCAR/V9 - информацию о нем можно получить здесь. Информацию по устаревшей версии v5 (а также о версиях 2,4) вы можете найти в следующих документах, взятых на сервере разработчиков клонов icq (http://www.mscom.ru/~sophocles/icq/): icq091.txt (eng), icqcurs.htm (rus), v5-encryption.txt (eng). А также фрагмент текста программы, расшифровывающей UDP пакет версии V4: decode-v4.c V-протокол состоит из 2-ух частей: ответы сервера и запросы клиента. В целом схема выглядит следующим образом: При запуске клиент посылает UDP пакет, содержащий номер пользователя, пароль, IP адрес и порт TCP а также информацию о версии клиента, сервер в ответ высылает пакет подтверждения. Если все данные, указанные в пакете, верны, то сервером создается пакет успешной регистрации. Кроме того всем пользователям, у которых пользователь с таким номером есть в списке высылается уведомление о регистрации в сети ICQ. Далее клиент должен передать серверу свой список пользователей. После того как это сделано, сервер будет сообщать обо всех изменениях статуса этих пользователей. Клиент ДОЛЖЕН каждые 45 секунд высылать пакет "PING" сигнализируя о присутствии в сети. На каждый полученный пакет ДОЛЖЕН высылаться пакет подтверждения. Если сервер не получает подтверждения, то через некоторое время он повторяет передачу. Также обстоит дело и с клиентом. После установления соединения требуется лишь регулярно отсылать пакет присутствия в сети. 1.3. Формат пакета UDP протокола V3
Форматы пакетов клиента и сервера совпадают. 1.4. Команды (запросы) клиента (список не полный)
E8 03 - Запрос на регистрацию в сети ICQ
0a 00 - Подтверждение приема пакета
4с 04 - Запрос на получение отложенных системных сообщений
04 06 - Закончить посылку отложенных системных сообщений
28 05 - Неизвестный пакет (отсылается клиентом нерегулярно)
06 04 - Передать на сервер список контактов (contact list)
2e 04 - Уведомление сервера о присутствии в сети (ping)
38 07 - Послать системное текстовое сообщение
(обычно при отключении)
fa 05 - Запросить информацию о пользователе
0e 01 - Послать системное сообщение online версия (сообщение
посланное через сервер; ссылка, посланная через сервер,
уведомление о добавлении в список контактов, авторизация)
c8 05 - Поиск пользователя в базе данных сервера.
3c 05 - Добавление пользователя в список контактов.
d8 04 - Сменить свой статус.
5e 01 - Неизвестный пакет.
aa 05 - Получить адрес/порт пользователя.
1.4.1. (E8 03) Запрос на регистрацию в сети ICQ xx xx 00 00 // Порт клиента (2 байта расширяются до 4) xx xx // Длина пароля (включая 00) Пароль + 00 // Пароль + 00 (ASCIIZ переменной длинны) 7A 00 02 00 // Константа - версия клиента xx xx xx xx // IP адрес клиента 04 // Заполнитель xx xx xx xx // Статус пользователя 02 00 00 00 // Константа 00 00 00 00 // Константа 03 00 7A 00 // Версия клиента. 1.4.2. (0a 00) Подтверждение приема пакета (полностью весь пакет) 03 00 // Версия протокола xx xx // Номер подтверждаемого пакета 00 00 // Константа xx xx xx xx // UIN Пользователя 00 00 00 00 // Резерв 1.4.3. (4c 04) Запрос на получение отложенных системных сообщений Поле данных отсутствует. 1.4.4. (04 06) Закончить посылку отложенных системных сообщений Поле данных отсутствует. 1.4.5. (2e 04) Уведомление сервера о присутствии в сети (ping) Поле данных отсутствует (должна посылаться на сервер каждые 45 секунд При задержке сервер принудительно переводит пользователя в режим offline. Для смены статуса требуется повторная регистрация). 1.4.6. (28 05) Неизвестный пакет (отсылается клиентом нерегулярно) 01 или ff // Назначение неизвестно 1.4.7. (38 07) Послать системное текстовое сообщение Нет данных. 1.4.8. (fa 05) Запросить информацию о пользователе xx xx xx xx // Вероятно случайное значение. xx xx xx xx // UIN пользователя по которому // запрашивается информация. В ответ сервер посылает 4 пакета. В первом содержится базовая информация. В остальных расширенная - Адрес, Работа и пр. 1.4.9. (0e 01) Послать системное сообщение, online версия Эта команда используется для посылки системных сообщений (таких как сигнал о добавлении пользователя в список контактов), тестовых сообщений и ссылок через сервер (при невозможности прямого соединения). В пакете содержится двубайтовая поле для распознавания различных видов команды: 0x0001 - Сообщение, посылаемое через сервер. 0x0004 - Ссылка, посылаемая через сервер. 0x0006 - Запрос на авторизацию. 0x0008 - Авторизация пользователя. Формат поля данных - общий для всех подкоманд: 3b 04 // Неизвестно - константа 00 00 // Резерв xx xx // Подкоманда (см выше) При посылке сообщений и ссылок следующие поля такие: xx xx // Длина сообщения xx*n // Само сообщение При авторизации или запросе - следующие 4 байта - UIN пользователя. 1.4.10. (3c 05) Добавление пользователя в список контактов Информирует сервер о добавлении пользователя в список контактов. Поле данных содержит UIN добавляемого пользователя. (4 байта) 1.4.11. (d8 04) Сменить свой статус Поле данных содержит новый статус (4 байта) возможные варианты статуса такие: 00 00 00 00 - online (пользователь доступен) 01 00 00 00 - away (пользователь отошел от компьютера) 11 00 00 00 - DND (не беспокоить) 00 01 00 00 - Invisible (пользователь в скрытом режиме) 1.4.12. (aa 05) Получить адрес/порт пользователя Поле данных содержит UIN этого пользователя. (4 байта) 1.4.13. (c8 05) Поиск пользователя в базе данных сервера ff xx 00 xx // Вид поиска. xx xx // Длина строки (включая 0) xx*n // Строка ASCIIZ (именно по ней // и ведется поиск) Вид поиска: во втором байте указывается тип поиска. Варианты такие: 0x00 Поиск по UIN (строка в поле данных представляет собой искомый номер) 0x01 Поиск по NickName (прозвище) 0x02 Поиск по First Name (Имя) 0x03 Поиск по Last Name (Фамилия) 0x04 Поиск по Email (почтовый адрес) 0x05 Поиск по Age (возраст) 0x06 Поиск по Bisness City (город по месту работы) 0x07 Поиск по B State (штат) 0x08 Поиск по B Country (страна) 0x09 Поиск по названию компании 0x0a Поиск по должности 0x0b Поиск по депертаменту 0x0c Поиск по Home City (город по месту проживания) 0x0d Поиск по H State (штат) 0x0e Поиск по H Country (страна) Режим поиска: 4-ый байт (как использовать данную строку для поиска): 0x00 Режим вхождения (содержит ли имеющаяся строка искомую строку) 0x01 Режим невхождения (обратный) 0x02 Режим равенства (Is) 0x03 Режим неравенства (Isn't) 0x04 Текущая строка начинается с искомой строки 0x05 Текущая строка кончается на искомую строку В ответ на запрос сервер отсылает столько пакетов с базовой информацией о пользователе сколько пользователей будет найдено. 1.5. Ответы сервера (список не полный)
Что такое ICQ | Новости | Получение/установка | Регистрация
Предпочтительное разрешение: 800х600 |
|||||||||||||||
|
|
||||||||||||||||
|
Состояние сервера: Дата запуска: Время запуска: Всего пользователей: Online пользователей: Порт сервера: |
Unknown Unknown 528 23 4000 |
|||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
Список администраторов Стр. администраторов |
|
|||||||||||||||
|
|
||||||||||||||||
|
Изменить свои данные Разрегистрироваться |
|
|||||||||||||||