1743699086
2025-04-03 15:24:00
の特別なビルド カール それは、Chrome、Edge、Safari、Firefoxの4つの主要なブラウザになりすまします。 Curl-Impersonateは、実際のブラウザと同じTLSとHTTPハンドシェイクを実行できます。
Curl-Impersonateは、通常のカールと同様のコマンドラインツールとして、または通常のlibcurlの代わりに統合できるライブラリとして使用できます。見る 使用法 下に。
TLS WebサイトでHTTPクライアントを使用すると、最初にTLSの握手を実行します。その握手の最初のメッセージは、クライアントこんにちはと呼ばれます。ほとんどのHTTPクライアントとライブラリが生成するというクライアントのこんにちはメッセージは、実際のブラウザのそれとは劇的に異なります。
サーバーがHTTP/2を使用している場合、TLSハンドシェイクに加えて、さまざまな設定が交換されるHTTP/2ハンドシェイクもあります。ほとんどのHTTPクライアントとライブラリが使用する設定は、実際のブラウザの設定とも異なります。
これらの理由により、一部のWebサービスはTLSとHTTPハンドシェイクを使用して、どのクライアントがそれらにアクセスしているかを指紋し、異なるクライアントに異なるコンテンツを提示します。これらの方法はとして知られています TLSフィンガープリント そして HTTP/2フィンガープリント それぞれ。彼らの広範な使用により、ウェブがオープンではなく、プライベートが減り、特定のWebクライアントに対してはるかに制限があります
このリポジトリに変更されたカールを使用すると、TLSとHTTPの握手が見える その通り 実際のブラウザのもののように。
この作業をするために、 curl ブラウザに似ているように大幅にパッチが適用されました。具体的には、この作業を行うために必要な修正:
- CurlをNSSでコンパイルし、Firefoxが使用するTLSライブラリであるOpenSSLの代わりにコンパイルします。 Chromeバージョンについては、GoogleのTLSライブラリであるBoringsSLとコンパイルします。
- CurlがさまざまなTLS拡張機能とSSLオプションを構成する方法を変更します。
- 新しいTLS拡張機能のサポートを追加します。
- CurlがHTTP/2接続に使用する設定を変更します。
- たとえば、いくつかの非デフォルトフラグを使用してカールを実行します
--ciphers、--curvesそしていくつか-Hヘッダー。
結果のカールは、ネットワークの観点から、実際のブラウザと同じように見えます。
ブログの投稿で完全な技術的説明を読む: パートA、 パートb。
次のブラウザになりすまします。
このリストは、でも利用できます browsers.json ファイル。
サポートされているブラウザごとに起動するラッパースクリプトがあります curl-impersonate 必要なすべてのヘッダーとフラグがあります。例えば:
curl_chrome116 https://www.wikipedia.org
コマンドラインフラグを追加すると、それらはカールに渡されます。ただし、一部のフラグでは、CurlのTLS署名を変更して検出される可能性があります。
ラッパースクリプトは、HTTPヘッダーのデフォルトセットを使用していることに注意してください。これらのヘッダーを変更したい場合は、ラッパースクリプトを変更して、独自の目的に合わせて変更する場合があります。
見る 高度な使用 使用を含むその他のオプションについて libcurl-impersonate 図書館として。
より多くのドキュメントを利用できます docs/ ディレクトリ。
には2つのバージョンがあります curl-impersonate 技術的な理由から。 クロム バージョンは、Chrome、Edge、Safariになりすましに使用されます。 Firefox バージョンは、Firefoxになりすましに使用されます。
LinuxおよびMacOS(Intel)の事前にコンパイルされたバイナリは、 GitHubリリース ページ。それらを使用する前に、NSS(FirefoxのTLSライブラリ)とCA証明書をインストールする必要があります。
- ubuntu-
sudo apt install libnss3 nss-plugin-pem ca-certificates - Red Hat/Fedora/Centos-
yum install nss nss-pem ca-certificates - Archlinux-
pacman -S nss ca-certificates - macos-
brew install nss ca-certificates
また、システムにZLIBがインストールされていることを確認してください。 Zlibはほとんど常に存在しますが、いくつかの最小限のシステムでは欠落している可能性があります。
事前にコンパイルされたバイナリには、Libcurl-Imprsuranteと、使いやすいために静的に編集されたCurl-Imprsonateが含まれています。
事前にコンパイルされたLinuxバイナリは、Ubuntuシステム用に構築されています。他の分布では、証明書の確認にエラーがある場合は、CA証明書をどこで見つけるかをCurlに伝える必要があります。例えば:
curl_chrome116 https://www.wikipedia.org --cacert /etc/ssl/certs/ca-bundle.crt
また、必ず読んでください 依存関係に関するメモ。
見る install.md。
Alpine LinuxとDebianに基づくDocker画像 curl-impersonate コンパイルされて使用できるようになりました Dockerハブ。画像には、バイナリとすべてのラッパースクリプトが含まれています。次のように使用してください:
# Firefox version, Alpine Linux
docker pull lwthiker/curl-impersonate:0.6-ff
docker run --rm lwthiker/curl-impersonate:0.6-ff curl_ff109 https://www.wikipedia.org
# Chrome version, Alpine Linux
docker pull lwthiker/curl-impersonate:0.6-chrome
docker run --rm lwthiker/curl-impersonate:0.6-chrome curl_chrome110 https://www.wikipedia.org
ArchlinuxユーザーはAURパッケージを利用できます。
Macの非公式の自宅式領収書(Chromeのみ)が利用可能です ここ:
brew tap shakacode/brew
brew install curl-impersonate
libcurl-impersonate.so コマンドラインと同じ変更が編集されています curl-impersonate。追加のAPI関数があります:
CURLcode curl_easy_impersonate(struct Curl_easy *data, const char *target,
int default_headers);
ターゲット名で呼び出すことができます chrome116、そして、それ以外の場合はラッパースクリプトによって設定されたすべてのオプションとヘッダーを内部的に設定します。もし default_headers 0に設定されています。HTTPヘッダーの組み込みリストは設定されず、ユーザーは通常のものを使用してそれらを提供することが期待されます CURLOPT_HTTPHEADER libcurlオプション。
上記の関数を呼び出すと、次のlibcurlオプションが設定されます。
CURLOPT_HTTP_VERSIONCURLOPT_SSLVERSION、CURLOPT_SSL_CIPHER_LIST、CURLOPT_SSL_EC_CURVES、CURLOPT_SSL_ENABLE_NPN、CURLOPT_SSL_ENABLE_ALPNCURLOPT_HTTPBASEHEADER、 もしdefault_headers非ゼロです(これは、このプロジェクト用に作成された非標準のHTTPオプションです)。CURLOPT_HTTP2_PSEUDO_HEADERS_ORDER、CURLOPT_HTTP2_NO_SERVER_PUSH(このプロジェクトのために作成された非標準のHTTP/2オプション)。CURLOPT_SSL_ENABLE_ALPS、CURLOPT_SSL_SIG_HASH_ALGS、CURLOPT_SSL_CERT_COMPRESSION、CURLOPT_SSL_ENABLE_TICKET(このプロジェクトのために作成された非標準のTLSオプション)。CURLOPT_SSL_PERMUTE_EXTENSIONS(このプロジェクトのために作成された非標準のTLSオプション)。あなたが電話した場合に注意してくださいcurl_easy_setopt()後で上記のいずれかで、設定されたオプションをオーバーライドしますcurl_easy_impersonate()。
アプリケーションが使用する場合 libcurl すでに、実行時に既存のライブラリを置き換えることができます LD_PRELOAD (Linuxのみ)。その後、設定できます CURL_IMPERSONATE env var。例えば:
LD_PRELOAD=/path/to/libcurl-impersonate.so CURL_IMPERSONATE=chrome116 my_app
CURL_IMPERSONATE Env varには2つの効果があります。
curl_easy_impersonate()によって作成された新しいカールハンドルに対して自動的に呼ばれますcurl_easy_init()。curl_easy_impersonate()あらゆる後に自動的に呼ばれますcurl_easy_reset()電話。
これは、なりすましに必要なすべてのオプションが、任意のカールハンドルに自動的に設定されることを意味します。
HTTPヘッダーを正確に制御する必要がある場合は、設定します CURL_IMPERSONATE_HEADERS=no HTTPヘッダーの組み込みリストを無効にするには、 curl_easy_setopt()。例えば:
LD_PRELOAD=/path/to/libcurl-impersonate.so CURL_IMPERSONATE=chrome116 CURL_IMPERSONATE_HEADERS=no my_app
に注意してください LD_PRELOAD メソッドは機能しません curl CurlツールがTLS設定をオーバーライドするためです。代わりにラッパースクリプトを使用します。
セルフコンパイルされたアーティファクトを別のシステムにコピーする場合、または 事前にコンパイルされたバイナリ プロジェクトで提供されているため、すべての追加の依存関係がターゲットシステムにも満たされていることを確認してください。特に、を参照してください Firefoxバージョンについてのメモ。
このリポジトリには、2つのメインフォルダーが含まれています。
- クロム – クロムバージョンを構築するためのスクリプトとパッチ
curl-impersonate。 - Firefox – Firefoxバージョンを構築するためのスクリプトとパッチ
curl-impersonate。
レイアウトは両方で類似しています。たとえば、Firefoxディレクトリには以下が含まれています。
- dockerfile – 構築に使用されます
curl-impersonateすべての依存関係があります。 - curl_ff91esr、 curl_ff95、 curl_ff98 – 起動するラッパースクリプト
curl-impersonate正しいフラグ付き。 - Curl-Impersonate.patch -CurlにFirefoxと同じTLS拡張機能を使用させるメインパッチ。また、libnghttp2およびlibnssでCurlを静的にコンパイルします。
関心のある他のファイル:
- テスト/署名 -susenturantyになりすましできる既知のブラウザ署名のYAMLデータベース。
支援したい場合は、チェックしてください 未解決の問題。変更とともにプルリクエストを開くことができます。
このリポジトリには、ビルドプロセスが含まれています curl-impersonate。実際のパッチ curl aで維持されます 個別のリポジトリ 上流のカールからフォーク。変更はで維持されます Firefoxになりすまします そして なりすましクローム 枝。
スポンサーは、このプロジェクトを開いて維持するのに役立ちます。スポンサーになりたい場合は、LWTHIKER DOT COMのLWTを直接連絡してください。
#lwthikercurlImpersonateCurlImpersonateChromeFirefoxになりすます可能性のあるCurlの特別なビルド
