📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Redes. Recomendado revisar antes de começar.
v1.0 — Redes de Computadores, Pilha TCP/IP, Raw Sockets e WebSockets RFC 6455
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Sniffer de Rede TCP/IP · Decodificação de Headers · Chat WebSocket
- v2: Servidor HTTP/1.1 Construído do Zero com Sockets Puros
- v3: Servidor DNS Autoritativo & Resolução de Nomes
- v4: VPN Ponto a Ponto Criptografada com Tun/Tap Interfaces
🎓 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.
—`
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.
—`
“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.”
| 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 |
—`
| 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 |
—`
# Branch da funcionalidade
git checkout -b feature/US01-sniffer-websocket-chat
# Executar o servidor de chat WebSocket
python websocket_server.py
—`
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())
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd redes_01_sniffer_websocket_chat
# 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`
—`
# Testar conexao WebSocket interativa com wscat
npx wscat -c ws://localhost:8765
—`
- Captura e dissecação de pacotes IP/TCP validada.
- Broadcast de chat em tempo real operando com sucesso.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |