
HTTP-Proxy-Analyse für Reverse Engineering der Protokollkommunikation
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.


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:
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.
captures.json (oder einer angegebenen Datei) gespeichert.status:4 status:5 → hebt HTTP-Fehler hervorurl:/api/ → hebt API-Anfragen hervor/\.css$/ → Regex-Übereinstimmung in der URLmethod:GET, status:404, header:Content-Type=application/json)/login/)curl-Befehl (für das Terminal formatiert)python requests-Codeausschnitt (saubere JSON-Darstellung)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
Dies erzeugt eine einzelne ausführbare Datei, die den kompilierten Proxy und die eingebetteten UI-Assets enthält.
# 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.
# 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.
Verwenden Sie
./http-breakout-proxy -h, um verfügbare Flags und Nutzungsbeschreibungen aufzulisten.
Die Benutzeroberfläche ist für Untersuchungs-Workflows optimiert.
METHODE URL [STATUS], aber ein benutzerdefinierter Name kann zugewiesen werden.curl, Kopieren als Python requests, Antwortkörper herunterladen, umbenennen, löschen.method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:./muster/flags (z.B. /bearer\\s+\\S+/i).header:name=value wobei name oder value Regex sein können.Beispiele:
method:POST status:2 host:api.example.com/token\\s*[:=]\\s*\\S+/ireq.header:authorization=/bearer/ibody:/\\"success\\"\\s*:\\s*true/iWenn der Man-In-The-Middle-Modus aktiviert ist:
-ca (Standard ./ca).ca.pem oder ähnlich) dem Vertrauensspeicher des Clients (oder Systems) hinzufügen, der die Anfragen stellt. Auf vielen Plattformen sind dafür Administratorrechte erforderlich.Sicherheitshinweis: Installieren Sie die CA nur in kontrollierten Umgebungen. Vertrauen Sie dieser CA nicht in Systemen, in denen Sie sensible, nicht zusammenhängende Datenverkehr lesen.
Wenn Persistenz aktiviert ist (über -f oder einen konfigurierten Pfad):
captures.json).Erfasste Elemente werden als JSON serialisiert und enthalten die folgenden Felder (nicht abschließend):
id – eindeutiger Sequenzbezeichnertime – Zeitstempel (ISO 8601)method, urlrequest_headers, response_headersrequest_body, response_body – bei Bedarf auf -max-body gekürztresponse_status, duration_msname – optionales Benutzerlabelnotes, deleted – Steuermetadaten für SSE-Ereignisse und UI-Zustandcurl-Befehl inklusive Header und Körper (lässt Hop-by-Hop-Header weg).requests-Schnipsel mit url, headers und optionalem data.Content-Type abgeleitet.Design-Überlegungen:
Host, Content-Length, Connection) werden aus generierten Wiedergabebefehlen weggelassen.GET /api/captures – Erfassungen auflisten (JSON-Array).DELETE /api/captures – alle Erfassungen löschen.GET /api/captures/{id} – eine einzelne Erfassung abrufen.DELETE /api/captures/{id} – bestimmte Erfassung löschen.PATCH /api/captures/{id} – Erfassungsmetadaten aktualisieren; Körperbeispiel: { "name": "Mein Label" }.GET /api/pause – gibt { "paused": true|false } zurück.POST /api/pause – Pausenstatus setzen; Körperbeispiel: { "paused": true }.GET /events – Server-Sent-Events (SSE)-Stream für Live-Erfassungsbenachrichtigungen und Steuerungsereignisse.//go:embed ui/* und fs.Sub, um statische Dateien bereitzustellen. Dies erzeugt ein einzelnes auslieferbares Artefakt.Content-Encoding und versucht, gzip- und deflate-Körper vor der Anzeige zu dekomprimieren. Die ursprünglichen Bytes werden zur Proxy-Transparenz beibehalten.io.LimitReader gelesen, um Kürzungen zu erkennen und die Speichernutzung zu schützen.Empfohlenes Vertriebsmodell:
CGO_ENABLED=0, -trimpath, -ldflags "-s -w")..tar.gz für Unix, .zip für Windows) und README.md sowie LICENSE beifügen.goreleaser verwenden, um plattformübergreifende Builds und Release-Artefakte zu automatisieren.Beispiel-Build-Befehle:
# 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
Erstellen Sie ein plist in ~/Library/LaunchAgents und laden Sie es mit launchctl.
Erfasster Körper erscheint als binäres Kauderwelsch
Der Körper ist komprimiert (z.B. gzip). Stellen Sie sicher, dass Sie einen Build ausführen, der automatische Dekomprimierung beinhaltet; die UI zeigt dekomprimiertes JSON/Text an, wenn verfügbar.
HTTPS-Datenverkehr wird nicht angezeigt / Verbindungsfehler
Der Client vertraut der generierten CA nicht. Installieren Sie ca/ca.pem im Client-/System-Vertrauensspeicher und markieren Sie es als vertrauenswürdig für TLS-Abfangen.
UI zeigt veraltete Auswahl nach dem Löschen von Erfassungen
Aktualisieren Sie auf einen Client, der selectedId bei cleared-SSE-Ereignissen löscht, oder rufen Sie den Endpunkt GET /api/captures auf, um den Zustand zu aktualisieren.
405 bei DELETE /api/captures
Stellen Sie sicher, dass der Server-Handler DELETE für /api/captures akzeptiert und Sie keinen abschließenden Schrägstrich-Konflikt haben.
Dieses Werkzeug führt TLS-Abfangen durch, wenn MITM aktiviert ist. Verwenden Sie es nur in kontrollierten Umgebungen, in denen Sie ausdrücklich zur Datenverkehrsinspektion berechtigt sind. Die generierte CA ist mächtig: Behandeln Sie ihren privaten Schlüssel mit derselben Vertraulichkeit wie jeden anderen Root-CA-Privatschlüssel. Installieren Sie die CA nicht in gemeinsam genutzten oder Produktions-Vertrauensspeichern.
Beiträge sind willkommen. Bitte eröffnen Sie Issues für Fehler oder Funktionsanfragen. Für Codebeiträge:
Dieses Projekt wird unter der MIT-Lizenz vertrieben. Siehe LICENSE für Details.
Autor: John Southerland (GitHub: jbsouthe)
Projekt: http-breakout-proxy – vorgesehen zum Debuggen, Entwickeln und Lernen über HTTP-Verhalten.
| 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. |