
Análise de Proxy HTTP para engenharia reversa de comunicação de protocolos.
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.


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:
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.
captures.json (ou no arquivo especificado).status:4 status:5 → destaca erros HTTPurl:/api/ → destaca requisições de API/\.css$/ → correspondência regex na URLmethod:GET, status:404, header:Content-Type=application/json)/login/)curl (formatado para o terminal)python requests (representação JSON limpa)httpbreakout -l 127.0.0.1:8080
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.
# 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.
Use
./http-breakout-proxy -hpara listar as flags disponíveis e as descrições de uso.
A interface é otimizada para fluxos de trabalho investigativos.
METHOD URL [STATUS], mas um nome personalizado pode ser atribuído.curl, copiar como requests do Python, baixar corpo da resposta, renomear, excluir.method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:./pattern/flags (por exemplo, /bearer\\s+\\S+/i).header:name=value, em que name ou value podem ser regex.Exemplos:
method:POST status:2 host:api.example.com/token\\s*[:=]\\s*\\S+/ireq.header:authorization=/bearer/ibody:/\\"success\\"\\s*:\\s*true/iQuando o modo Man-in-the-Middle está ativado:
-ca (padrão ./ca).ca.pem ou similar) ao armazenamento de confiança do cliente (ou do sistema) que faz as requisições. Em muitas plataformas, isso exige privilégios administrativos.Nota de segurança: Instale a CA apenas em ambientes controlados. Não confie nesta CA em sistemas nos quais você lê tráfego sensível não relacionado.
Se a persistência estiver ativada (por meio de -f ou de um caminho configurado):
captures.json).Os itens capturados são serializados em JSON e contêm os seguintes campos (lista não exaustiva):
id — identificador de sequência únicotime — carimbo de data/hora (ISO 8601)method, urlrequest_headers, response_headersrequest_body, response_body — truncados para -max-body se necessárioresponse_status, duration_msname — rótulo de usuário opcionalnotes, deleted — metadados de controle para eventos SSE e estado da interfacecurl seguro para shell, incluindo cabeçalhos e corpo (omite cabeçalhos hop-by-hop).requests com url, headers e data opcional.Content-Type quando possível.Considerações de design:
Host, Content-Length, Connection) são omitidos dos comandos de replay gerados.GET /api/captures — lista as capturas (array JSON).DELETE /api/captures — limpa todas as capturas.GET /api/captures/{id} — recupera uma única captura.DELETE /api/captures/{id} — exclui uma captura específica.PATCH /api/captures/{id} — atualiza metadados da captura; exemplo de corpo: { "name": "My label" }.GET /api/pause — retorna { "paused": true|false }.POST /api/pause — define o estado de pausa; exemplo de corpo: { "paused": true }.GET /events — stream de Eventos Enviados pelo Servidor (SSE) para notificações de captura em tempo real e eventos de controle.//go:embed ui/* e fs.Sub para servir arquivos estáticos. Isso produz um único artefato implantável.Content-Encoding e tenta descomprimir corpos gzip e deflate antes de exibi-los. Os bytes originais são mantidos para a transparência do proxy.io.LimitReader para detectar truncamento e proteger o uso de memória.Modelo de distribuição recomendado:
CGO_ENABLED=0, -trimpath, -ldflags "-s -w")..tar.gz para Unix, .zip para Windows) e inclua README.md e LICENSE.goreleaser para automatizar compilações multiplataforma e artefatos de lançamento.Exemplos de comandos de compilação:
# Linux x86_64
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-linux-amd64 .
# macOS (arm64)
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-darwin-arm64 .
[Unit]
Description=HTTP Breakout Proxy
After=network.target
[Service]
ExecStart=/opt/http-breakout-proxy/http-breakout-proxy -l 0.0.0.0:8080
Restart=on-failure
User=proxy
Group=proxy
[Install]
WantedBy=multi-user.target
Crie um plist em ~/Library/LaunchAgents e carregue com launchctl.
O corpo capturado aparece como lixo binário
O corpo está comprimido (ex.: gzip). Certifique-se de estar executando uma compilação que inclua a descompressão automática; a interface mostra JSON/texto descomprimido quando disponível.
Tráfego HTTPS não exibido / erros de conexão
O cliente não confia na CA gerada. Instale ca/ca.pem no armazenamento de confiança do cliente/sistema e marque como confiável para interceptação TLS.
A interface mostra seleção desatualizada após limpar capturas
Atualize para um cliente que limpe selectedId em eventos SSE cleared ou invoque o endpoint GET /api/captures para atualizar o estado.
405 ao usar DELETE /api/captures
Certifique-se de que o handler do servidor aceita DELETE para /api/captures e de que você não está encontrando uma incompatibilidade de barra final.
Esta ferramenta realiza interceptação TLS quando o MITM está ativado. Use-a apenas em ambientes controlados nos quais você tenha autorização explícita para inspecionar tráfego. A CA gerada é poderosa: trate sua chave privada com a mesma confidencialidade que qualquer outra chave privada de CA raiz. Não instale a CA em armazenamentos de confiança compartilhados ou de produção.
Contribuições são bem-vindas. Por favor, abra issues para bugs ou solicitações de recursos. Para contribuições de código:
Este projeto é distribuído sob a Licença MIT. Consulte LICENSE para obter detalhes.
Autor: John Southerland (GitHub: jbsouthe)
Projeto: http-breakout-proxy — destinado à depuração, desenvolvimento e aprendizado sobre o comportamento do HTTP.
| 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. |