
Un proxy sigiloso HTTP de nueva generación que enmascara perfectamente las peticiones como el navegador Chrome en todas las capas de la pila.
"¡No me lo creo, camuflaje termoóptico!"
Es un proxy HTTP diseñado para evadir servicios que utilizan huellas digitales como JA4+ para bloquear ciertos clientes HTTP. Con este proxy, puedes usar tus clientes HTTP preferidos como curl y aun así tener huellas digitales mágicamente indistinguibles de un navegador web real (Chrome/Chromium). thermoptic también incluye algunas funciones divertidas para mitigar la toma de huellas digitales basada en JavaScript. Además, facilita el scraping híbrido combinando un navegador web y clientes HTTP de bajo nivel.
Incluso si no estás familiarizado con la toma de huellas digitales JA4+, si has hecho scraping, probablemente te hayan bloqueado por ello antes. Servicios populares como Cloudflare usan estas técnicas (y otros trucos) para detectar el uso de clientes HTTP "no humanos" y bloquear solicitudes. Estos servicios también pueden usar esta toma de huellas digitales para detectar si inicias una sesión con un navegador real y luego cambias a un cliente de bajo nivel como curl más adelante. thermoptic resuelve todos estos problemas presentando una huella digital de navegador "real" unificada para todas las solicitudes de scraping.
A continuación se muestra un ejemplo de la huella digital JA4H (HTTP) de curl sin el proxy:```
$ curl https://ja4db.com/id/ja4h/
ge11nn090000_b6a016211e8a_000000000000_e3b0c44298fc
Esto es bastante diferente de la huella que Chrome produce cuando visitas la URL directamente:```
ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
Sin embargo, cuando usamos el proxy para hacer la petición, nuestra huella JA4H es mágicamente idéntica:``` $ curl --proxy http://thermoptic:1234 https://ja4db.com/id/ja4h/ ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
(Lo mismo aplica para nuestra huella digital TLS JA4, etc.).
## Configuración
Para iniciar un proxy `thermoptic` que oculta tu tráfico a través de una instancia de Chrome contenerizada en Ubuntu 22.04:
Configuración normal de Docker (funciona en hosts sin runtime de GPU):```
docker compose up --build
Eso es todo, ahora puedes enrutar el tráfico a través de él:``` curl --proxy http://127.0.0.1:1234 --insecure https://ja4db.com/id/ja4h/
Notas importantes:
* Por defecto, el proxy se ejecuta sin autenticación. Si planeas exponer el proxy externamente, asegúrate de configurar la autenticación con las variables de entorno `PROXY_USERNAME` y `PROXY_PASSWORD`.
* Si no quieres usar `---insecure`, necesitas usar el archivo CA generado ubicado en `./ssl/rootCA.crt`. Este se genera la primera vez que ejecutas `thermoptic`.
* Puedes conectar `thermoptic` a cualquier instancia de Chrome/Chromium lanzada con el flag `--remote-debugging-port`. Esto es esencial, ya que querrás configurar y hacer proxy a través de entornos más comunes para mantener tu huella lo más discreta posible (p. ej., Chrome en Windows).
* La anulación de compose para GPU está pensada para hosts NVIDIA que ya tengan instalado el runtime/toolkit NVIDIA de Docker. Reserva el dispositivo GPU, monta `/dev/dri` y permite que el contenedor de Chrome incluido cambie a la ruta de renderizado NVIDIA/Vulkan. Para usar esto, ejecuta `docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build`.
## Features
- 🕵️ [Proxy con paridad de navegador](#how-does-this-cloaking-work-exactly) que reproduce las peticiones a través de una sesión real de Chrome para igualar las huellas JA4 byte por byte.
- 🤝 Se requiere poco o ningún código personalizado para integrar tu cliente HTTP (p. ej., `curl`, `requests`, etc.) con `thermoptic`; solo [configura el proxy](#setup) y tus huellas quedarán gestionadas.
- 🪝 [Framework de hooks](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) para automatización antes de la petición, después de la petición o al inicio, de modo que puedas controlar el navegador completo para resolver desafíos o capturar artefactos.
- 📘 Un ejemplo de hook para resolver Cloudflare Turnstile se puede ver en [`./hooks/onstart.js`](https://github.com/mandatoryprogrammer/thermoptic/blob/main/hooks/onstart.js).
- 🖥️ [Interfaz de control del navegador web](#control-the-dockerized-chrome-browser-via-web-ui-xpra) (en `http://127.0.0.1:14111`) para controlar la ventana del navegador Chrome en Docker. Útil para iniciar sesión manualmente en sitios y luego usar el proxy sin problemas para hacer peticiones como tu sesión iniciada (y para depuración).
- 🔌 Establece una URI de proxy HTTP o SOCKS ascendente mediante la variable de entorno `UPSTREAM_PROXY` en `docker-compose.yml`.
- 🛡️ Comprobaciones de salud integradas y bucle de control de reinicio para detectar navegadores congelados y recuperarse automáticamente sin necesidad de supervisión manual.
- ⚡ Compatible con HTTP/1.1 y HTTP/2, lo que permite realizar proxy del tráfico sobre cualquiera de los dos protocolos. (_Ten en cuenta que puedes hablar HTTP/1.1 con el proxy, y el Chrome manipulado puede negociar con el sitio final mediante un protocolo diferente._)
## ¿Cómo funciona exactamente este camuflaje?

* Se realiza una petición HTTP usando un cliente HTTP como `curl` con `thermoptic` configurado como proxy.
* `thermoptic` analiza la petición para determinar lo mejor posible qué tipo de petición de navegador se *supone* que es (p. ej., ¿visita manual de URL? ¿Envío de formulario? ¿Una petición `fetch()`?).
* `thermoptic` utiliza el [Protocolo de Depuración de Chrome (CDP)](https://chromedevtools.github.io/devtools-protocol/) para manipular el navegador y preparar una página que simula la petición exactamente como ocurriría normalmente en un navegador web real.
* `thermoptic` dispara la petición a través del contexto simulado y captura la respuesta HTTP.
* `thermoptic` envía la respuesta HTTP de vuelta al cliente.
Debido a que el navegador es quien realiza realmente la petición usando su pila completa, las huellas JA4 resultantes son idénticas.
NOTA: Debido a que muchos WAF emplean fingerprinting a nivel de JavaScript de los navegadores web, `thermoptic` también expone hooks para utilizar el navegador en pasos clave del proceso de scraping. Consulta [esta sección](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) para más información al respecto.
## ¿Por qué *este* enfoque frente a otras soluciones?
Siendo francos: otros enfoques tienen fallos fundamentales que les impiden ser una solución práctica a largo plazo para el problema del fingerprinting de navegador.
Muchos otros intentos de "vencer" el fingerprinting JA4+ del navegador lo hacen reimplementando las distintas capas de la pila del navegador. Este enfoque tiene varios inconvenientes graves, como: