Was ist mitmproxy?
mitmproxy ist ein interaktiver, TLS-fähiger abfangender HTTP-Proxy für Penetrationstester und Softwareentwickler. Richte einen Browser, ein Smartphone, ein CLI oder einen ganzen Container darauf aus, und jede Anfrage und jede Antwort läuft dort durch, wo du sie sehen kannst: Header, Bodys, Zeiten, TLS-Details. Du kannst eine Anfrage mitten im Flug anhalten, bearbeiten und weiterschicken, sie hundertmal wiederholen oder den Verkehr mit ein paar Zeilen Python automatisch umschreiben. Er spricht HTTP/1, HTTP/2, HTTP/3, WebSocket und rohes TLS und läuft als regulärer, transparenter, Reverse-, Upstream-, SOCKS5-, WireGuard- oder lokaler Capture-Proxy. Ein Paket liefert drei Oberflächen: mitmproxy, die interaktive Konsolen-Oberfläche, mitmweb, dasselbe im Browser, und mitmdump, die Kommandozeilenversion, ein tcpdump für HTTP.
⚡ Hauptfunktionen von mitmproxy
🔓 Blick ins TLS
mitmproxy erzeugt beim ersten Start eine eigene Zertifizierungsstelle in ~/.mitmproxy/ und stellt für jeden besuchten Host spontan Zertifikate aus. Vertraue dieser CA einmal auf einem Client, und sein HTTPS-Verkehr wird lesbar, Anfrage für Anfrage.
✋ Abfangen und bearbeiten
Drücke i in der Konsole, gib einen Filter wie ~d api.example.com an, und passende Anfragen bleiben stehen. e bearbeitet Methode, URL, Header oder Body, a schickt sie weiter.
🔁 Alles wiederholen
r wiederholt eine einzelne Anfrage aus der Konsole. Speichere eine Sitzung mit -w und spiele die Client-Seite mit --client-replay erneut ab, oder beantworte einen Client mit aufgezeichneten Antworten per --server-replay.
🐍 Python-Addons
Lade ein Skript mit -s script.py und hänge dich in jede Anfrage, jede Antwort, jede WebSocket-Nachricht oder jeden TLS-Handshake. Header umschreiben, Endpunkte mocken, Tracking entfernen, in eine Datei loggen: die Addon-API ist dieselbe, auf der mitmproxys eigene Funktionen aufbauen.
🧭 Jeder Proxy-Modus
Regulär, transparent, Reverse (--mode reverse:https://example.com), Upstream, SOCKS5, WireGuard für Smartphones und VMs und lokaler Capture einer einzelnen Anwendung. Gib --mode mehrfach an, um mehrere gleichzeitig zu betreiben.
🌐 Konsole, Web oder headless
Die tastaturgesteuerte Konsole für ein Terminal oder eine SSH-Sitzung, mitmweb auf http://127.0.0.1:8081 für eine Flow-Liste zum Klicken, und mitmdump für Skripte, CI-Jobs und lange unbeaufsichtigte Mitschnitte.
apt upgrade hält dich auf der neuesten Version.
📦 Installation aus deb.griffo.io
Schritt 1: Repository hinzufügen
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Es gibt einen für immer kostenlosen Spiegel. deb-free.griffo.io liefert Pakete für immer kostenlos — ohne Konto, ohne Abo, höchstens 2 Monate hinter Upstream, Sicherheitsfixes sofort. Derzeit enthält er cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud und Zed; mitmproxy ist nicht dabei, deshalb führt heute nur das Repository oben dorthin — auf Anfrage kann es aufgenommen werden.
🧩 Zur extrepo-Option. extrepo ist Debians eigenes Werkzeug für externe Repositories: Es legt die Sources-Datei an und installiert den Signaturschlüssel für dich, nachdem es ihn gegen signierte Metadaten geprüft hat. Dieses Repository ist dort als griffo registriert, der für immer kostenlose Spiegel als griffo-free. Unter Debian (bookworm, trixie, forky und sid) sind die Befehle oben damit die gesamte Einrichtung.
extrepo richtet nur die Sources-Datei und den Schlüssel ein; die Zugangsdaten eines Abos gehören weiterhin in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu wird nicht abgedeckt, denn extrepo veröffentlicht Metadaten nur für Debian-Suites: dort nimmst du die Befehle mit sudo oder als root.
Schritt 2: mitmproxy installieren
# Neuestes mitmproxy installieren
sudo apt install mitmproxy
# Ein Paket, drei Befehle: mitmproxy, mitmweb und mitmdump.
# Es bringt sein eigenes Python und OpenSSL mit, sonst wird nichts nachgezogen
# Installation prüfen
mitmproxy --version
mitmdump --version# Neuestes mitmproxy installieren
apt install mitmproxy
# Ein Paket, drei Befehle: mitmproxy, mitmweb und mitmdump.
# Es bringt sein eigenes Python und OpenSSL mit, sonst wird nichts nachgezogen
# Installation prüfen
mitmproxy --version
mitmdump --versionSchritt 3: Der erste Start
# Die Konsolen-Oberfläche starten, sie lauscht auf Port 8080
mitmproxy
# Oder die Web-Oberfläche, die http://127.0.0.1:8081 öffnet
mitmweb
# In einem anderen Terminal eine Anfrage hindurchschicken
curl -x http://127.0.0.1:8080 http://example.com
# Der erste Start hat eine CA in ~/.mitmproxy/ erzeugt. Öffne bei
# einem Client hinter dem Proxy http://mitm.it, um sie dort zu
# installieren, oder vertraue ihr systemweit auf dieser Maschine
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# Die Konsolen-Oberfläche starten, sie lauscht auf Port 8080
mitmproxy
# Oder die Web-Oberfläche, die http://127.0.0.1:8081 öffnet
mitmweb
# In einem anderen Terminal eine Anfrage hindurchschicken
curl -x http://127.0.0.1:8080 http://example.com
# Der erste Start hat eine CA in ~/.mitmproxy/ erzeugt. Öffne bei
# einem Client hinter dem Proxy http://mitm.it, um sie dort zu
# installieren, oder vertraue ihr systemweit auf dieser Maschine
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 Grundlegende Verwendungsbeispiele
Verkehr mitschneiden:
# Auf einem anderen Port lauschen
mitmproxy --listen-port 9090
# Einen einzelnen Befehl durch den Proxy schicken
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# Alles ohne Oberfläche in eine Datei schreiben
mitmdump -w session.mitm
# Nur Anfragen an einen Host anzeigen
mitmdump "~d api.example.com"
# Eine HAR-Datei für die Browser-Entwicklertools oder einen Fehlerbericht speichern
mitmdump --set hardump=./session.harWiederholen und untersuchen:
# Eine gespeicherte Sitzung in der Konsole öffnen
mitmproxy -r session.mitm
# Die POST-Anfragen daraus ausgeben, ohne einen Proxy zu starten
mitmdump -n -r session.mitm "~m POST"
# Die aufgezeichneten Anfragen erneut senden
mitmdump -n --client-replay session.mitm
# Clients mit aufgezeichneten Antworten statt des echten Servers bedienen
mitmdump --server-replay session.mitmProxy-Modi und Addons:
# Reverse-Proxy vor einem einzelnen Server
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 und ein regulärer Proxy aus derselben Instanz
mitmdump --mode socks5 --mode regular
# WireGuard: den QR-Code in mitmweb mit der WireGuard-App eines Smartphones scannen
mitmweb --mode wireguard
# Verkehr mit einem Python-Addon umschreiben, z. B. addon.py mit:
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 Werkzeug-Integrationen
mitmproxy sitzt zwischen den Werkzeugen, die du schon benutzt, und dem Netz, mit dem sie reden:
- curl, wget und die meisten CLIs: alles, was
HTTP_PROXYundHTTPS_PROXYbeachtet, läuft mit einer Umgebungsvariable durch mitmproxy, undcurl -xerledigt es pro Befehl - Browser und Smartphones: den Proxy auf Port 8080 setzen,
http://mitm.itöffnen und die CA für die jeweilige Plattform installieren, oder unter Android und iOS den WireGuard-Modus ganz ohne Proxy-Einstellungen nutzen - Browser-Entwicklertools:
hardumpschreibt eine HAR-Datei, und mitmproxy liest HAR-Dateien mit-rwieder ein, ein Mitschnitt wandert also in beide Richtungen zwischen ihm und Chrome oder Firefox - Python-Addons: mit
-sgeladene Skripte laufen im mitgelieferten Python von mitmproxy, sie können also die Standardbibliothek und das importieren, was mitmproxy mitbringt, aber keine Pakete, die für das System-python3installiert sind - Testsuiten und CI:
mitmdumpmit--server-replayliefert aufgezeichnete Antworten aus und macht wackelige Fremd-APIs in Integrationstests wiederholbar
🚀 Warum deb.griffo.io?
- Offizielles Debian: 8.1.1 von 2022 in bookworm, forky und sid, und in trixie, dem aktuellen Stable, überhaupt nicht
- pipx oder pip: aktuell, aber an das jeweilige System-Python gebunden und für apt unsichtbar
- Das Upstream-Tarball: derselbe eigenständige Build, den dieses Paket ausliefert, von Hand entpackt und von Hand aktualisiert
- deb.griffo.io: neueste Version mit automatischen Updates
- ✅ Den Archiven Jahre voraus: das aktuelle mitmproxy-Release statt 8.1.1, mit HTTP/3, WireGuard- und lokalem Capture-Modus
- ✅ Drei Befehle, ein Paket:
mitmproxy,mitmwebundmitmdumplanden alle in deinem PATH, unter den Namen, die jedes Tutorial benutzt - ✅ Automatische Updates: Pakete werden innerhalb von Stunden nach dem Upstream-Release aktualisiert
- ✅ Vollständiges Paket: der offizielle eigenständige Linux-Build von upstream, nichts hinzugefügt, nichts gepatcht
- ✅ Keine Python-Abhängigkeiten: es bringt sein eigenes Python und OpenSSL mit, kollidiert also nie mit Python-Paketen des Systems und wartet nie auf deren Updates
- ✅ Zwei Architekturen: amd64 und arm64, derselbe eigenständige Build auf jeder Suite
- ✅ Multi-Distribution: läuft auf Bookworm, Trixie, Forky und Sid
- ✅ Einfache Wartung: Updates mit den üblichen apt-Befehlen
📦 Paket-Build-Repository
Die Debian-Pakete werden in diesem GitHub-Repository automatisch gebaut und gepflegt:
- 🕵️ mitmproxy-debian - Builds der neuesten Releases
🔗 Verwandte Pakete
Ebenfalls verfügbar über deb.griffo.io:
- yq - Die JSON-Bodys aus einem Mitschnitt abfragen und umformen
- Headscale - Selbst gehostetes WireGuard-Netzwerk für die andere Seite des Tunnels
- k9s - Eine Terminal-Oberfläche für die Kubernetes-Dienste, die du am Ende durch den Proxy schickst
- lazydocker - Eine Terminal-Oberfläche für die Container, deren Verkehr du debuggst