
Un proxy MITM sans interface graphique, scriptable et basé sur la ligne de commande, conçu pour l'interception, l'analyse et la modification du trafic réseau sur les systèmes Windows.

Un proxy MITM en ligne de commande, scriptable et sans interface graphique, conçu pour l'interception, l'analyse et la modification du trafic réseau sur les systèmes Windows. Il fonctionne de manière similaire aux proxys graphiques standards de l'industrie, mais il est optimisé pour les environnements d'automatisation, le fonctionnement sans interface graphique et l'intégration aux flux de développement.
Remarque : Il s'agit d'un outil autonome, sans dépendances, implémenté en Node.js.
PacketPirate est un outil d'interception réseau à l'échelle du système. En exploitant les paramètres de proxy HTTP de Windows, il peut capturer le trafic de toute application exécutée sur votre machine—y compris les navigateurs web (Chrome, Edge), les outils CLI (curl, git) et les applications de bureau (Spotify, VS Code, Discord).
Interception globale du système : Capture le trafic HTTP/HTTPS de tout processus respectant le proxy système.
Conscience des processus : Identifie exactement quelle application génère le trafic.
Moteur de règles dynamique : Configurable via JSON pour exécuter des actions spécifiques sur le trafic correspondant (par exemple, extraction de jetons, journalisation des requêtes).
Journalisation complète du trafic : Capable de vider les corps de requêtes et de réponses complets (HTML, JSON, binaire) pour analyse.
Architecture sans interface graphique : Fonctionne entièrement en CLI, adapté aux services d'arrière-plan et aux pipelines de test automatisés.
Gestion personnalisée des certificats : Inclut des utilitaires pour générer et approuver des autorités de certification (CA) racines auto-signées pour le déchiffrement HTTPS.
Clonez le dépôt et initialisez l'environnement :
# 1. Générer les certificats SSL locaux
npm run setup
# 2. Approuver l'autorité de certification racine générée
npm run trust
# Remarque : Nécessite une approbation administrative pour ajouter le certificat au magasin des autorités de certification racines de confiance.
Démarrez le serveur proxy :
npm start
Ceci lance l'interface CLI standard.
Le menu interactif fournit les commandes suivantes :
code.exe).Bearer dans les en-têtes Authorization.jsonl structurés.La logique d'interception est définie dans config/rules.json. Ce fichier permet une configuration persistante du traitement du trafic.
Schéma :
{
"rules": [
{
"name": "Description of rule",
"host": "hostname.match",
"urlPattern": "regex_pattern",
"action": "log | save_token",
"outputFile": "path/to/output.txt",
"tokenFilter": "regex_filter"
}
]
}
Exemple :
{
"rules": [
{
"name": "Test API",
"host": "jsonplaceholder.typicode.com",
"action": "save_token",
"outputFile": "test_tokens.txt"
}
]
}
L'outil utilise une architecture à double serveur :
CONNECT et effectue le filtrage des hôtes.EADDRINUSE et incrémente le numéro de port jusqu'à ce qu'un port libre soit trouvé.SIGINT/SIGTERM pour garantir que les paramètres de proxy sont rétablis à la sortie, évitant ainsi les problèmes de connectivité réseau.L'outil repose sur un modèle à double certificat pour l'interception HTTPS :
npm run setup crée une autorité de certification racine auto-signée (PacketPirateRoot).
New-SelfSignedCertificate de PowerShell pour générer une paire de clés valide 5 ans.src/certs/server.pfx (format PKCS#12) avec le mot de passe « headless ».npm run trust injecte cette autorité de certification racine dans le magasin Windows CurrentUser\Root.
CurrentUser plutôt que LocalMachine, nous limitons le périmètre de confiance à votre profil utilisateur spécifique, réduisant ainsi le risque à l'échelle du système.security.enterprise_roots.enabled) pour respecter le magasin de confiance Windows.npm run untrust permet un nettoyage propre.
Ce projet est un exemple pratique de programmation système utilisant Node.js. Il va au-delà des serveurs web classiques pour interagir avec le système d'exploitation et la pile réseau à un niveau inférieur.
participant App as Application (VS Code)
participant OS as Windows OS
participant Proxy as Proxy Server
participant MITM as MITM Server
participant Web as Internet
Note over App,Proxy: 1. Plain HTTP Tunneling
App->>Proxy: CONNECT google.com:443
Proxy-->>App: 200 Connection Established
Note over Proxy,MITM: 2. The "Hand-Off" Trick
Proxy->>MITM: Pipe socket data (raw encrypted bytes)
Note over App,MITM: 3. TLS Handshake and Decryption
MITM-->>App: ServerHello (signed by local root CA)
App->>MITM: Encrypted request (GET /)
Note over MITM: 4. Interception Logic
MITM->>MITM: Decrypt → Inspect headers → Log
Note over MITM,Web: 5. Upstream Forwarding
MITM->>Web: New HTTPS request (GET /)
Web-->>MITM: Response
MITM-->>App: Response

Le module http standard de Node.js ne peut pas gérer facilement la méthode CONNECT (utilisée pour les tunnels HTTPS) et le trafic HTTPS normal sur la même instance de serveur.
CONNECT. Il agit comme un tube TCP passif.netstat)Comment savons-nous quelle application envoie le trafic ? Les paquets TCP eux-mêmes n'ont pas d'étiquette « ID de processus ».
netstat -ano pour trouver quel PID possède le port 54321.Nous utilisons les flux (Streams) de Node.js pour gérer les données efficacement. Au lieu d'attendre le téléchargement complet de la réponse de 10 Mo avant de l'afficher, nous « bifurquons » le flux :
PassThrough, permettant une surveillance en temps réel avec une latence ajoutée minimale.GNU GPL v3.0
FriendlyName unique (« PacketPirateRoot »), garantissant que nous ne touchons jamais aux autres certificats utilisateur.