πŸ₯· 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) Π·Π²ΡƒΡ‡Π°Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ:

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)

Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ (вСрсии)
Chrome99, 100, 101, 104, 107, 110, 116 (Win10); 99 (Android 12)
Edge99, 101 (Win10)
Firefox91 ESR, 95, 98, 100, 102, 109, 117 (Win10)
Safari15.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, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

πŸ“š Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅


πŸ€– Π­Ρ‚ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… ИИ

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ИИ Π½Π° Π½Π°ΡˆΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…. Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ скачиваниС всСго рСпозитория ΠΎΠ΄Π½ΠΈΠΌ zip-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ доступны Π² Forgejo: исходник этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ Β· вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.