Сами eMule пакеты делятся на две группы: унаследованные от eDonkey и дополни тельные eMule пакеты. Сегодня только на eDonkey или на eMule пакетах никакой клиент работать не может — сервера и клиенты уже используют микс из eDonkey и eMule пакетах.
Протокол eMule поддерживает пакеты TCP (коммуникации между клиентом и сервером а также между клиентами, самый большой трафик идет на базе TCP пакетов) и UDP(поддержка сети: пинг серверов, проверка существования файла у пира и т.п.).
Используемые порядок записи чисел в пакетах является little-endian.
Каждый пакет начинается с идентификатора протокола, размером в один байт:
Далее следует размер пакета в байтах как целое число на 4 байта, в размер пакета не входит идентификатор пакета, сам размер и код операции.
Код операции имеет размер в один байт и используется для идентификации назначении пакета.
Далее следует сам контент пакета в зависимости от кода операции пакета.
Пример:
Протокол eDonkey(0xE3), размер пакета 3 байта, код операции 0х01 и сам контент пакета (0х01 0х02 0х03).
Сжатый пакет отличается от других пакетов тем что контент сжатый ZLib алгоритмом, сжимаются пакеты только если получатель поддерживает сжатие и если пакет имеет больше 900 байт и если сжатый пакет имеет размер меньше чем начальный пакет.
UDP пакеты имеют более простую структуру, у них нет поля с размером пакета.
Первый байт идентифицирует протокол:
Далее идёт код операции размером в один байт и сам контент пакета.
Пример:
Протокол пакета eMule(0xC5), код операции 0х20 и сам контент пакета 0xA0 0xB0 0xC0.
Протокол eMule поддерживает пакеты TCP (коммуникации между клиентом и сервером а также между клиентами, самый большой трафик идет на базе TCP пакетов) и UDP(поддержка сети: пинг серверов, проверка существования файла у пира и т.п.).
Используемые порядок записи чисел в пакетах является little-endian.
TCP пакеты
Каждый пакет начинается с идентификатора протокола, размером в один байт:
- 0xE3 — eDonkey пакет
- 0xC5 — eMule пакет
- 0xD4 — сжатый пакет
Далее следует размер пакета в байтах как целое число на 4 байта, в размер пакета не входит идентификатор пакета, сам размер и код операции.
Код операции имеет размер в один байт и используется для идентификации назначении пакета.
Далее следует сам контент пакета в зависимости от кода операции пакета.
Пример:
0xE3 0x00 0x00 0x00 0x03 0x01 0x01 0x02 0x03
Протокол eDonkey(0xE3), размер пакета 3 байта, код операции 0х01 и сам контент пакета (0х01 0х02 0х03).
Сжатый пакет отличается от других пакетов тем что контент сжатый ZLib алгоритмом, сжимаются пакеты только если получатель поддерживает сжатие и если пакет имеет больше 900 байт и если сжатый пакет имеет размер меньше чем начальный пакет.
UDP пакеты
UDP пакеты имеют более простую структуру, у них нет поля с размером пакета.
Первый байт идентифицирует протокол:
- 0xE3 — eDonkey пакет
- 0xC5 — eMule пакет
Далее идёт код операции размером в один байт и сам контент пакета.
Пример:
0xC5 0x20 0xA0 0xB0 0xC0
Протокол пакета eMule(0xC5), код операции 0х20 и сам контент пакета 0xA0 0xB0 0xC0.