Опубликован: 10.10.2007 | Уровень: специалист | Доступ: платный
Лекция 6:

ICQ, WHOIS и Finger

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Аннотация: В данной лекции рассматриваются протоколы ICQ, WHOIS и Finger. Приведены базовые понятия и определения, связанные с этими протоколами, а также принципы взаимодействия с другими протоколами

ICQ — система обмена сообщениями

Протокол ICQ обеспечивает обмен сообщениями в режимах клиент-сервер и клиент-клиент. Идея данного протокола принадлежит израильтянам Яру Голдфингеру (Yair Goldfinger), Арику Ванди (Arik Vandi), Сефи Визигеру (Sefi Visiger) и Амнону Амиру (Amnon Amir). Именно эти люди создали в 1996 году компанию Mirabilis для предоставления клиентам нового вида обмена сообщениями. Протокол ICQ конкурировал с несколькими другими схожими решениями и победил.

Данный протокол позволяет пользователям Интернет легко находить друг друга и столь же легко общаться. Вспомним, что для общения через электронную почту нужно знать почтовый адрес партнера. В ICQ предусмотрена возможность обмена сообщениями более чем с одним партнером (каждому из участников на экране выделяется индивидуальное окно). Для транспортировки данных могут использоваться протоколы UDP (версии 1-5) или TCP (версии выше 6). Те, кто работал с UNIX, возможно, пользовались системами обмена сообщениями TALK или PHONE. Эти системы похожи на ICQ, но они предполагают знание LOG-имен партнеров.

Через четыре месяца после основания фирмы Mirabilis появилась первая версия реализации ICQ ("I seek you"). В июле 1998 года по инициативе America Online приемником Mirabilis Ltd. стала компания ICQ Inc. (см. также www.mirabilis.com или www.megasecurity.org).

Каждый пользователь ICQ имеет cписок людей, с которыми он/она хочет общаться. Этот список может увеличиваться. Для каждого пользователя из контактного списка отображается его статус.

Протокол ICQ позволяет передавать не только сообщения, но и файлы. К сожалению, существует несколько модификаций стандарта. Кроме того, следует учитывать тот факт, что протокол ICQ не является публичным (права на него принадлежат компании Mirabilis). По этой причине приводимые описания нельзя считать официальными, и излагаются они здесь исключительно для образовательных целей. На рис. 6.1 показана общая схема взаимодействия пользователей с сервером и друг с другом.

Схема взаимодействия пользователей в ICQ

Рис. 6.1. Схема взаимодействия пользователей в ICQ

Первоначально пользователи устанавливают соединение с ICQ -сервером. После авторизации и выбора партнера пользователи могут установить соединение непосредственно между собой, минуя сервер (например, клиенты, отмеченные цифрами 1 и 3). Пользователи могут быть подключенными к серверу (режим on-line) и отключенными (2, 6, 9 и 11; режим off-line). На рис. 6.2 показан формат пакета ICQv4.

Формат кадра для ICQv4

Рис. 6.2. Формат кадра для ICQv4

На рис. 6.3 показан формат кадра версии ICQ 5.

Формат кадра для ICQv5

Рис. 6.3. Формат кадра для ICQv5

Первые два байта характеризуют версию протокола. Далее после четырех нулевых октетов следует уникальный идентификатор клиента UIN. После идентификатора сессии следует код команды. В данном конкретном случае код команды для разрыва соединения — 0xC2EE (обратный порядок байтов). Поля ID-сессии и порядковые номера (SEQ_NUM1,SEQ_NUM2) служат для целей безопасности.

Контакт с партнером устанавливается через TCP-соединение. Все остальные коммуникации осуществляются с использованием UDP-дейтограмм, посылаемых ICQ -серверу. Получение всех UDP-дейтограмм должны подтверждаться получателем. Если в течение 10 секунд не пришло подтверждение, происходит повторная передача. После 6 неудачных повторных передач посылается сообщение B_MESSAGE_ACK. Процедура повторяется 2 раза. Если отклика не получено, ICQ клиент считается отключенным.

