📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Redes. Recomendado revisar antes de começar.

🌐 Sniffer de Pacotes de Rede & Chat em Tempo Real com WebSockets

v1.0 — Redes de Computadores, Pilha TCP/IP, Raw Sockets e WebSockets RFC 6455

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Engenheiro de Redes / Especialista em Protocolos. Entender redes não é apenas decorar portas e IPs. Um engenheiro experiente sabe inspecionar os bytes de um cabeçalho IP, entender a negociação de 3 vias (Three-Way Handshake SYN/ACK) do TCP e construir servidores em tempo real com WebSockets.

—`

🎯 Objetivo & Escopo do Projeto

Construir um Analisador de Tráfego de Rede (Sniffer de Pacotes) com decodificação de cabeçalhos Ethernet/IP/TCP e um Servidor de Chat Multiusuário em Tempo Real utilizando o protocolo WebSocket (RFC 6455) para troca de mensagens bidirecional com latência sub-milissegundo.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Administrador de Redes & NOC)

“Precisamos de duas ferramentas para o laboratório: um sniffer de rede didático que capture pacotes passando pela interface, extraia o IP de origem, IP de destino, porta e protocolo (TCP/UDP), e um servidor de chat em tempo real onde múltiplos clientes conectados via navegador conversem instantaneamente através de WebSockets persistentes sem precisar de polling HTTP.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Capturar pacotes de rede e decodificar os 20 bytes do cabeçalho IPv4 (TTL, IPs, Protocolo). “extraia IP de origem, destino e protocolo”
RF02 Funcional Realizar o handshake WebSocket (RFC 6455) convertendo requisição HTTP (Upgrade: websocket). “WebSockets persistentes sem polling”
RF03 Funcional Fazer broadcast de mensagens recebidas para todos os clientes conectados ao chat. “múltiplos clientes conversem instantaneamente”
RNF01 Não-Funcional Decodificação binária de pacotes utilizando struct.unpack de alta velocidade. Análise de Rede
RNF02 Não-Funcional Suporte a concorrência assíncrona com asyncio / Goroutines. Baixa Latência

—`

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como analista de segurança, quero inspecionar os pacotes capturados e identificar o tráfego suspeito. Alta
US02 Como usuário, quero enviar uma mensagem no chat e vê-la aparecer na tela de todos os outros usuários na mesma fração de segundo. Alta

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-sniffer-websocket-chat

# Executar o servidor de chat WebSocket
python websocket_server.py

—`

🛠️ Fase 4 — Implementação Guiada (websocket_server.py)

import asyncio
import websockets

CONEXOES_ATIVAS = set()

async def chat_handler(websocket):
    CONEXOES_ATIVAS.add(websocket)
    try:
        async for mensagem in websocket:
            # Broadcast para todos os outros participantes conectados
            broadcast_tasks = [
                ws.send(f"[Usuario]: {mensagem}")
                for ws in CONEXOES_ATIVAS if ws != websocket
            ]
            if broadcast_tasks:
                await asyncio.gather(*broadcast_tasks)
    finally:
        CONEXOES_ATIVAS.remove(websocket)

async def main():
    async with websockets.serve(chat_handler, "localhost", 8765):
        print("Servidor WebSocket de Chat ativo na porta 8765...")
        await asyncio.Future()

if __name__ == "__main__":
    asyncio.run(main())

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd redes_01_sniffer_websocket_chat

2. Execute a aplicação ou testes

# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/redes_01_sniffer_websocket_chat`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Asserções

# Testar conexao WebSocket interativa com wscat
npx wscat -c ws://localhost:8765

—`

✅ Checkpoint Final

  1. Captura e dissecação de pacotes IP/TCP validada.
  2. Broadcast de chat em tempo real operando com sucesso.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal