Pular para o conteúdo
Todos os conceitos

Protocolo binário

Quando cliente e servidor trocam mensagens em bytes, o próprio código do cliente ensina o formato, e você pode montar as mensagens na mão.

Nem toda conversa na rede é texto. Muitos serviços trocam mensagens binárias: sequências de bytes com um formato combinado, em geral um byte de comando seguido de dados. No navegador, isso costuma passar por um WebSocket, um canal que fica aberto entre as duas pontas para mandar mensagens quando quiser, em texto ou em bytes.

Para falar com um serviço desses você precisa do formato das mensagens. A boa notícia: num app web, o cliente roda no seu navegador, então o código JavaScript dele chega inteiro ao seu computador e costuma mostrar o formato. Procure no código onde ele monta os bytes, por exemplo:

ws.send(new Uint8Array([0xF0, 0x13, 0x37, 0x00, 0x02, 0xF7]));
1 · o código do cliente chega ao seu navegador ws.send(new Uint8Array([0xF0, 0x13, 0x37, 0x00, 0x02, 0xF7])); WebSocket Servidor 2 · o formato F0 13 37 00 02 F7 comando dados fim $ websocat ou um script 3 · os bytes que você escolher, sem a interface
O JavaScript do cliente chega ao seu navegador e mostra o formato da mensagem, um byte de comando seguido de dados; com ele, você manda ao servidor os bytes que escolher, sem a interface.

Daí dá para repetir e variar a mensagem por conta própria, sem a interface pronta. Dois caminhos comuns:

  • websocat, um cliente de WebSocket de linha de comando;
  • um script (Python com a biblioteca websockets, por exemplo) que conecta e envia os bytes que você escolher.

Vale também conhecer o protocolo de verdade por trás: se o serviço imita um padrão (MIDI, Modbus, um formato de jogo), mensagens padrão desse protocolo podem funcionar mesmo que o cliente não as use. Ler o cliente para aprender o protocolo e então conversar direto com o servidor é uma técnica central em desafios de web e de redes.

Aparece nestes desafios