Qu'est-ce que mitmproxy ?
mitmproxy est un proxy HTTP d'interception interactif, capable de gérer TLS, pour les testeurs d'intrusion et les développeurs. Faites-y passer un navigateur, un téléphone, un outil en ligne de commande ou un conteneur entier, et chaque requête et chaque réponse transitent là où vous pouvez les voir : en-têtes, corps, temps de réponse, détails TLS. Vous pouvez mettre une requête en pause en plein vol, la modifier puis la laisser repartir, la rejouer cent fois, ou réécrire le trafic automatiquement avec quelques lignes de Python. Il parle HTTP/1, HTTP/2, HTTP/3, WebSocket et TLS brut, et fonctionne en proxy classique, transparent, inverse, amont, SOCKS5, WireGuard ou en capture locale. Un seul paquet vous donne trois interfaces : mitmproxy, l'interface console interactive, mitmweb, la même chose dans votre navigateur, et mitmdump, la version en ligne de commande, un tcpdump pour HTTP.
⚡ Fonctionnalités clés de mitmproxy
🔓 Voir à l'intérieur de TLS
Au premier lancement, mitmproxy génère sa propre autorité de certification dans ~/.mitmproxy/ et fabrique à la volée un certificat pour chaque hôte visité. Faites confiance à cette CA une fois sur un client et son trafic HTTPS devient lisible, requête par requête.
✋ Intercepter et modifier
Appuyez sur i dans la console, donnez un filtre comme ~d api.example.com, et les requêtes correspondantes s'arrêtent sur place. e modifie la méthode, l'URL, les en-têtes ou le corps, a la laisse repartir.
🔁 Tout rejouer
r rejoue une requête depuis la console. Enregistrez une session avec -w et rejouez le côté client avec --client-replay, ou répondez à un client avec des réponses enregistrées grâce à --server-replay.
🐍 Extensions Python
Chargez un script avec -s script.py et accrochez-vous à chaque requête, réponse, message WebSocket ou poignée de main TLS. Réécrire des en-têtes, simuler des endpoints, retirer le pistage, journaliser dans un fichier : l'API d'extensions est celle sur laquelle mitmproxy construit ses propres fonctions.
🧭 Tous les modes de proxy
Classique, transparent, inverse (--mode reverse:https://example.com), amont, SOCKS5, WireGuard pour les téléphones et les VM, et capture locale d'une seule application. Passez --mode plusieurs fois pour en faire tourner plusieurs en même temps.
🌐 Console, web ou sans interface
La console pilotée au clavier pour un terminal ou une session SSH, mitmweb sur http://127.0.0.1:8081 pour une liste de flux à la souris, et mitmdump pour les scripts, les tâches de CI et les longues captures sans surveillance.
apt upgrade vous garde sur la dernière version.
📦 Installation depuis deb.griffo.io
Étape 1 : ajouter le dépôt
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🆓 Il existe un miroir gratuit pour toujours. deb-free.griffo.io distribue des paquets gratuitement pour toujours — sans compte, sans abonnement, au plus 2 mois derrière l'upstream, correctifs de sécurité immédiats. Il contient aujourd'hui cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud et Zed ; mitmproxy n'en fait pas partie, le dépôt ci-dessus reste donc le seul moyen de l'installer — demandez-le et il pourra y être ajouté.
🧩 À propos de l'option extrepo. extrepo est l'outil de Debian pour les dépôts externes : il écrit le fichier de sources et installe la clé de signature à votre place, après l'avoir vérifiée face à des métadonnées signées. Ce dépôt y est enregistré sous le nom griffo, et le miroir gratuit à vie sous griffo-free ; sur Debian (bookworm, trixie, forky et sid), les commandes ci-dessus constituent donc toute l'installation.
extrepo ne met en place que le fichier de sources et la clé : les identifiants d'un abonnement vont toujours dans /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu n'est pas couvert, car extrepo ne publie de métadonnées que pour les suites Debian : utilisez-y les commandes avec sudo ou en root.
Étape 2 : installer mitmproxy
# Installer le dernier mitmproxy
sudo apt install mitmproxy
# Un paquet, trois commandes : mitmproxy, mitmweb et mitmdump.
# Il embarque son propre Python et OpenSSL, rien d'autre n'est tiré
# Vérifier l'installation
mitmproxy --version
mitmdump --version# Installer le dernier mitmproxy
apt install mitmproxy
# Un paquet, trois commandes : mitmproxy, mitmweb et mitmdump.
# Il embarque son propre Python et OpenSSL, rien d'autre n'est tiré
# Vérifier l'installation
mitmproxy --version
mitmdump --versionÉtape 3 : premier lancement
# Lancer l'interface console, à l'écoute sur le port 8080
mitmproxy
# Ou l'interface web, qui ouvre http://127.0.0.1:8081
mitmweb
# Dans un autre terminal, envoyer une requête à travers lui
curl -x http://127.0.0.1:8080 http://example.com
# Le premier lancement a généré une CA dans ~/.mitmproxy/. Avec un
# client passant par le proxy, ouvrez http://mitm.it pour l'installer
# sur ce client, ou faites-lui confiance pour tout ce système
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# Lancer l'interface console, à l'écoute sur le port 8080
mitmproxy
# Ou l'interface web, qui ouvre http://127.0.0.1:8081
mitmweb
# Dans un autre terminal, envoyer une requête à travers lui
curl -x http://127.0.0.1:8080 http://example.com
# Le premier lancement a généré une CA dans ~/.mitmproxy/. Avec un
# client passant par le proxy, ouvrez http://mitm.it pour l'installer
# sur ce client, ou faites-lui confiance pour tout ce système
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 Exemples d'utilisation de base
Capturer le trafic :
# Écouter sur un autre port
mitmproxy --listen-port 9090
# Faire passer une seule commande par le proxy
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# Tout enregistrer dans un fichier, sans interface
mitmdump -w session.mitm
# N'afficher que les requêtes vers un hôte
mitmdump "~d api.example.com"
# Écrire un fichier HAR pour les outils de développement ou un rapport de bogue
mitmdump --set hardump=./session.harRejouer et inspecter :
# Ouvrir une session enregistrée dans la console
mitmproxy -r session.mitm
# Afficher ses requêtes POST sans démarrer de proxy
mitmdump -n -r session.mitm "~m POST"
# Renvoyer les requêtes enregistrées
mitmdump -n --client-replay session.mitm
# Répondre aux clients avec les réponses enregistrées au lieu du vrai serveur
mitmdump --server-replay session.mitmModes de proxy et extensions :
# Proxy inverse devant un seul serveur
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 et un proxy classique depuis la même instance
mitmdump --mode socks5 --mode regular
# WireGuard : scannez le QR code de mitmweb avec l'app WireGuard d'un téléphone
mitmweb --mode wireguard
# Réécrire le trafic avec une extension Python, par ex. addon.py contenant :
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 Intégrations
mitmproxy se place entre les outils que vous utilisez déjà et le réseau auquel ils parlent :
- curl, wget et la plupart des CLI : tout ce qui respecte
HTTP_PROXYetHTTPS_PROXYpasse par mitmproxy avec une seule variable d'environnement, etcurl -xle fait commande par commande - Navigateurs et téléphones : réglez le proxy sur le port 8080, ouvrez
http://mitm.itet installez la CA pour cette plateforme, ou utilisez le mode WireGuard sur Android et iOS sans aucun réglage de proxy - Outils de développement du navigateur :
hardumpécrit un fichier HAR, et mitmproxy relit les fichiers HAR avec-r: une capture circule entre lui et Chrome ou Firefox dans les deux sens - Extensions Python : les scripts chargés avec
-stournent dans le Python embarqué de mitmproxy ; ils peuvent importer la bibliothèque standard et ce que mitmproxy fournit, mais pas les paquets installés pour lepython3du système - Suites de tests et CI :
mitmdumpavec--server-replaysert des réponses enregistrées, ce qui rend reproductibles dans les tests d'intégration les API tierces capricieuses
🚀 Pourquoi choisir deb.griffo.io ?
- Debian officiel : la 8.1.1 de 2022 dans bookworm, forky et sid, et rien du tout dans trixie, la stable actuelle
- pipx ou pip : à jour, mais lié au Python système que vous avez et invisible pour apt
- L'archive upstream : la même compilation autonome que ce paquet, décompressée à la main et mise à jour à la main
- deb.griffo.io: dernière version avec mises à jour automatiques
- ✅ Des années d'avance sur les dépôts : la version actuelle de mitmproxy au lieu de la 8.1.1, avec HTTP/3, WireGuard et la capture locale
- ✅ Trois commandes, un paquet :
mitmproxy,mitmwebetmitmdumparrivent tous dans votre PATH, sous les noms qu'utilisent tous les tutoriels - ✅ Mises à jour automatiques : les paquets sont mis à jour quelques heures après chaque version upstream
- ✅ Paquet complet : la compilation Linux autonome officielle upstream, rien d'ajouté, rien de rustiné
- ✅ Aucune dépendance Python : il embarque son propre Python et OpenSSL, il n'entre donc jamais en conflit avec les paquets Python du système et n'attend jamais leur mise à jour
- ✅ Deux architectures : amd64 et arm64, la même compilation autonome sur toutes les suites
- ✅ Multi-distribution : fonctionne sur Bookworm, Trixie, Forky et Sid
- ✅ Maintenance simple : des mises à jour avec les commandes apt habituelles
📦 Dépôt de construction du paquet
Les paquets Debian sont construits et maintenus automatiquement dans ce dépôt GitHub :
- 🕵️ mitmproxy-debian - Constructions des dernières versions
🔗 Paquets associés
Également disponibles sur deb.griffo.io :
- yq - Interroger et remodeler les corps JSON extraits d'une capture
- Headscale - Un réseau WireGuard auto-hébergé, pour l'autre bout du tunnel
- k9s - Une interface terminal pour les services Kubernetes que vous finirez par faire passer par le proxy
- lazydocker - Une interface terminal pour les conteneurs dont vous déboguez le trafic