Aller au contenu

Règles de réécriture et points d’arrêt

La capture permet de « regarder », les règles et les points d’arrêt permettent de « changer ». Trace Eagle fait de vous le maître de votre trafic : modifiez les requêtes sans écrire de code, à l’aide de règles pointer-cliquer simples et directes pour réécrire automatiquement des milliers de flux ; ou utilisez des points d’arrêt pour mettre en pause et éditer les flux un à un ; ce n’est que pour la logique complexe que les règles ne peuvent véritablement pas exprimer que vous devez vous rabattre sur des scripts / plugins.


1. Règles de réécriture (pointer-cliquer simple, changements automatiques)

Section intitulée « 1. Règles de réécriture (pointer-cliquer simple, changements automatiques) »

La pire façon de commencer à modifier des requêtes, c’est d’écrire un script. Ici, vous n’en avez pas besoin : choisissez une action dans un aide-mémoire et renseignez une valeur, et voilà une règle : simple, intuitive, et appliquée dès l’instant où vous la créez.

Les règles sont à raison d’une par ligne, de la forme <match> <action>://<value> (par exemple *.example.com resHeaders://X-Debug: 1). Les lignes vides et les commentaires # sont ignorés, chaque ligne est validée individuellement, et les changements sont appliqués à chaud à l’enregistrement ; les règles peuvent être organisées en groupes nommés et activées ou désactivées groupe par groupe. L’interface est fournie avec un aide-mémoire cliquable : un clic insère l’exemple correspondant, il ne reste plus qu’à éditer la valeur, sans aucune syntaxe à mémoriser.

Règles de réécriture : une règle par ligne à gauche, avec prise en charge des groupes et des commentaires, un aide-mémoire d’actions cliquable à droite (redirection / mock / édition des en-têtes / empreinte / point d’arrêt, etc.)

  • Domaine exact : traceeagle.com (peut inclure un préfixe de chemin traceeagle.com/path)
  • Sous-domaine générique : *.traceeagle.com (correspond au domaine apex ainsi qu’à tous les sous-domaines)
  • Expression régulière sur l’URL entière : regex://…
  • URL complète exacte : $https://host/path
  • Port : :8080
  • Négation : préfixez n’importe quelle correspondance par !

Sens requête

  • Rediriger / réacheminer : modifier l’IP cible composée (host), mapper vers une autre URL complète (map-remote, peut pointer vers un serveur de développement local), passer par un proxy amont http/socks5, ou rétablir les caractéristiques réseau des requêtes d’un client à celles d’un client standard (reproduction fidèle).
  • Simuler de fausses données (mock) : mock://200 ou mock://200|<body>, renvoyer une réponse prédéfinie sans atteindre le serveur, une bouée de sauvetage quand le frontend attend une API backend.
  • Éditer la ligne de requête / les en-têtes : méthode, User-Agent, Referer, authentification Basic, X-Forwarded-For, Content-Type / charset, Cookie, fusion des paramètres de requête, recherche-remplacement dans l’URL.
  • Éditer le corps de la requête : remplacement complet / recherche-remplacement / ajout à la fin / ajout au début / export vers un fichier local.

Sens réponse

  • Éditer le statut / les en-têtes : modifier le code de statut, ajouter ou supprimer n’importe quel en-tête de réponse, Set-Cookie, ouvrir le CORS en un clic, forcer un téléchargement en pièce jointe, contrôle du cache (désactiver la mise en cache ou définir max-age), désactiver Cookie/compression/keep-alive, recherche-remplacement sur la valeur des en-têtes.
  • Éditer le corps de la réponse : remplacement complet / recherche-remplacement / ajout à la fin / ajout au début / fusion JSON superficielle.
  • Injecter selon le type : uniquement lorsque le Content-Type correspond, injecter ou remplacer des scripts, des styles ou des extraits dans du HTML / JS / CSS.

Réseau et protocole

  • Exporter vers un fichier : outre le corps de la requête / réponse, la requête / réponse brute entière peut aussi être exportée vers un fichier local en un clic, pour l’archivage ou l’analyse hors ligne.
  • Simulation de réseau dégradé : délai sur la requête / réponse (millisecondes), limitation de la bande passante (avec préréglages 2G / 3G / 4G).
  • Réécriture de trames WebSocket : remplacement old=>new par sens (dans les deux sens / du client vers le serveur / du serveur vers le client).
  • Réécriture TCP / UDP brut : remplacement par sens sur les flux d’octets non-HTTP / datagrammes SOCKS5 UDP.

Les valeurs des règles peuvent utiliser des variables dynamiques telles que ${url} ${host} ${port} ${method} ${status} ${now} ${random} ${randomUUID} ${req.headers.X} ${res.headers.X}, ainsi que des valeurs nommées personnalisées {name} (définissez une valeur commune une fois, référencez-la partout). Les valeurs nommées {name} sont utilisées principalement dans les réécritures de requête / réponse ; les valeurs de remplacement de la réécriture de trames WebSocket prennent en charge ${...}.


Pour les flux qui nécessitent un contrôle précis, au cas par cas, utilisez un point d’arrêt pour mettre en pause et faire apparaître un éditeur avant l’envoi de la requête ou avant le retour de la réponse.

  • Déclenché par une règle : utilisez une règle breakpoint://req|res|both pour marquer précisément quels flux intercepter.
  • Interrupteur d’interception global : activez l’interception pour toute la session, puis restreignez éventuellement la portée avec des règles de filtrage d’interception (filtrer par domaine / méthode / étape) ; sans règles, tout est intercepté.

Ce que vous pouvez changer une fois l’interception faite

Section intitulée « Ce que vous pouvez changer une fois l’interception faite »
  • Étape requête : méthode, URL (l’hôte suit l’URL), en-têtes, corps.
  • Étape réponse : code de statut, en-têtes de réponse, corps de réponse.
  • Abandonner directement : Abort supprime cette requête / réponse (le client reçoit une erreur de passerelle).
  • Les flux correspondant à plusieurs déclenchements font la queue pour que vous les traitiez : vous pouvez reprendre chacun (Resume), l’abandonner (Abort), ou tout reprendre d’un coup. Les flux laissés sans traitement pendant longtemps sont automatiquement repris sans modification, si bien que le trafic n’est jamais bloqué indéfiniment.

Pour la logique que les règles ne peuvent pas exprimer, confiez-la à un script ou à un plugin :

  • Scripts JavaScript : définissez onRequest(req) / onResponse(resp) et éditez les champs directement pour que cela prenne effet. Les fonctions d’aide intégrées incluent la journalisation, les appels sortants synchrones vers d’autres services, la mise en réserve de données entre les requêtes (pour des compteurs / jetons en cache), l’encodage/décodage Base64, et plus encore.
  • Plugins sortants HTTP : utilisez une règle plugin://name pour transmettre la requête / réponse à votre propre service de plugin pour traitement (appelé via HTTP), et le plugin renvoie le contenu réécrit (ou le simule directement). Indépendant du langage, adapté aux équipes pour implémenter un traitement personnalisé dans n’importe quel langage.

Un flux traverse, dans l’ordre : règles de requête, scripts de requête, plugins de requête, point d’arrêt de requête, réacheminement / mock, règles de réponse, scripts de réponse, plugins de réponse, point d’arrêt de réponse. Le principe est simple : d’abord les règles automatiques, puis les scripts, puis les plugins, et ce n’est qu’en dernier qu’un point d’arrêt intervient manuellement, chacun faisant son propre travail sans empiéter sur les autres.


Retour à Capture par proxy · En lien : Composer et rejouer