Протоколы / Бинарная сериализация

декодер фреймов WebSocketпроверьте границы

Вставьте hex-байты начиная с заголовка фрейма. Примеры показывают маску, фрагменты и обрезанный ввод.

декодер фреймов WebSocket

Байты фрейма (hex)

С заголовка: 81 05 48 65 6c 6c 6f. Полные байты через пробел, запятую или двоеточие; 0x для одного байта.

Результат

Введите байты или выберите пример.

Всё обрабатывается в этой вкладке. Ввод не отправляется и не сохраняется.

Параметры

Введите байты или выберите пример.

Один блок журнала не обязательно равен сообщению. Декодер фреймов WebSocket сохраняет начало каждого фрейма, чтобы ping между фрагментами не оказался частью текста. Сравнение смещений с захватом помогает найти место, где собственный парсер начал читать не тот байт.

Событие message в браузере обычно содержит данные уже без заголовка. Здесь нужны исходные байты после HTTP Upgrade, начиная с самого фрейма. Строка приложения или целый TCP-пакет относятся к другому уровню и не подходят в качестве прямой замены.

Зачем нужен декодер фреймов WebSocket

Проследить всю последовательность

Декодер фреймов WebSocket переходит к следующему заголовку по длине текущего заголовка и нагрузки. Если следующий фрейм обрезан, предыдущие полные фреймы остаются видны. Экспорт блокируется, чтобы частичный разбор не выглядел полным отчётом.

Поток байтов разделён на фреймы данных, между двумя фрагментами остаётся небольшой управляющий фрейм.

Сравнить байты до и после маски

Маскирование WebSocket повторяет ключ из четырёх байтов с помощью XOR. Переданные и восстановленные байты показаны отдельно. Для каждого фрейма цикл начинается с его собственного ключа; длина нагрузки при снятии маски не меняется.

Четыре цветных байта ключа повторяются над нагрузкой и создают второй ряд байтов без маски.

Подготовить захват к чтению

01

Выберите одно направление

Настройка проверяет обязательную маску клиента и отсутствие маски у сервера. Без направления пропускается только эта проверка. Смешанный диалог автоматически не разделяется: вставляйте данные одной стороны в исходном порядке.

02

Отличайте просмотр от обрыва

Для нагрузки показываются первые 256 байтов. Это ограничение экрана. Если байтов меньше объявленного размера, возникает структурная ошибка с позицией и количеством. Короткий просмотр не сокращает отчёт, а обрыв запрещает экспорт.

03

Управляйте моментом разбора

Автоматический режим ждёт 350 мс после изменения. Выключите его, чтобы использовать кнопку или Ctrl/Cmd+Enter. Изменение байтов или направления сразу блокирует старый экспорт. Пример и очистка сначала показывают замену; отмена возвращает и ввод, и результат.

Поля, которые объясняют данные

Три формы длины

Короткое значение и расширения на 16 или 64 бита читаются в сетевом порядке байтов. Большие объявленные числа точно сравниваются с лимитом до выделения памяти. Избыточно длинное кодирование сохраняется с предупреждением.

Отдельные управляющие фреймы

Close, ping и pong отделены от данных. В close первые два байта дают код, остальные — причину в UTF-8. Фрагментация управления, слишком большая длина и неверные коды отмечаются, но это не подтверждает успешное завершение соединения.

Текст с учётом контекста

Полный одиночный текстовый фрейм проходит строгую проверку UTF-8. Читаемые бинарные фреймы остаются лишь предварительным просмотром. Фрагменты и расширения не выдаются за целое сообщение, а символ на границе просмотра не выводится наполовину.

Позиция структурного сбоя

Нехватка заголовка, расширенной длины, ключа или нагрузки останавливает разбор с байтовым смещением, строкой и столбцом. RSV и резервные opcode сохраняются как предупреждения, если границы байтов ещё можно определить.

Область применения и ограничения

Только шестнадцатеричные байты
Допускаются чётные последовательности hex или полные байты через пробелы, запятые и двоеточия. Префикс 0x относится к одному байту. Base64, битовые строки, файлы и адресные колонки hexdump не импортируются.
Без сборки сообщений
Отмечаются начало, продолжение, конец, отсутствие первого фрагмента и незавершённость. Управляющие фреймы не заканчивают активную цепочку. Нагрузки не объединяются, UTF-8 между фрагментами не проверяется. Успешный разбор не доказывает корректность всего сообщения.
Без догадок о расширениях
Одних битов RSV недостаточно для восстановления согласованных параметров. Нет распаковки permessage-deflate, расшифровки TLS или автоматического определения JSON, Socket.IO и Protobuf. Обратимая XOR-маска не обеспечивает секретность.
Ограниченный объём
Лимиты: 1 МиБ декодированных байтов, 6 МиБ символов, 1000 фреймов. Объявленная полезная нагрузка WebSocket также не может превышать 1 МиБ. Экран раскрывает по 50 фреймов, а JSON содержит полные допустимые данные и доступный текст за пределами просмотра в 256 байтов.
Без исправления исходных данных
Предупреждения протокола разрешено экспортировать, структурные ошибки блокируют отчёт. Байты и длины не исправляются автоматически. Проверка кодов close не подтверждает регистрацию приложения или завершение обмена закрытия с обеих сторон.

Декодер фреймов WebSocket: вопросы

Зачем маскируется полезная нагрузка клиента?

Клиент изменяет передаваемые байты четырёхбайтовым ключом, чтобы управляемые данные не вводили промежуточные узлы в заблуждение. Тот же циклический XOR восстанавливает нагрузку. Ключ находится в самом фрейме, поэтому это не шифрование. По базовому протоколу сервер не маскирует фреймы.

Что означают значения длины 126 и 127?

Это признаки длины в следующих двух или восьми байтах, а не буквальные размеры. Значения читаются как big-endian; старший бит 64-битной формы должен быть нулём. Заголовок и четыре байта ключа в длину нагрузки не входят.

Можно ли вставить несколько фреймов сразу?

Да, если они принадлежат одному направлению и идут в порядке передачи. Пустые нагрузки и вставленные управляющие фреймы отображаются отдельно. При неполном фрейме дополните или исправьте захват перед экспортом отчёта.

Как интерпретируются фреймы закрытия?

У пустой нагрузки нет кода. Иначе первые два байта задают статус, а оставшиеся — причину UTF-8. Один байт, запрещённый код или неверная кодировка вызывают предупреждение. Пустой close не дополняется выдуманным кодом нормального завершения.

Декодирует ли инструмент HTTP-рукопожатие WebSocket?

Нет. Запросы и ответы HTTP Upgrade предшествуют этому формату. Сначала выделите следующие за ними исходные фреймы. Инструмент не удаляет оболочки TCP/IP и TLS, не подключается к серверу и не проверяет его handshake.

Нашли ошибку вычисления или проверки?

Вернуться к захваченным байтам

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