curl-impersonate ist ein spezieller Curl-Build, der gängige Webbrowser wie Chrome, Edge, Safari und Firefox imitieren kann
- Führt TLS- und HTTP-Handshakes identisch zu echten Browsern aus
- Kann als Kommandozeilen-Tool verwendet oder als Bibliothek integriert werden
- Wichtigkeit
- Wenn ein HTTP-Client auf TLS-Websites zugreift, führt er einen TLS-Handshake durch; dabei können die Eigenschaften des Clients identifiziert werden
curl-impersonate macht diese Handshakes identisch zu denen echter Browser, sodass Webdienste den Client nicht identifizieren können
- Technische Umsetzung
- Curl wird mit BoringSSL, der TLS-Bibliothek von Google, kompiliert.
- Verschiedene TLS-Erweiterungen und SSL-Optionen werden angepasst.
- HTTP/2-Verbindungseinstellungen werden geändert.
- Curl wird mit nicht standardmäßigen Flags ausgeführt.
- Unterstützte Browser
- Kann verschiedene Browserversionen wie Chrome, Edge, Safari und Firefox imitieren.
- Für jeden Browser werden Skripte bereitgestellt.
- Grundlegende Verwendung
- Für jeden unterstützten Browser werden Wrapper-Skripte zum Ausführen von
curl-impersonate bereitgestellt.
- Beispiel:
curl_chrome123 https://www.wikipedia.org
- Erweiterte Verwendung
- Mit der Bibliothek
libcurl-impersonate ist die Konfiguration über eine API möglich.
- Mit der Umgebungsvariable
CURL_IMPERSONATE kann die Bibliothek zur Laufzeit ersetzt werden.
- Installation
- Vorkompilierte Binärdateien für Windows, Linux und macOS werden auf der GitHub-Releases-Seite bereitgestellt.
- Kann auch über Docker-Images verwendet werden.
- Dieses Repository ist ein aktiver gepflegter Fork von
curl-impersonate und weist die folgenden wesentlichen Unterschiede auf
- Unterstützung für Encrypted Client Hello (ECH): Hinzugefügte ECH-Funktion, eingeführt in Chrome 119.
- Unterstützung für ZSTD-Komprimierung: Unterstützung für das in Chrome 123 eingeführte ZSTD-Komprimierungsprotokoll.
- Unterstützung für die Kurve X25519Kyber768: Hinzugefügte neue kryptografische Kurve, eingeführt in Chrome 124.
- Erweiterte Akamai-HTTP/2-Fingerprint-Optionen: Verbesserte HTTP/2-Fingerprint-Optionen, einschließlich Safari.
- Upgrade auf die neueste Curl-Version: Versionsupdate auf Curl 8.7.1.
- Konfigurierbare TLS-Erweiterungsreihenfolge und GREASE: Hinzugefügte Optionen zum Aktivieren/Deaktivieren von GREASE sowie zur Reihenfolge von TLS-Erweiterungen.
- Vorbereitung für die Unterstützung von WebKit- und Gecko-basierten Browsern: Arbeit an einer einzelnen Binärdatei für Chrome und Firefox läuft.
1 Kommentare
Hacker-News-Kommentare
Es gibt ein Projekt, das über Python-Bindings eine
requests-ähnliche API bereitstellt. Damit lassen sich HTTP-Anfragen einfach stellen, ohne den gesamten Browser-Stack auszuführenAuf bestimmten Websites ist JavaScript-basierte Browser-Erkennung nötig. Selbst
puppeteer-extra-plugin-stealthkann ausgehebelt werdenDas Build-Skript ist kompliziert. Es verwendet autotools, aber man muss in Unterverzeichnissen bauen
make-Skript funktionierte besser-Werrorlöste das Problem. Die Liste der Abhängigkeiten ist unvollständiglibc++-XX-devundlibc++abi-XX-devwerden benötigt. Der Installationsprozess ist etwas unvollständigIch habe ein ähnliches Projekt für Python erstellt. Ich suche jemanden, der beim Windows-Build helfen kann
Nur wenige Websites verwenden JA3/JA4-Fingerprinting. Es gibt auch Websites, die fortgeschrittene Techniken einsetzen, um Header mit Fingerprints zu verknüpfen
Mit
ja3proxywird überutlsein HTTP-Proxy bereitgestellt. Besondere Funktionen für HTTP/2 gibt es nichtIn Go wird hauptsächlich das Paket
tls-clientverwendetInteressant ist auch die Geschichte darüber, dass AI-Scraper-Farmen Websites per DDoS angreifen
Ich finde, solche Projekte sollten nicht veröffentlicht werden. Der Feind könnte unter uns sein
Wenn man Daten von bestimmten Websites lesen muss, verhindern Handshake-Informationen, dass man sie per Software auslesen kann