HTTP Breakout Proxy
Um proxy de interceptação HTTP/HTTPS leve e uma ferramenta de análise de tráfego escrita em Go, com uma interface web para inspecionar, filtrar, colorir e anotar o tráfego capturado em tempo real.


Visão Geral
HTTP Breakout Proxy funciona tanto como um proxy MITM HTTP e HTTPS quanto como uma ferramenta de visualização ao vivo.
Ele captura requisições e respostas entre dois componentes de software, permitindo que desenvolvedores:
- Inspecionem cabeçalhos, corpos e detalhes de temporização de cada requisição e resposta.
- Organizem, filtrem e persistam os dados capturados.
- Destaquem requisições com base em regras de cores definidas pelo usuário.
- Pausem ou retomem a captura dinamicamente.
- Visualizem a temporização das requisições como um gráfico de Gantt para analisar as fases de desempenho.
O proxy incorpora uma interface completa, acessível a partir de qualquer navegador web moderno, permitindo análise imediata em tempo real sem ferramentas externas.
Recursos
🔍 Captura e Inspeção
- Intercepta tráfego HTTP e HTTPS (com suporte a CA para MITM).
- Exibe todos os metadados, cabeçalhos e corpos de requisições e respostas.
- Suporta truncamento de corpos muito grandes.
💾 Persistência
- Capturas e regras de cores são armazenadas em
captures.json (ou no arquivo especificado).
- Recarrega automaticamente o estado na inicialização e salva periodicamente em disco.
- Regras de cores padrão são geradas na primeira execução se nenhuma existir.
🖥️ Interface Web
- Interface web embutida e responsiva (servida pelo próprio proxy).
- Exibe as capturas em uma lista rolável com indicadores codificados por cores.
- O painel de detalhes mostra:
- Cabeçalhos/corpos de requisição e resposta
- Detalhamento de temporização
- Notas editáveis
- Gráfico de desempenho estilo Gantt para as fases de conexão
🎨 Regras de Cores
- Defina realces de cor condicionais para capturas usando uma sintaxe de filtro flexível:
- Exemplo:
status:4 status:5 → destaca erros HTTP
- Exemplo:
url:/api/ → destaca requisições de API
- Exemplo:
/\.css$/ → correspondência regex na URL
- Cada regra inclui:
- Nome, cor, expressão de correspondência, prioridade e nota
- A correspondência com maior prioridade vence.
- Gerenciadas interativamente por uma interface modal com pré-visualizações em tempo real.
- Persistidas entre sessões.
⏸️ Controle de Captura
- O botão Pausar/Retomar permite interromper a coleta de novas capturas sem parar o proxy.
- Útil ao focar em um conjunto fixo de dados ou isolar um comportamento específico.
📈 Visualização de Desempenho
- Cada captura inclui temporização detalhada da conexão:
- Consulta DNS
- Conexão TCP
- Handshake TLS
- Processamento do servidor
- Leitura da resposta
- Exibida como um gráfico de Gantt no painel de detalhes.
- A escala arredonda automaticamente para o segundo mais próximo para facilitar a leitura.
🧭 Filtragem e Pesquisa
- Caixa de filtro em tempo real com suporte a:
- Filtros baseados em campos (
method:GET, status:404, header:Content-Type=application/json)
- Expressões regex (
/login/)
- Termos combinados com semântica AND/OR
- Suporta correspondência sem diferenciar maiúsculas/minúsculas e parcial.
- O filtro se aplica tanto à lista de capturas quanto ao realce de cores.
- Histórico de pesquisa armazenado localmente no navegador.
🧹 Gerenciamento
- Exclua capturas individuais ou limpe todas as capturas pela interface.
- Regras e notas são persistidas junto com as capturas.
🧩 Utilitários de Exportação
- Copie uma captura como:
- Comando
curl (formatado para o terminal)
- Trecho de código
python requests (representação JSON limpa)
- Baixe corpos de resposta diretamente da interface.
Uso pela Linha de Comando
httpbreakout -l 127.0.0.1:8080
Início Rápido
Compilar (a partir do código-fonte)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
Isso produz um único executável contendo o proxy compilado e os recursos da interface web embutidos.
Executar (padrão)
# run with defaults (proxy + UI)
./http-breakout-proxy
Por padrão, o binário vincula a 127.0.0.1:8080 para o proxy (e opcionalmente para a interface — veja as flags da CLI). Abra a interface em um navegador para inspecionar as capturas.
# send an HTTPS request via the proxy (proxy listens on 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
O tráfego capturado aparecerá na interface web.
Argumentos de Linha de Comando
| Flag | Padrão | Descrição |
|---|
-l | 127.0.0.1:8080 | Endereço no qual o proxy deve escutar, além da interface web. |
-mitm | true | Ativa o modo de interceptação Man-in-the-Middle (MITM) para HTTPS (gera uma CA local para interceptar TLS). |
-ca | ./ca | Diretório no qual o certificado e a chave da CA gerada são armazenados quando o MITM está ativado e a persistência é escolhida. |
-f | ./captures.json | Caminho ou diretório opcional para persistir capturas em disco (ex.: ./captures.json). |
-max-body | 1048576 | Número máximo de bytes (por corpo) a armazenar/exibir; corpos maiores são truncados com um marcador. |
-buffer-size | 1000 | Capacidade do buffer circular para capturas em memória. |
-v | false | Ativa o registro detalhado (log) para depuração. |
Use ./http-breakout-proxy -h para listar as flags disponíveis e as descrições de uso.
Visão Geral da Interface Web
A interface é otimizada para fluxos de trabalho investigativos.
- Barra superior: campo de filtro global (com suporte a regex e prefixos de campo), Pausar/Retomar captura, Limpar e Ajuda sobre filtros (abre em uma nova aba).
- Painel esquerdo: listagem cronológica das capturas (mais recentes primeiro). Cada item mostra o nome da captura; por padrão, é
METHOD URL [STATUS], mas um nome personalizado pode ser atribuído.
- Painel direito: detalhes da captura selecionada:
- Visão geral: metadados, cabeçalhos e corpos (JSON formatado quando aplicável).
- Abas Requisição/Resposta: corpos brutos formatados.
- Aba Bruto: JSON completo da captura.
- Ações da linha: copiar como
curl, copiar como requests do Python, baixar corpo da resposta, renomear, excluir.
Linguagem de Filtro (Referência Rápida)
- Token simples: corresponde em qualquer lugar (método, URL, status, host, cabeçalhos, corpos).
- Prefixos:
method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:.
- Sintaxe de regex:
/pattern/flags (por exemplo, /bearer\\s+\\S+/i).
- Especificação de cabeçalho:
header:name=value, em que name ou value podem ser regex.
- Os termos são combinados com AND lógico por padrão (separados por espaços). Alterne para OR se desejar, modificando a lógica do cliente.