
Un proxy HTTP furtif de nouvelle génération qui déguise parfaitement les requêtes en navigateur Chrome sur toutes les couches de la pile.
« Je n'y crois pas, le camouflage thermoptique ! »
Ceci est un proxy HTTP conçu pour contourner les services qui utilisent le fingerprinting tel que JA4+ pour bloquer certains clients HTTP. Avec ce proxy, vous pouvez utiliser vos clients HTTP préférés comme curl et avoir des empreintes numériques magiquement indiscernables de celles d'un vrai navigateur web (Chrome/Chromium). thermoptic propose également quelques fonctionnalités sympas pour atténuer le fingerprinting basé sur JavaScript. Il facilite aussi le scraping hybride en utilisant à la fois un navigateur web et des clients HTTP de bas niveau.
Même si vous n'êtes pas familier avec le fingerprinting JA4+, si vous avez déjà fait du scraping, vous avez probablement déjà été bloqué par ce mécanisme. Des services populaires comme Cloudflare utilisent de telles techniques (et d'autres astuces) pour détecter l'utilisation de clients HTTP « non humains » afin de bloquer les requêtes. Ces services peuvent également utiliser ce fingerprinting pour détecter si vous démarrez une session avec un vrai navigateur, puis passez à un client de bas niveau comme curl plus tard. thermoptic résout tous ces problèmes en présentant une empreinte unifiée de navigateur « réel » pour toutes les requêtes de scraping.
Voici un exemple d'empreinte JA4H (HTTP) de curl sans le proxy :```
$ curl https://ja4db.com/id/ja4h/
ge11nn090000_b6a016211e8a_000000000000_e3b0c44298fc
Ceci est tout à fait différent de l'empreinte que Chrome produit lorsque vous visitez l'URL directement:```
ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
Cependant, lorsque nous utilisons le proxy pour effectuer la requête, notre empreinte JA4H est magiquement identique :``` $ curl --proxy http://thermoptic:1234 https://ja4db.com/id/ja4h/ ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
(Il en va de même pour notre empreinte TLS JA4, etc.).
## Configuration
Pour démarrer un proxy `thermoptic` qui masque votre trafic via une instance Chrome conteneurisée sur Ubuntu 22.04 :
Configuration Docker standard (fonctionne sur les hôtes sans runtime GPU) :```
docker compose up --build
C'est tout, vous pouvez maintenant faire transiter le trafic via celui-ci:``` curl --proxy http://127.0.0.1:1234 --insecure https://ja4db.com/id/ja4h/
Notes importantes :
* Par défaut, le proxy fonctionne sans authentification. Si vous prévoyez d'exposer le proxy à l'extérieur, veuillez configurer l'authentification avec les variables d'environnement `PROXY_USERNAME` et `PROXY_PASSWORD`.
* Si vous ne souhaitez pas utiliser `---insecure`, vous devez utiliser le fichier CA généré situé dans `./ssl/rootCA.crt`. Ce fichier est généré la première fois que vous exécutez `thermoptic`.
* Vous pouvez connecter `thermoptic` à toute instance Chrome/Chromium lancée avec le drapeau `--remote-debugging-port`. C'est essentiel car vous voudrez configurer et utiliser le proxy via des environnements plus courants afin de garder votre empreinte aussi discrète que possible (par exemple Chrome sous Windows).
* La surcharge compose GPU est destinée aux hôtes NVIDIA ayant déjà le runtime/kit NVIDIA de Docker installé. Elle réserve le périphérique GPU, monte `/dev/dri` et permet au conteneur Chrome fourni de basculer vers le chemin de rendu NVIDIA/Vulkan. Pour l'utiliser, exécutez `docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build`.
## Fonctionnalités
- 🕵️ [Proxy à parité navigateur](#how-does-this-cloaking-work-exactly) qui rejoue les requêtes via une session Chrome réelle pour correspondre aux empreintes JA4 octet par octet.
- 🤝 Peu ou pas de code personnalisé nécessaire pour intégrer votre client HTTP (par ex. `curl`, `requests`, etc.) avec `thermoptic`, il suffit de [configurer le proxy](#setup) et vos empreintes sont gérées.
- 🪝 [Framework de hooks](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) pour l'automatisation avant-requête/après-requête/au démarrage, afin de piloter le navigateur complet pour résoudre des défis ou capturer des artefacts.
- 📘 Un exemple de hook pour résoudre le turnstile Cloudflare est disponible dans [`./hooks/onstart.js`](https://github.com/mandatoryprogrammer/thermoptic/blob/main/hooks/onstart.js).
- 🖥️ [Interface de contrôle du navigateur web](#control-the-dockerized-chrome-browser-via-web-ui-xpra) (à `http://127.0.0.1:14111`) pour contrôler la fenêtre du navigateur Chrome dockerisé. Utile pour vous connecter manuellement à des sites puis utiliser le proxy de manière transparente pour effectuer des requêtes dans votre session connectée (et pour le débogage).
- 🔌 Définissez un URI de proxy HTTP ou SOCKS en amont via la variable d'environnement `UPSTREAM_PROXY` dans `docker-compose.yml`.
- 🛡️ Contrôles de santé intégrés et boucle de contrôle de redémarrage pour détecter les navigateurs figés et récupérer automatiquement sans surveillance de l'opérateur.
- ⚡ Prend en charge HTTP/1.1 et HTTP/2, permettant de proxifier le trafic via l'un ou l'autre protocole. (_Notez que vous pouvez parler en HTTP/1.1 au proxy, et que le Chrome piloté peut négocier avec le site final via un protocole différent._)
## Comment fonctionne ce cloaking exactement ?

* Une requête HTTP est effectuée à l'aide d'un client HTTP tel que `curl` avec `thermoptic` configuré comme proxy.
* `thermoptic` analyse la requête pour déterminer au mieux quel type de requête navigateur elle est *censée* être (par ex. visite manuelle d'URL ? Envoi de formulaire ? Une requête `fetch()` ?).
* `thermoptic` utilise le [Chrome Debugging Protocol (CDP)](https://chromedevtools.github.io/devtools-protocol/) pour piloter le navigateur et configurer une page qui simule la requête exactement comme elle se produirait normalement dans un vrai navigateur web.
* `thermoptic` déclenche la requête via le contexte simulé et capture la réponse HTTP.
* `thermoptic` renvoie la réponse HTTP au client.
Étant donné que le navigateur effectue réellement la requête en utilisant sa pile complète, les empreintes JA4 résultantes sont identiques.
NOTE : En raison des nombreux WAF qui utilisent l'empreinte JavaScript des navigateurs web, `thermoptic` expose également des hooks pour utiliser le navigateur lors des étapes clés du processus de scraping. Voir [cette section](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) pour plus d'informations.
## Pourquoi *cette* approche plutôt que d'autres solutions ?
Pour être direct : les autres approches présentent des défauts fondamentaux qui les empêchent d'être une solution pratique à long terme au problème de l'empreinte navigateur.
De nombreuses autres tentatives pour « battre » l'empreinte JA4+ des navigateurs réimplémentent les différentes couches de la pile navigateur. Cette approche présente un certain nombre d'inconvénients sérieux, tels que :