Где находится Маскированная полезная нагрузка в кадре данных - PullRequest
0 голосов
/ 25 апреля 2019

Мы знаем, что в фрейме данных веб-сокетов выглядит следующее:
Fin - RSV - OPOCDE - MASK KEY-PAYLOAD LENGTH- (EXTESION ЕСЛИ ЕСТЬ) -MASK
теперь в случае получения сообщения, котороеконечно, замаскирован, где я могу найти замаскированное сообщение именно в полезной нагрузке?
Если это так, то, как правило, это правда, как мне точно прочитать часть замаскированной полезной нагрузки?

1 Ответ

0 голосов
/ 26 апреля 2019

Предполагая, что вы пишете анализатор WebSocket, вам нужно будет проверить MSB (старший значащий бит) индикатора длины (байтовый индекс 1 в буфере с нулевым индексом).

Это указывается в RFC в бите 8 (при условии порядка байтов в сети).

Я написал синтаксический анализатор C WebSockets для платформы facil.io . Глядя на то, как длина и маскировка являются ручками, может помочь. Это в значительной степени составляет:

uint8_t has_mask = (((uint8_t *)bytes)[1] >> 7) & 1;

Вы можете заметить индикатор маскирования собирается из 8-го бита (MSB) второго байта в буфере .

Сама маска всегда является первыми 4 байтами в полезной нагрузке (хотя, технически, они не являются частью полезной нагрузки). i.e.:

uint8_t mask_len = has_mask * 4; // == has_mask << 2

Следующим шагом будет XOR для остальной части полезной нагрузки с маской, если она там есть.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...