curl-impersonate est une version spéciale de curl capable d’imiter les principaux navigateurs web comme Chrome, Edge, Safari et Firefox
- Il effectue les handshakes TLS et HTTP exactement comme un vrai navigateur
- Il peut être utilisé comme outil en ligne de commande ou intégré comme bibliothèque
- Importance
- Lorsqu’un client HTTP accède à un site web en TLS, il effectue un handshake TLS, et ce processus peut permettre d’identifier les caractéristiques du client
curl-impersonate rend ces handshakes identiques à ceux d’un vrai navigateur afin que les services web ne puissent pas identifier le client
- Implémentation technique
- curl est compilé avec BoringSSL, la bibliothèque TLS de Google.
- Diverses extensions TLS et options SSL sont modifiées.
- Les paramètres de connexion HTTP/2 sont ajustés.
- curl est exécuté avec des drapeaux non standard.
- Navigateurs pris en charge
- Il peut imiter différentes versions de navigateurs comme Chrome, Edge, Safari et Firefox.
- Des scripts sont fournis pour chaque navigateur.
- Utilisation de base
- Des scripts wrapper sont fournis pour exécuter
curl-impersonate pour chaque navigateur pris en charge.
- Exemple :
curl_chrome123 https://www.wikipedia.org
- Utilisation avancée
- Il peut être configuré via une API en utilisant la bibliothèque
libcurl-impersonate.
- La bibliothèque peut être remplacée à l’exécution à l’aide de la variable d’environnement
CURL_IMPERSONATE.
- Installation
- Des binaires précompilés pour Windows, Linux et macOS sont disponibles sur la page des releases GitHub.
- Il peut aussi être utilisé via une image Docker.
- Ce dépôt est un fork plus activement maintenu de
curl-impersonate, avec les principales différences suivantes
- Prise en charge de Encrypted Client Hello (ECH) : ajout de la fonctionnalité ECH introduite dans Chrome 119.
- Prise en charge de la compression ZSTD : prise en charge du protocole de compression ZSTD introduit dans Chrome 123.
- Prise en charge de la courbe X25519Kyber768 : ajout de la nouvelle courbe cryptographique introduite dans Chrome 124.
- Extension des options d’empreinte Akamai HTTP/2 : amélioration des options d’empreinte HTTP/2, y compris pour Safari.
- Mise à niveau vers une version récente de curl : version mise à jour vers curl 8.7.1.
- Ordre des extensions TLS et configuration de GREASE : ajout d’options pour définir l’ordre des extensions TLS et activer/désactiver GREASE.
- Préparation du support des navigateurs basés sur Webkit et Gecko : des travaux sont en cours sur un binaire unique pour Chrome et Firefox.
1 commentaires
Avis Hacker News
Il existe un projet qui, via des bindings Python, fournit une API similaire à
requests. Cela permet d’effectuer facilement des requêtes HTTP sans exécuter toute la stack d’un navigateurCertains sites nécessitent une détection de navigateur basée sur JavaScript. Il est même possible de neutraliser
puppeteer-extra-plugin-stealthLe script de build est complexe. Il utilise autotools, mais il faut lancer le build depuis un sous-répertoire
makefonctionnait mieux-Werror. La liste des dépendances est incomplètelibc++-XX-devetlibc++abi-XX-devsont nécessaires. Le processus d’installation est un peu incompletJ’ai créé un projet similaire pour Python. Je cherche quelqu’un pour aider sur les builds Windows
Seul un petit nombre de sites utilisent l’empreinte JA3/JA4. Certains emploient aussi des techniques avancées pour corréler les en-têtes et l’empreinte
J’utilise
ja3proxypour exposer un proxy HTTP viautls. Il n’y a pas de fonctionnalité particulière pour HTTP/2En Go, c’est surtout le package
tls-clientqui est utiliséHistoire liée au fait que des fermes de scrapers IA provoquent des DDoS sur des sites, et sujet intéressant
Je pense que ce type de projet ne devrait pas être publié. L’ennemi pourrait être parmi nous
Si l’on doit lire des données sur certains sites web, les informations de handshake empêchent qu’elles soient lues par logiciel