HTTP Breakout Proxy
Ein leichter HTTP/HTTPS-Intercepting-Proxy und Traffic-Analyse-Tool, geschrieben in Go, mit einer webbasierten Benutzeroberfläche zur Echtzeit-Inspektion, Filterung, Farbmarkierung und Annotation des abgefangenen Datenverkehrs.


Überblick
HTTP Breakout Proxy fungiert sowohl als HTTP- und HTTPS-MITM-Proxy als auch als Live-Visualisierungswerkzeug.
Er erfasst Anfragen und Antworten zwischen zwei Softwarekomponenten und ermöglicht Entwicklern Folgendes:
- Untersuchen von Headern, Körpern und Zeitdetails für jede Anfrage und Antwort.
- Organisieren, Filtern und Persistieren der erfassten Daten.
- Hervorheben von Anfragen basierend auf benutzerdefinierten Farbschemata (Color Rules).
- Dynamisches Anhalten oder Fortsetzen der Aufnahme.
- Anzeige der Anfragezeit als Gantt-Diagramm zur Visualisierung der Leistungsphasen.
Der Proxy enthält eine voll funktionsfähige Benutzeroberfläche, die von jedem modernen Webbrowser aus zugänglich ist, und ermöglicht so sofortige Echtzeitanalysen ohne externe Werkzeuge.
Funktionen
🔍 Erfassung und Inspektion
- Abfangen von sowohl HTTP- als auch HTTPS-Datenverkehr (mit MITM-CA-Unterstützung).
- Anzeige aller Metadaten, Header und Körper von Anfragen und Antworten.
- Unterstützt Kürzung bei sehr großen Körpern.
💾 Persistierung
- Erfassungen und Farbschemata werden in
captures.json (oder einer angegebenen Datei) gespeichert.
- Lädt den Zustand beim Start automatisch neu und speichert regelmäßig auf die Festplatte.
- Standard-Farbschemata werden beim ersten Start generiert, falls keine vorhanden sind.
🖥️ Web-Benutzeroberfläche
- Responsive eingebettete Webschnittstelle (vom Proxy selbst bereitgestellt).
- Anzeige der Erfassungen in einer scrollbaren Liste mit farbcodierten Indikatoren.
- Detailbereich zeigt:
- Header und Körper von Anfrage und Antwort
- Zeitaufschlüsselungen
- Bearbeitbare Notizen
- Gantt-ähnliches Leistungsdiagramm für Verbindungsphasen
🎨 Farbschemata
- Definieren Sie bedingte Farbhervorhebungen für Erfassungen mit einer flexiblen Filtersyntax:
- Beispiel:
status:4 status:5 → hebt HTTP-Fehler hervor
- Beispiel:
url:/api/ → hebt API-Anfragen hervor
- Beispiel:
/\.css$/ → Regex-Übereinstimmung in der URL
- Jedes Schema umfasst:
- Name, Farbe, Übereinstimmungsausdruck, Priorität und Notiz
- Die höchste Priorität gewinnt.
- Interaktiv über eine modale Oberfläche mit Live-Vorschauen verwaltet.
- Werden über Sitzungen hinweg persistiert.
⏸️ Aufnahmesteuerung
- Die Pause/Resume-Taste ermöglicht es, das Sammeln neuer Erfassungen zu stoppen, ohne den Proxy anzuhalten.
- Nützlich, wenn man sich auf einen festen Datensatz konzentrieren oder ein bestimmtes Verhalten isolieren möchte.
📈 Leistungsvisualisierung
- Jede Erfassung enthält detaillierte Verbindungszeiten:
- DNS-Auflösung
- TCP-Verbindungsaufbau
- TLS-Handshake
- Serververarbeitung
- Antwortlesen
- Angezeigt als Gantt-Diagramm im Detailbereich.
- Die Skala rundet automatisch auf die nächste Sekunde für die Lesbarkeit.
🧭 Filtern und Suchen
- Echtzeit-Filterfeld mit Unterstützung für:
- Feldbasierte Filter (
method:GET, status:404, header:Content-Type=application/json)
- Regex-Ausdrücke (
/login/)
- Kombinierte Begriffe mit UND/ODER-Semantik
- Groß-/Kleinschreibung nicht beachtend und teilweise Übereinstimmung unterstützt.
- Der Filter wird sowohl auf die Erfassungsliste als auch auf die Farbhervorhebung angewendet.
- Suchverlauf wird lokal im Browser gespeichert.
🧹 Verwaltung
- Einzelne Erfassungen löschen oder alle Erfassungen über die Benutzeroberfläche löschen.
- Regeln und Notizen werden zusammen mit den Erfassungen persistiert.
🧩 Exportfunktionen
- Eine Erfassung kopieren als:
curl-Befehl (für das Terminal formatiert)
python requests-Codeausschnitt (saubere JSON-Darstellung)
- Antwortkörper direkt über die Benutzeroberfläche herunterladen.
Befehlszeilenverwendung
httpbreakout -l 127.0.0.1:8080
Schnellstart
Erstellen (aus dem Quellcode)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
Dies erzeugt eine einzelne ausführbare Datei, die den kompilierten Proxy und die eingebetteten UI-Assets enthält.
Ausführen (Standard)
# mit Standardeinstellungen ausführen (Proxy + UI)
./http-breakout-proxy
Standardmäßig bindet die Binärdatei an 127.0.0.1:8080 für den Proxy (und optional die UI – siehe CLI-Flags). Öffnen Sie die UI in einem Browser, um Erfassungen zu inspizieren.
Beispiel: Proxy mit curl ausführen
# eine HTTPS-Anfrage über den Proxy senden (Proxy hört auf 127.0.0.1:8080)
curl -x http://127.0.0.1:8080 https://example.com
Der abgefangene Datenverkehr erscheint in der Web-UI.
Befehlszeilenargumente
| Flag | Standard | Beschreibung |
|---|
-l | 127.0.0.1:8080 | Adresse, auf der der Proxy sowie eine UI-App lauschen. |
-mitm | true | HTTPS Man-In-The-Middle-Modus (MITM) aktivieren (erzeugt eine lokale CA zum Abfangen von TLS). |
-ca | ./ca | Verzeichnis, in dem das generierte CA-Zertifikat und der Schlüssel gespeichert werden, wenn MITM aktiviert und Persistenz gewählt ist. |
-f | ./captures.json | Optionaler Pfad oder Verzeichnis zum Persistieren von Erfassungen auf die Festplatte (z.B. ./captures.json). |
-max-body | 1048576 | Maximale Anzahl von Bytes (pro Körper), die gespeichert/angezeigt werden; größere Körper werden mit einem Sentinel gekürzt. |
-buffer-size | 1000 | Kapazität des Ringspeichers für Erfassungen im Speicher. |
-v | false | Ausführliche Protokollierung zum Debuggen aktivieren. |
Verwenden Sie ./http-breakout-proxy -h, um verfügbare Flags und Nutzungsbeschreibungen aufzulisten.
Web-UI-Überblick
Die Benutzeroberfläche ist für Untersuchungs-Workflows optimiert.
- Obere Symbolleiste: globales Filtereingabefeld (unterstützt Regex und Schlüsselwortpräfixe), Pause/Resume-Aufnahme, Löschen und Filter-Hilfe (öffnet in einem neuen Tab).
- Linkes Panel: chronologische Erfassungsliste (neueste zuerst). Jeder Eintrag zeigt den Erfassungsnamen; standardmäßig ist dies
METHODE URL [STATUS], aber ein benutzerdefinierter Name kann zugewiesen werden.
- Rechtes Panel: Details zur ausgewählten Erfassung:
- Übersicht: Metadaten, Header und Körper (wo anwendbar als formatiertes JSON).
- Anfrage / Antwort-Tabs: roh formatierte Körper.
- Raw-Tab: vollständiges Erfassungs-JSON.
- Zeilenaktionen: Kopieren als
curl, Kopieren als Python requests, Antwortkörper herunterladen, umbenennen, löschen.
Filtersprache (Kurzreferenz)