Пакеты протокола PRP Примечание Длина пакета (Length

advertisement
Пакеты протокола PRP
Примечание
Длина пакета (Length) указана с учетом длины поля подписи (KeyedHash, 16 bytes) и
длины полей заголовка (PType, OutCounter, InCounter, Length и Reserved, 8 bytes). В C++реализации библиотек протокола в поле Length содержится длина поля данных (Data), то
есть отличается на 24 байта от общей длины пакета.
Формат пакета
Название
PType
OutCounter
Размер в байтах
1
2
InCounter
2
Length
Reserved
Data
KeyedHash
Length = 24 bytes
2
1
Зависит от типа пакета
16
0x80 Запрос на подключение
Имя java-класса: PrpPacketConnectionRequest
Содержимое поля Data:
Название
Размер в байтах
Origin ID
4 bytes
Destination ID
4 bytes
Random number
Login name
4 bytes
12 bytes
Зашифрованный DES-ом DH 136 bytes
Pub Key
Length = 184 bytes
0x81 Запрос на восстановление подключения
Имя java-класса: PrpPacketReconnectionRequest
Содержимое поля Data:
Название
Размер в байтах
Origin ID
4
Destination ID
4
Random number
4
Описание
Тип пакета
Порядковый номер
исходящего пакета
Порядковый номер
последнего полученного
пакета
Общая длина пакета
Данные
Поле подписи пакета
Описание
Идентификатор конечной
точки инициатора этого
соединения
Идентификатор конечной
точки с которой нужно
создать соединение
Случайное число
Имя пользователя в службе.
Если меньше 12 символов,
остаток заполняется
пробелами
Публичный ключ ДиффиХелмана
Описание
Идентификатор конечной
точки инициатора этого
соединения.
Идентификатор конечной
точки с которой нужно
создать соединение.
Равно полю Random number
CON#
3
DH Pub Key
128
+ 1 из преыдущего ответа на
подключение или
восстановление.
Уникальный номер
соединения.
Публичный ключ ДиффиХелмана.
Length = 167 bytes
Между Random number и CON# стоит 8-битовое поле NULL (предположительно 0-й байт)
0x82 Ответ на подключение
Имя java-класса: PrpPacketConnectionResponse
Содержимое поля Data:
Название
Размер в байтах
Origin ID
4
Destination ID
4
Random number
4
RET
1
CON#
3
DH Pub Key
128
Описание
Идентификатор конечной
точки инициатора этого
соединения. Либо
повторяется из запроса,
либо содержит выданный
ID.
Идентификатор конечной
точки с которой нужно
создать соединение.
Повторяется из запроса.
Равно полю Random number
+ 1 из предыдущего ответа
на подключение или
восстановление.
Содержит код ошибки или
0x00, если соединение
успешно установлено
Уникальный номер
соединения
Публичный ключ ДиффиХелмана
Length = 168 bytes
0x83 Ответ на восстановление (deprecated?)
0x84 HELLO-запрос (для keep-alive)
Имя java-класса: PrpPacketHelloQuery
Length = 24 bytes
Поле Data пусто
0x85 HELLO-ответ (not realized)
Содержимое поля Data:
Название
Размер в байтах
HelloOutCounter
2
Length = 26 bytes
0x86 Пакет уведомляет о потере собеседника
Описание
Поле OutCounter из пакета
hello-запроса
Имя java-класса: PrpPacketPartyGone
Length = 24 bytes
Поле Data пусто
0x87 BAD-Packet – говорит о нарушении последовательности пакетов (not realized)
Содержимое поля Data:
Название
Размер в байтах
Описание
Counter
4
Поле Counter из последнего
корректного пакета
Length = 28 bytes
Видимо, Counter это OutCounter
0x88 Пакет, содержащий служебное сообщение (not realized)
Содержимое поля Data:
Название
Размер в байтах
Описание
RET
1
Тип сообщения:
0x0 – OK
0x1 – ERROR
0x2 - FATAL ERROR
Text
ASCII строка с
Cообщение пользователю
завершающим нулем
Length > 25 bytes
0x8A Инициация смены ключа
Имя java-класса: PrpPacketKeyChangeInitiation
Содержимое поля Data:
Название
Размер в байтах
DH Pub Key
128
Описание
Публичный ключ ДиффиХеллмана.
Length = 152 bytes
0x8B Пакет подтверждения смены ключа (not realized)
0xFF Передача данных
Имя java-класса: PrpPacketSendData
Содержимое поля Data:
Название
Размер в байтах
Data
Length > 24 bytes
Описание
Данные
Download