curl-impersonate は、主要なWebブラウザである Chrome、Edge、Safari、Firefox を模倣できる特別な curl ビルド
- TLS および HTTP ハンドシェイクを実際のブラウザと同じように実行
- コマンドラインツールとして使用することも、ライブラリとして統合することも可能
- 重要性
- HTTP クライアントが TLS Web サイトにアクセスするとき、TLS ハンドシェイクを実行し、この過程でクライアントの特性を識別できる
curl-impersonate はこれらのハンドシェイクを実際のブラウザと同一にすることで、Web サービスがクライアントを識別できないようにする
- 技術的実装
- Google の TLS ライブラリである BoringSSL を使って curl をコンパイルする。
- さまざまな TLS 拡張および SSL オプションを変更する。
- HTTP/2 接続設定を変更する。
- 非標準フラグを使って curl を実行する。
- 対応ブラウザ
- Chrome、Edge、Safari、Firefox など、さまざまなバージョンのブラウザを模倣できる。
- 各ブラウザ向けのスクリプトが提供されている。
- 基本的な使い方
- 高度な使い方
libcurl-impersonate ライブラリを使って API 経由で設定できる。
CURL_IMPERSONATE 環境変数を使って、ライブラリを実行時に置き換えられる。
- インストール
- Windows、Linux、macOS 向けの事前コンパイル済みバイナリが GitHub Releases ページで提供されている。
- Docker イメージ経由でも利用できる。
- このリポジトリは
curl-impersonate のより活発なフォークであり、次のような主な違いがある
- Encrypted Client Hello(ECH) 対応: Chrome 119 で導入された ECH 機能を追加。
- ZSTD 圧縮対応: Chrome 123 で導入された ZSTD 圧縮プロトコルをサポート。
- X25519Kyber768 曲線対応: Chrome 124 で導入された新しい暗号曲線を追加。
- Akamai HTTP/2 フィンガープリントオプション拡張: Safari を含む HTTP/2 フィンガープリントオプションを強化。
- 最新の curl バージョンへアップグレード: curl 8.7.1 に更新。
- TLS 拡張順序および GREASE 設定が可能: TLS 拡張の順序と GREASE の有効化/無効化オプションを追加。
- WebKit および Gecko ベースのブラウザ対応を準備中: Chrome と Firefox 向けの単一バイナリを開発中。
1件のコメント
Hacker Newsの意見
Pythonバインディングを通じて
requestsに似たAPIを提供するプロジェクトがある。これにより、ブラウザスタック全体を実行せずにHTTPリクエストを簡単に行える特定のサイトではJavaScriptベースのブラウザ検出が必要になる。
puppeteer-extra-plugin-stealthも無力化されることがあるビルドスクリプトが複雑。autotoolsを使っているが、サブディレクトリでビルドする必要がある
makeスクリプトのほうがよりうまく動いた-Werrorを削除して問題を解決。依存関係リストが不完全libc++-XX-devとlibc++abi-XX-devが必要。インストール手順がやや不完全Python向けに似たプロジェクトを作った。Windowsビルドを手伝ってくれる人を探している
JA3/JA4フィンガープリンティングを使っているWebサイトは少数だけ。ヘッダーとフィンガープリントを関連付ける高度な手法を使うサイトもある
ja3proxyを使ってutls経由でHTTPプロキシを公開している。HTTP/2向けの特別な機能はないGo言語では
tls-clientパッケージが主に使われているAIスクレイパーファームがサイトをDDoSしていることに関する話があり、興味深い
こうしたプロジェクトは公開されるべきではないと思う。敵は我々の中にいるかもしれない
特定のWebサイトからデータを読まなければならない場合、ハンドシェイク情報を使ってソフトウェアでは読めないようにしている