Protocolos / Serialização binária

decodificador de frames WebSocketentenda cada limite

Cole bytes hexadecimais começando pelo cabeçalho. Os exemplos mostram máscara, fragmentação e captura incompleta.

decodificador de frames WebSocket

Bytes do frame (hex)

A partir do cabeçalho: 81 05 48 65 6c 6c 6f. Bytes inteiros com espaços, vírgulas ou dois-pontos; 0x por byte.

Resultado

Digite bytes ou escolha um exemplo.

Tudo é processado nesta aba. As entradas não são enviadas nem salvas.

Opções

Digite bytes ou escolha um exemplo.

Um trecho de log não precisa corresponder a uma mensagem inteira. Este decodificador de frames WebSocket mantém o início de cada quadro visível, inclusive um ping entre fragmentos de texto. Compare as posições com a captura para descobrir onde seu parser passou a ler os bytes errados.

Eventos message do navegador normalmente já entregam dados sem o cabeçalho de quadro. A entrada aqui deve ser o fluxo bruto depois do upgrade HTTP. Uma string da aplicação ou um pacote TCP inteiro não representa os mesmos bytes esperados pelo formato.

Por que usar este decodificador de frames WebSocket

Acompanhar a sequência completa

O decodificador de frames WebSocket avança pelo tamanho do cabeçalho e pelo payload declarado. Se um quadro posterior estiver incompleto, os anteriores continuam disponíveis. A exportação é bloqueada para evitar que uma leitura parcial seja tratada como relatório completo.

Um fluxo de bytes separado em quadros de dados preserva um pequeno controle entre dois fragmentos.

Ver o efeito da máscara

O mascaramento WebSocket repete uma chave de quatro bytes usando XOR. Os dados transmitidos e recuperados aparecem separados. O ciclo reinicia com a chave de cada quadro; remover a máscara altera o conteúdo, mas não o comprimento.

Quatro bytes coloridos da chave se repetem sobre o payload e geram outra linha de bytes sem máscara.

Três cuidados ao preparar os bytes

01

Separar o sentido da transmissão

A direção escolhida verifica a máscara obrigatória do cliente ou sua ausência no servidor. Sem direção, apenas essa verificação é ignorada. A ferramenta não separa um diálogo misturado: forneça quadros de um mesmo sentido, na ordem original.

02

Distinguir prévia e truncamento

A prévia mostra até 256 bytes por payload. Dados truncados têm menos bytes do que o cabeçalho declara e geram erro com posição e quantidades. A prévia curta não reduz o relatório; uma falha estrutural impede a exportação.

03

Controlar a atualização

O modo automático aguarda 350 ms depois de uma edição. Desligue-o para usar o botão ou Ctrl/Cmd+Enter. Alterar bytes ou direção desativa imediatamente a exportação antiga. Exemplo e Limpar mostram a substituição antes de aplicar, com uma opção de desfazer que recupera entrada e resultado.

Detalhes que explicam o fluxo

Ler os campos de comprimento

O valor curto de 7 bits e as extensões de 16 ou 64 bits são lidos em ordem de rede. Comprimentos grandes são comparados ao limite como inteiros exatos antes de alocar memória. Formas desnecessariamente longas permanecem visíveis com aviso.

Isolar os quadros de controle

Close, ping e pong aparecem separados dos dados. Em close, dois bytes formam o código e os demais o motivo UTF-8. Fragmentação de controles, comprimentos excessivos e códigos inadequados são sinalizados, sem afirmar que a conexão terminou normalmente.

Interpretar texto com cuidado

Um quadro de texto completo e isolado usa UTF-8 estrito. Bytes binários legíveis continuam sendo apenas uma prévia. Fragmentos e extensões não são mostrados como mensagens completas; caracteres cortados no limite da prévia não são exibidos pela metade.

Preservar a posição da falha

Cabeçalho, extensão de comprimento, chave ou payload incompleto interrompe a leitura com offset em bytes e linha-coluna. RSV e opcodes reservados continuam disponíveis como avisos quando ainda é possível determinar os limites estruturais.

O que o relatório não pode concluir

Somente entrada hexadecimal
Aceita sequência com quantidade par de dígitos ou bytes completos separados por espaços, vírgulas ou dois-pontos. 0x vale para um único byte. Base64, sequências de bits, arquivos e colunas de endereço de hexdump ficam de fora. O WebSocket hexadecimal deve começar no cabeçalho.
Sem remontar mensagens
São indicados início, continuação, fim, primeiro fragmento ausente e mensagem inacabada. Controles não encerram uma sequência ativa. Os payloads não são unidos e UTF-8 não é validado entre fragmentos; uma leitura bem-sucedida não valida toda a mensagem.
Sem adivinhar extensões
RSV não informa sozinho o que foi negociado. Não há descompressão permessage-deflate, descriptografia TLS nem identificação automática de JSON, Socket.IO ou Protobuf. A máscara XOR é reversível e não oferece sigilo.
Limites de processamento
A entrada aceita até 1 MiB de bytes decodificados, 6 MiB de caracteres e 1000 quadros WebSocket. O payload WebSocket declarado também tem limite de 1 MiB. A tela mostra 50 quadros por lote; o JSON mantém todo o conteúdo permitido e o texto disponível além da prévia de 256 bytes.
Nenhuma correção silenciosa
Avisos de protocolo podem ser exportados; erros de estrutura bloqueiam o relatório. A ferramenta não corrige comprimentos ou máscaras. A verificação de códigos de fechamento não confirma registro da aplicação nem conclusão do handshake entre as duas pontas.

Dúvidas sobre o decodificador de frames WebSocket

Por que o payload do cliente é mascarado?

O cliente aplica uma chave de quatro bytes para impedir que conteúdo controlado produza bytes capazes de enganar intermediários. O mesmo XOR repetido recupera os dados. A chave está no próprio quadro, portanto não é criptografia. Pelo protocolo base, o servidor envia sem máscara.

O que significam os comprimentos 126 e 127?

São marcadores para um comprimento de dois ou oito bytes seguintes, em big-endian; não são o tamanho real do payload. Na forma de 64 bits, o bit mais alto deve ser zero. Cabeçalho e chave de quatro bytes não entram nesse comprimento.

Posso colar vários frames de uma vez?

Sim, desde que sejam da mesma direção e estejam na ordem transmitida. Payloads vazios e controles intercalados continuam separados. Se um quadro estiver incompleto, complete ou ajuste a captura antes de exportar o relatório.

Como os frames de fechamento são interpretados?

Um payload vazio não contém código. Nos demais, os dois primeiros bytes são o status e o restante o motivo UTF-8. Um único byte, códigos proibidos ou motivo inválido geram avisos. A ferramenta não inventa fechamento normal para um quadro vazio.

A ferramenta também decodifica o handshake HTTP do WebSocket?

Não. Pedidos e respostas HTTP Upgrade vêm antes deste formato. Extraia primeiro os quadros brutos posteriores. A ferramenta não remove camadas TCP/IP ou TLS, não abre uma conexão e não valida o handshake do servidor.

Encontrou um erro no cálculo ou na validação?

Voltar aos bytes capturados

Use o decodificador de frames WebSocket para comparar a chave e os offsets e isolar o primeiro quadro incompleto antes de alterar o parser da aplicação.