π₯· curl-impersonate β curl, ΠΏΡΠΈΡΠ²ΠΎΡΡΡΡΠΈΠΉΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΠΎ TLS-ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ)
Π ΡΡΠΌ Π·Π°ΠΌΠ΅ΡΠΊΠ°
curl-impersonate β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°
curl, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Β«ΠΏΠΎΡΠ΅ΡΠΊΒ» Π½Π°ΡΡΠΎΡΡΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ²: ΠΈΡ TLS-ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ (ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠΈ JA3/JA4), ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ HTTP/2 ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ΠΠ°ΠΌΠ΅ΡΠΊΠ° ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΡΡΠΎ ΡΡΠΎ Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π»ΠΈ DPI Π²Π°ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π° Π½Π΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ. Π’Π΅ΠΎΡΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½Π° Π² ΠΊΠ΅ΠΉΡΠ΅ Ρ JA4-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π²ΠΎΡΠΎΠ½ΠΊΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ DPI β Π·Π΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ.
Π‘ΡΠ°ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π»ΠΈΠ· ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ
lwthiker/curl-impersonateβ v0.6.1 (ΠΌΠ°ΡΡ 2024), ΠΏΠΎΡΡΠΎΠΌΡ Β«ΡΠ²Π΅ΠΆΠΈΠ΅Β» ΠΏΡΠΎΡΠΈΠ»ΠΈ Π² Π½ΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌ ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Chrome 116, Firefox 117). ΠΡΠΏΠ΅ΡΠ°ΡΠΊΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΡΡΡΠ°ΡΠ΅Π²Π°ΡΡ: ΡΠ΅Π°Π»ΡΠ½ΡΠΉ Chrome 2026 Π³ΠΎΠ΄Π° Π΄Π°ΡΡ ΡΠΆΠ΅ Π΄ΡΡΠ³ΠΎΠΉ JA4, ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ»Ρchrome116. ΠΠ»Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠΎΠ² ΡΠΌΠΎΡΡΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ/Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡcurl_cffiΠ² Python). ΠΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΎΡΠ΄Π°ΡΡ Π²Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄Ρ.
TL;DR
- ΠΠ±ΡΡΠ½ΡΠΉ
curlΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ TLS-ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ, ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎ Β«ΡΠΈΠ³Π½Π°Π»Ρ 2Β» (ΡΠΈΠ½Π³Π΅ΡΠΏΡΠΈΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°) ΠΎΠ½ ΠΈ Π±ΡΠ°ΡΠ·Π΅Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π΄Π»Ρ DPI ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ. - curl-impersonate ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ²Π°Π΅Ρ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»ΠΎ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ (Chrome, Edge, Firefox, Safari) β Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Π½Π°Π±ΠΎΡΠ° TLS-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, ΡΠΈΡΡΠΎΠ½Π°Π±ΠΎΡΠΎΠ², ΠΊΡΠΈΠ²ΡΡ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² HTTP/2.
- ΠΠ»Π°Π²Π½Π°Ρ ΠΏΠΎΠ»ΡΠ·Π° Π΄Π»Ρ ΡΠ΅ΠΌΡ ΠΎΠ±Ρ
ΠΎΠ΄Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ β Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°: ΠΌΠΎΠΆΠ½ΠΎ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π»ΠΈ DPI Π½Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠ»ΠΈ ΡΠ°ΠΉΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π·
curl_ff117, Π½ΠΎ Π½Π΅ ΡΠ΅ΡΠ΅Π·curl_chrome116(ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ) β Π·Π½Π°ΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ΄ΡΡ ΠΏΠΎ JA3/JA4, Π° Π½Π΅ ΠΏΠΎ IP ΠΈΠ»ΠΈ SNI. - ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠ΅ΡΠ΅Π· Π³ΠΎΡΠΎΠ²ΡΠ΅ wrapper-ΡΠΊΡΠΈΠΏΡΡ:
curl_chrome116 https://example.com,curl_ff117 β¦,curl_safari15_3 β¦. - ΠΡΡΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
libcurl-impersonate.soβ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΡΡΠΆΠΎΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π·LD_PRELOAD+CURL_IMPERSONATE=chrome116, Π½Π΅ ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ: ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ DPI) ΠΎΡΠ»ΠΈΡΠ°ΡΡ Β«Π½Π°ΡΡΠΎΡΡΠΈΠΉ Π±ΡΠ°ΡΠ·Π΅ΡΒ» ΠΎΡ Β«ΡΠΊΡΠΈΠΏΡΠ°/Π±ΠΎΡΠ°Β» Π½Π΅ ΠΏΠΎ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Π½Π΅ ΠΏΠΎ IP, Π° ΠΏΠΎ TLS-ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ β Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ TLS-ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΡ.
JA3 / JA4 β ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ²Π΅ΡΠ½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° TLS (ClientHello) Π² ΠΊΠΎΡΠΎΡΠΊΡΡ ΡΡΡΠΎΠΊΡ-Ρ
Π΅Ρ: ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ TLS ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΠ΄ΡΡ ΡΠΈΡΡΠΎΠ½Π°Π±ΠΎΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ»Π»ΠΈΠΏΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΡΠΈΠ²ΡΠ΅ ΠΈ Ρ.Π΄. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠΎΡ Π½Π°Π±ΠΎΡ ΡΠ²ΠΎΠΉ ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎ Π½Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΎΠ·Π½Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Ρ ΡΡΠ°ΡΠΈΠΊ.
ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ: Π΅ΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π°ΠΌΠΈ ΠΈ ΡΠ°ΠΉΡΠΎΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Β«ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡΒ» β ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΡΠΌΠ΅Π΅Ρ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΡΠΎΡ Β«Π°ΠΊΡΠ΅Π½ΡΒ» Ρ Chrome, Firefox ΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ curl ΡΠ°Π·Π½ΡΠΉ, ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ»ΡΡΠΈΡ ΡΠ°Π·Π½ΠΈΡΡ, Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π½ΠΈ ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ HTTP-ΠΊΠ»ΠΈΠ΅Π½ΡΡ (curl, requests, Go net/http) Π·Π²ΡΡΠ°Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΊ Π±ΡΠ°ΡΠ·Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ:
- ΡΠ΅ΡΠ²ΠΈΡΡ Ρ Π°Π½ΡΠΈ-Π±ΠΎΡ-Π·Π°ΡΠΈΡΠΎΠΉ ΠΈΡ
Π±Π»ΠΎΠΊΠΈΡΡΡΡ, ΠΎΡΠ΄Π°Π²Π°Ρ ΠΊΠ°ΠΏΡΡ ΠΈΠ»ΠΈ
403; - Π° DPI, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΌΠΎΠΆΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΉ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ (ΠΊΠ°ΠΊ Π² ΠΊΠ΅ΠΉΡΠ΅, Π³Π΄Π΅ Chromium Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Π» ΡΠ°ΠΉΡ, Π°
curlΠΎΡΠΊΡΡΠ²Π°Π»).
curl-impersonate ΡΠ΅ΡΠ°Π΅Ρ ΠΎΠ±Π΅ ΡΡΠΎΡΠΎΠ½Ρ Π·Π°Π΄Π°ΡΠΈ: ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ curl-Ρ Π·Π²ΡΡΠ°ΡΡ ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π±ΡΠ°ΡΠ·Π΅Ρ β Π° Π·Π½Π°ΡΠΈΡ, Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠΎΠ²Π½ΠΎ ΡΠΎΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ.
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈΠΌΠΈΡΠ°ΡΠΈΡ
curl-impersonate Π΄ΠΎΠ±ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π° ΡΡΡΡ ΡΡΠΎΠ²Π½ΡΡ ΡΡΠ°Π·Ρ β ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½ΠΈΠΆΠ΅, Π½Π° ΡΡΠΎΠ²Π½Π΅ TLS.
- TLS-ΡΡΠΎΠ²Π΅Π½Ρ. Π‘Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ Chrome ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Ρ BoringSSL (TLS-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Google), ΠΏΠΎΠ΄ Firefox β Ρ NSS (TLS-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Mozilla). ΠΡΠΎ Π½Π΅ ΠΊΠΎΡΠΌΠ΅ΡΠΈΠΊΠ°: ΡΠ°ΠΌ ΡΡΠ΅ΠΊ TLS Π±Π΅ΡΡΡΡΡ Β«ΡΠΎΠ΄Π½ΠΎΠΉΒ» Π΄Π»Ρ ΠΈΠΌΠΈΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΏΠ»ΡΡ ΠΏΡΠ°Π²ΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΡΠΈΡΡΠΎΠ½Π°Π±ΠΎΡΡ ΠΈ ΠΊΡΠΈΠ²ΡΠ΅, ΡΡΠΎΠ±Ρ
ClientHelloΡΠΎΠ²ΠΏΠ°Π» Π±Π°ΠΉΡ-Π²-Π±Π°ΠΉΡ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ. - HTTP/2-ΡΡΠΎΠ²Π΅Π½Ρ. ΠΠΎΠ΄Π³ΠΎΠ½ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ HTTP/2-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ (SETTINGS, WINDOW_UPDATE) ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² β ΠΏΠΎ Π½ΠΈΠΌ ΡΠΎΠΆΠ΅ ΡΡΡΠΎΡΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ (ΡΠΌ. 3).
- HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. Wrapper-ΡΠΊΡΠΈΠΏΡΡ Π²ΡΡΡΠ°Π²Π»ΡΡΡ Π½Π°Π±ΠΎΡ ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² (
User-Agent,Accept,sec-ch-*ΠΈ Ρ.Π΄.) ΠΊΠ°ΠΊ Ρ Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ: Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ User-Agent ΠΈ ΡΡΠ°ΡΡ Chrome β DPI ΠΈ Π°Π½ΡΠΈ-Π±ΠΎΡ-ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΌΠΎΡΡΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅, Π° Π½Π΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎ ΡΠ΅Π±Π΅ ΠΏΠΈΡΠ΅Ρ. curl-impersonate ΡΠΈΠ½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΠΌΠ°Π½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ (Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ v0.6.1)
| ΠΡΠ°ΡΠ·Π΅Ρ | ΠΡΠΎΡΠΈΠ»ΠΈ (Π²Π΅ΡΡΠΈΠΈ) |
|---|---|
| Chrome | 99, 100, 101, 104, 107, 110, 116 (Win10); 99 (Android 12) |
| Edge | 99, 101 (Win10) |
| Firefox | 91 ESR, 95, 98, 100, 102, 109, 117 (Win10) |
| Safari | 15.3, 15.5 (macOS) |
ΠΠΎΠ»Π½ΡΠΉ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ Π»Π΅ΠΆΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ browsers.json Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠΌΡ ΠΏΡΠΎΡΠΈΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, chrome116) β ΡΡΠΎ ΠΈ Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΡΡΠΈΠΊΡ wrapper-ΡΠΊΡΠΈΠΏΡΠ°.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠΎΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ Π΄Π»Ρ Linux ΠΈ macOS (Intel) Π΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Π»ΠΈΠ·ΠΎΠ². ΠΠ°ΡΠΈΠ°Π½ΡΡ:
- Docker (Π±ΡΡΡΡΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΡΠ°Π²Ρ Π² ΡΠΈΡΡΠ΅ΠΌΡ):
docker pull lwthiker/curl-impersonate:0.6-chrome
docker run --rm lwthiker/curl-impersonate:0.6-chrome curl_chrome110 https://www.wikipedia.org- Arch Linux (AUR):
yay -S curl-impersonate-bin - macOS (Homebrew, ΡΠΎΠ»ΡΠΊΠΎ Chrome):
brew tap shakacode/brewΠ·Π°ΡΠ΅ΠΌbrew install curl-impersonate - ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Firefox-ΡΠ±ΠΎΡΠΊΠΈ Π½Π° Linux (Π½ΡΠΆΠ΅Π½ NSS):
sudo apt install libnss3 nss-plugin-pem ca-certificatesΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
Π§Π΅ΡΠ΅Π· wrapper-ΡΠΊΡΠΈΠΏΡΡ (ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΡΡ)
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΈΠ»Ρ Π΅ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ-ΠΎΠ±ΡΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΡΠΆΠ½ΡΠ΅ TLS-ΠΎΠΏΡΠΈΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ:
curl_chrome116 https://www.wikipedia.org
curl_ff117 https://www.wikipedia.org
curl_safari15_3 https://www.wikipedia.orgΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ curl:
curl_chrome116 -H "Custom-Header: value" -v https://example.comΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ (ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ)
- ΠΡΠΊΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ
curlβ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ (ΡΡΠΏΠ΅Ρ /RST/ΡΠ°ΠΉΠΌΠ°ΡΡ). - ΠΠΎΠ²ΡΠΎΡΠΈΡΡ ΡΠ΅ΡΠ΅Π·
curl_chrome116(Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΉ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ Chromium). - ΠΠΎΠ²ΡΠΎΡΠΈΡΡ ΡΠ΅ΡΠ΅Π·
curl_ff117(ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ Firefox) β Ρ Π½Π΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ JA4. - Π‘ΡΠ°Π²Π½ΠΈΡΡ: Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ, Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΡΡΡ (
TCP RetransmissionβRST) ΠΏΡΠΈ ΡΠΎΠΌ ΠΆΠ΅ IP ΠΈ SNI β Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ΄ΡΡ ΠΏΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π° Π½Π΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ. ΠΡΠΎ ΡΠΎΠ²Π½ΠΎ ΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ Π² ΠΊΠ΅ΠΉΡΠ΅ JA4-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
Π§Π΅ΡΠ΅Π· libcurl (Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ)
Π ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ Π΅ΡΡΡ libcurl-impersonate.so Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ:
CURLcode curl_easy_impersonate(struct Curl_easy *data,
const char *target, // Π½Π°ΠΏΡ. "chrome116"
int default_headers); // ΡΡΠ°Π²ΠΈΡΡ Π»ΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈΠ ΡΡΠΆΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ libcurl, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ Π±Π΅Π· ΠΏΡΠ°Π²ΠΊΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° β ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° Linux:
LD_PRELOAD=/path/to/libcurl-impersonate.so \
CURL_IMPERSONATE=chrome116 \
my_appΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ CURL_IMPERSONATE_HEADERS=no ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΈΡ
Π²ΡΡΡΠ½ΡΡ.
ΠΠ΅ΡΠ΄ΠΈΠΊΡ: ΡΡΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π° Π½Π΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π°
curl-impersonate ΡΠ΄ΠΎΠ±Π΅Π½, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΠΏΡΠΎΠ²Π΅ΡΠ³Π½ΡΡΡ Π³ΠΈΠΏΠΎΡΠ΅Π·Ρ, ΡΡΠΎ Π²Π°Ρ ΡΠ΅ΠΆΡΡ ΠΏΠΎ JA3/JA4-ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ. ΠΠ»Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π° DPI ΠΎΠ½ Π½Π΅ Π½ΡΠΆΠ΅Π½ β ΡΠ°ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ (uTLS/REALITY-ΡΠΈΠ½Π³Π΅ΡΠΏΡΠΈΠ½Ρ Π² VLESS, Π΄Π΅ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π² Zapret). ΠΠΎ ΠΊΠ°ΠΊ Β«ΠΏΡΠΎΠ±Π½ΠΈΠΊΒ» Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΎΠ½ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌ: Π΄Π°ΡΡ Π±ΡΡΡΡΡΠΉ, ΡΠΊΡΠΈΠΏΡΡΠ΅ΠΌΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΡΠ»Π°ΡΡ Π² ΡΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ
ClientHello, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ.
π Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
- ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ JA4-ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° (ΠΊΠ΅ΠΉΡ wireflow.space) β Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ: ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π³Π΄Π΅ Chromium ΡΠ΅Π·Π°Π»ΡΡ, Π°
curlΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ» - ΠΠ°ΠΊ DPI Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅: Π²ΠΎΡΠΎΠ½ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ β Π³Π΄Π΅ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΡΠΎΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
- 3 β Π²ΡΠΎΡΠΎΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΆΠ΅ ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ curl-impersonate
- π curl-impersonate Π½Π° GitHub β ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ, ΡΠ΅Π»ΠΈΠ·Ρ,
browsers.json - π Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅Π»ΠΈΠ·ΠΎΠ² β Π³ΠΎΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ ΠΈ Docker-ΠΎΠ±ΡΠ°Π·Ρ
π€ ΠΡΠΈ ΡΡΠ°ΡΡΠΈ ΠΎΡΠΊΡΡΡΡ β ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ°ΡΡ Π½Π° Π½ΠΈΡ ΠΠ
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΠ΅Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΠ Π½Π° Π½Π°ΡΠΈΡ ΡΡΠ°ΡΡΡΡ . ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΎΠ΄Π½ΠΈΠΌ zip-Π°ΡΡ ΠΈΠ²ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Forgejo: ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊ ΡΡΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠΈ Β· Π²Π΅ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.