NET Outil · Réseau

mitmproxy

Intercepter, modifier et rejouer le trafic HTTP(S) avec le proxy MITM, en CLI ou en GUI.

Intermédiaire / 1 min de lecture / maj 04 nov 2026 / 5 tags
raw domaine signaler
Index des sheets

#Démarrer

bash
# Interface TUI
mitmproxy --listen-port 8080

# Interface web sur http://127.0.0.1:8081
mitmweb --listen-port 8080 --web-port 8081

# Écouter sur toutes les interfaces (lab uniquement)
mitmproxy --listen-host 0.0.0.0 --listen-port 8080

# Écrire les flux dans un fichier
mitmproxy -w flows.mitm --listen-port 8080

#Router le client

bash
# curl
curl -x http://127.0.0.1:8080 -k https://target.test

# Variables d'environnement
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080

# Firefox : paramètres réseau → proxy manuel HTTP 127.0.0.1:8080

#Mode transparent (Linux)

bash
# Rediriger le trafic HTTP/HTTPS vers mitmproxy
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

sudo mitmproxy --mode transparent --listen-port 8080

#Interception et filtres

Dans la TUI, i active l'interception et ouvre un filtre :

text
~u /api/           # URL contient /api/
~m POST            # méthode POST
~q                 # requêtes avec paramètres
~d example\.com    # domaine
~t application/json
~s                 # réponses

Raccourcis : Enter éditer, a accepter, A accepter tout, r rejouer, e éditer, / filtrer la vue, f suivre un flux, z vider.

#Rejouer et modifier

bash
# Rejouer un fichier de flux
mitmproxy -r flows.mitm

# Replay serveur (réponses en cache, utile hors ligne)
mitmproxy --server-replay flows.mitm --server-replay-kill-extra

# Modifier une requête avec un script
mitmproxy -s tamper.py
python
# tamper.py — ajoute un header et remplace une valeur
from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
    if "api.target.test" in flow.request.pretty_host:
        flow.request.headers["X-Forwarded-For"] = "127.0.0.1"
        if "role=user" in flow.request.get_text():
            flow.request.set_text(flow.request.get_text().replace("role=user", "role=admin"))

#Bonnes pratiques

  • Utilise un profil navigateur dédié : les cookies de production n'ont rien à faire dans le proxy.
  • --set connection_strategy=lazy aide avec les serveurs qui ferment les connexions.
  • --ignore-hosts évite d'intercepter les domaines de télémétrie.
  • Pour les WebSockets, mitmproxy les affiche comme des flux websocket : inspecte les frames avec e.
INDEX // 42 FICHES // 12 DOMAINES LOCAL SEARCH
↑↓ naviguer ↵ ouvrir esc fermer sheet.sec / find
Raccourcis clavier
Recherche globale /ou⌘K
Naviguer dans les résultats ↑↓
Ouvrir le résultat actif ↵
Fermer une fenêtre esc
Accueil gh
Tous les sheets gs
Fiche aléatoire gr
Cette fenêtre ?