Прежде чем коммуникация между пользователями станет возможной, клиент должен зарегистрироваться в сервере. В процессе авторизации клиент посылает серверу данные о себе, включая свой IP-адрес, TCP-порт, зарезервированный для ICQ, пароль пользователя и контактный список. С этого момента клиент считает себя подключенным, и будет посылать регулярно серверу сообщения ‘keep alive’ (еще жив). Эти сообщения выполняют две функции: позволяют клиенту быть уверенным в том, что он имеет доступ к серверу, а серверу — знать, что клиент все еще подключен. По умолчанию клиент будет подключен к серверу через UDP-порт 4000. Такие функции, как отправка сообщений пользователям offline, получение информации о пользователе, поиск пользователей в глобальном каталоге ICQ и изменение пароля, осуществляются путем посылки UDP-дейтограмм ICQ -серверу. Все эти пакеты следуют простому шаблону, включая UIN отправителя, специальный код, определяющий функцию, которую должен осуществить сервер, и опционные параметры.

Когда пользователь посылает сообщение /URL/ и т.д. другому пользователю, который подключен к серверу, клиент ICQ установит TCP-соединение непосредственно с этим пользователем, и пошлет сообщение, используя формат, сходный с используемым при отправке UDP пакетов. После того, как сообщение послано, TCP-соединение не прерывается, а сохраняется открытым и используется для последующего обмена сообщениями. Соединение закрывается, когда любой из пользователей разрывает ICQ -соединение.

Все текстовые строки начинаются с двухбайтового поля длины, указывающего число байт в строке. Любые строки в данном протоколе завершаются кодом 00. При чтении пакетов может применяться любая информация для определения длины строки, но при отправке следует использовать как поле длины, так и завершающие два нулевых байта. Все строки работают в кодировке MS Windows, т.e. символьном наборе ISO Latin-1, а текстовые строки завершаются CR/LF. (Не все строки могут содержать разрывы строк.)

Поле VERSION присутствует во всех ICQ -пакетах и идентифицирует пакет как ICQ -сообщение. Поле SEQ_NUM содержит порядковый номер пакета. Все пакеты должны иметь уникальный порядковый номер (если это только не повторная передача). Это делается для того, чтобы исключить путаницу, если UDP-пакет потерян или задублирован. Заметим, что сервер и клиент имеют разную нумерацию, так что SEQ_NUM = 3 пакета, посланного сервером, отличается от SEQ_NUM = 3 пакета, посланного клиентом. Заметим также, что сервер начинает нумерацию с 00 00, а клиент — с 01 00.

Коммуникации между двумя клиентами с использованием TCP (режим узел-узел)

Когда пользователь хочет послать сообщение, URL и т.д., другому пользователю, он проверяет, установлено ли уже с ним соединение. Если установлено, тогда будет использоваться это соединение. Если нет, пользователь проверяет IP-адрес и порт удаленного пользователя (информация посылается сервером, когда удаленный пользователь авторизован) и осуществляет соединение с этим адресом. Обычно номера портов лежат в диапазоне 1200-1300 (десятичные). Когда новое соединение установлено, должно быть послано сообщение CHANNEL_INIT. С этого момента всякий раз, когда пользователь хочет послать сообщение, отсылается CHANNEL_MESSAGE. Получение всех посланных сообщений должно быть подтверждено адресатом, используя CHANNEL_ACK.

TCP-обмен идентичен коммуникации с привлечением UDP. Каждый пакет должен содержать длину пакета (не включая счетчик длины). Код длины занимает два октета. Большинство сообщений содержат UIN отправителя.

Действующая версия протокола имеет уязвимости. Аутентификация осуществляется без использования шифрования и т.д., — понятно, что по мере совершенствования протокола эти уязвимости будут устранены.

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Антон Шавергин
Антон Шавергин
Россия
Степан Крупа
Степан Крупа
Украина, Львів, СЗШ №65, 2012