HTTP Breakout Proxy
Un proxy di intercettazione HTTP/HTTPS leggero e strumento di analisi del traffico scritto in Go, con un'interfaccia utente web per ispezionare, filtrare, colorare e annotare il traffico catturato in tempo reale.


Panoramica
HTTP Breakout Proxy funge sia da proxy HTTP e HTTPS MITM che da strumento di visualizzazione dal vivo.
Cattura richieste e risposte tra due componenti software, consentendo agli sviluppatori di:
- Ispezionare header, corpi e dettagli di temporizzazione per ogni richiesta e risposta.
- Organizzare, filtrare e persistere i dati catturati.
- Evidenziare le richieste in base a regole di colore definite dall'utente.
- Mettere in pausa o riprendere la cattura in modo dinamico.
- Visualizzare la temporizzazione delle richieste come diagramma di Gantt per visualizzare le fasi delle prestazioni.
Il proxy incorpora un'interfaccia utente completa accessibile da qualsiasi browser moderno, consentendo un'analisi immediata e in tempo reale senza strumenti esterni.
Caratteristiche
🔍 Cattura e Ispezione
- Intercetta traffico sia HTTP che HTTPS (con supporto MITM CA).
- Mostra tutti i metadati, header e corpi delle richieste e risposte.
- Supporta il troncamento per corpi molto grandi.
💾 Persistenza
- Le catture e le regole di colore sono memorizzate in
captures.json (o file specificato).
- Ricarica automaticamente lo stato all'avvio e salva periodicamente su disco.
- Le regole di colore predefinite vengono generate al primo avvio se non esistono.
🖥️ Interfaccia Web
- Interfaccia web integrata e reattiva (servita dal proxy stesso).
- Visualizza le catture in un elenco scorrevole con indicatori colorati.
- Pannello dei dettagli che mostra:
- Header e corpi di richiesta/risposta
- Suddivisioni temporali
- Note modificabili
- Grafico delle prestazioni in stile Gantt per le fasi di connessione
🎨 Regole di Colore
- Definisci evidenziazioni di colore condizionali per le catture utilizzando una sintassi di filtro flessibile:
- Esempio:
status:4 status:5 → evidenzia errori HTTP
- Esempio:
url:/api/ → evidenzia richieste API
- Esempio:
/\.css$/ → corrispondenza regex sull'URL
- Ogni regola include:
- Nome, colore, espressione di corrispondenza, priorità e nota
- Vince la corrispondenza con priorità più alta.
- Gestito interattivamente tramite un'interfaccia modale con anteprime in tempo reale.
- Persistente tra sessioni.
⏸️ Controllo della Cattura
- Pulsante Pausa/Riprendi consente di interrompere la raccolta di nuove catture senza fermare il proxy.
- Utile quando ci si concentra su un set di dati fisso o si isola un comportamento specifico.
📈 Visualizzazione delle Prestazioni
- Ogni cattura include dettagli temporali della connessione:
- Risoluzione DNS
- Connessione TCP
- Handshake TLS
- Elaborazione server
- Lettura risposta
- Visualizzato come diagramma di Gantt nel pannello dei dettagli.
- La scala arrotonda automaticamente al secondo più vicino per leggibilità.
🧭 Filtraggio e Ricerca
- Casella di filtro in tempo reale che supporta:
- Filtri basati su campi (
method:GET, status:404, header:Content-Type=application/json)
- Espressioni regex (
/login/)
- Termini combinati con semantica AND/OR
- Supporto per corrispondenza parziale e case-insensitive.
- Il filtro si applica sia all'elenco delle catture che all'evidenziazione dei colori.
- Cronologia di ricerca memorizzata localmente nel browser.
🧹 Gestione
- Elimina singole catture o cancella tutte le catture tramite UI.
- Regole e note vengono conservate insieme alle catture.
🧩 Utilità di Esportazione
- Copia una cattura come:
- Comando
curl (formattato per terminale)
- Frammento di codice
python requests (rappresentazione JSON pulita)
- Scarica direttamente i corpi delle risposte dall'interfaccia utente.
Utilizzo da Riga di Comando
httpbreakout -l 127.0.0.1:8080
Avvio Rapido
Compilazione (da sorgente)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
Questo produce un singolo eseguibile contenente il proxy compilato e le risorse dell'interfaccia utente incorporate.
Esecuzione (predefinito)
# esegui con impostazioni predefinite (proxy + UI)
./http-breakout-proxy
Di default il binario si collega a 127.0.0.1:8080 per il proxy (e opzionalmente UI — vedere i flag CLI). Apri l'interfaccia utente in un browser per ispezionare le catture.
Esempio: esercitare il proxy con curl
# invia una richiesta HTTPS tramite il proxy (il proxy ascolta su 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
Il traffico catturato apparirà nell'interfaccia web.
Argomenti da Riga di Comando
| Flag | Predefinito | Descrizione |
|---|
-l | 127.0.0.1:8080 | Indirizzo su cui il proxy ascolta, oltre che per l'app UI. |
-mitm | true | Abilita la modalità di intercettazione HTTPS Man In The Middle (MITM) (genera una CA locale per intercettare TLS). |
-ca | ./ca | Directory in cui vengono memorizzati il certificato CA e la chiave generati quando MITM è abilitato e la persistenza è scelta. |
-f | ./captures.json | Percorso o directory opzionale per persistere le catture su disco (ad es., ./captures.json). |
-max-body | 1048576 | Numero massimo di byte (per corpo) da memorizzare/visualizzare; corpi più grandi vengono troncati con un segnaposto. |
-buffer-size | 1000 | Capacità del buffer circolare per le catture in memoria. |
-v | false | Abilita log dettagliati per debug. |
Usa ./http-breakout-proxy -h per elencare i flag disponibili e le descrizioni di utilizzo.
Panoramica dell'Interfaccia Web
L'UI è ottimizzata per flussi di lavoro investigativi.
- Barra degli strumenti superiore: input filtro globale (supporta espressioni regolari e prefissi chiave), Pausa/Riprendi cattura, Cancella e Aiuto filtro (si apre in una nuova scheda).
- Pannello sinistro: elenco cronologico delle catture (più recenti in alto). Ogni elemento mostra il nome della cattura; per impostazione predefinita è
METHOD URL [STATUS] ma è possibile assegnare un nome personalizzato.
- Pannello destro: dettagli per la cattura selezionata:
- Panoramica: metadati, header e corpi (JSON formattato ove applicabile).
- Richiesta / Risposta schede: corpi formattati grezzi.
- Raw scheda: JSON completo della cattura.
- Azioni riga: copia come
curl, copia come Python requests, scarica corpo risposta, rinomina, elimina.
Linguaggio di Filtro (Riferimento Rapido)