
スタックの全レイヤーにわたってリクエストをChromeブラウザとして完全に偽装する、次世代のHTTPステルスプロキシ。
「信じられない、サーモオプティック迷彩だ!」
これは、JA4+ のようなフィンガープリンティングを使用して特定の HTTP クライアントをブロックするサービスを回避するために設計された HTTP プロキシです。このプロキシを使用すると、curl などの好みの HTTP クライアントを使いながら、本物の(Chrome/Chromium)ウェブブラウザと魔法のように見分けがつかないフィンガープリントを得ることができます。thermoptic には、JavaScript ベースのフィンガープリンティングを軽減するための楽しい機能もいくつか備わっています。また、ウェブブラウザと低レベル HTTP クライアントの両方を組み合わせたハイブリッドスクレイピングを簡単に行うこともできます。
JA4+ フィンガープリンティングに馴染みがなくても、スクレイピングをしたことがあるなら、おそらくこれまでにブロックされた経験があるでしょう。Cloudflare のような一般的なサービスは、このような技術(およびその他のトリック)を使って「人間ではない」HTTP クライアントの使用を検出し、リクエストをブロックします。これらのサービスは、このフィンガープリンティングを使って、本物のブラウザでセッションを開始した後に curl のような低レベルクライアントに切り替えたことを検出することもできます。thermoptic は、すべてのスクレイピングリクエストに対して統一された「本物の」ブラウザフィンガープリントを提示することで、これらすべての問題を解決します。
以下は、プロキシを使用しない場合の curl の JA4H(HTTP)フィンガープリントの例です:
$ curl https://ja4db.com/id/ja4h/
ge11nn090000_b6a016211e8a_000000000000_e3b0c44298fc
これは、URLに直接アクセスしたときにChromeが生成するフィンガープリントとはかなり異なります:
ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
しかし、プロキシを使用してリクエストを行うと、JA4Hフィンガープリントは魔法のように同一になります:
$ curl --proxy http://thermoptic:1234 https://ja4db.com/id/ja4h/
ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
(同じことは私たちのJA4 TLSフィンガープリントにも当てはまります、など)。
Ubuntu 22.04上でコンテナ化されたChromeインスタンスを通じてトラフィックを偽装するthermopticプロキシを起動するには:
通常のDockerセットアップ(GPUランタイムのないホストでも動作します):
docker compose up --build
以上で完了です。これでトラフィックをプロキシ経由で送信できます:
curl --proxy http://127.0.0.1:1234 --insecure https://ja4db.com/id/ja4h/
重要な注意事項:
PROXY_USERNAME と PROXY_PASSWORD で認証を設定してください。---insecure を使用したくない場合は、./ssl/rootCA.crt にある生成済みの CA ファイルを使用する必要があります。これは thermoptic を初めて実行したときに生成されます。thermoptic は --remote-debugging-port フラグを付けて起動された任意の Chrome/Chromium インスタンスに接続できます。これは、フィンガープリントをできるだけ目立たなくするために、より一般的に使用される環境(例: Windows 上の Chrome)をセットアップしてプロキシ経由で使用したい場合に不可欠です。/dev/dri をマウントし、同梱の Chrome コンテナを NVIDIA/Vulkan レンダリングパスに切り替えられるようにします。これを使用するには、docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build を実行します。curl、requests など)を thermoptic と統合するためにカスタムコードはほとんど、あるいはまったく不要です。プロキシを設定するだけで、フィンガープリントは処理されます。./hooks/onstart.js にあります。http://127.0.0.1:14111)で、Docker 化された Chrome ブラウザウィンドウを操作できます。サイトに手動でログインし、その後プロキシをシームレスに使用してログイン済みセッションとしてリクエストを行うのに便利です(デバッグにも)。docker-compose.yml の UPSTREAM_PROXY 環境変数で上流の HTTP または SOCKS プロキシ URI を設定できます。
curl などの HTTP クライアントを使用し、thermoptic をプロキシとして設定して HTTP リクエストを行います。thermoptic はリクエストを分析し、それが本来どのタイプのブラウザリクエストであるべきか(例: 手動の URL 訪問?フォーム送信?fetch() リクエスト?)を最適に判断します。thermoptic は Chrome Debugging Protocol (CDP) を使用してブラウザを操作し、実際の Web ブラウザで通常発生するのとまったく同じようにリクエストを模倣するページをセットアップします。thermoptic は模倣されたコンテキストを介してリクエストをトリガーし、HTTP レスポンスをキャプチャします。thermoptic は HTTP レスポンスをクライアントに返します。ブラウザが実際にそのフルスタックを使用してリクエストを行っているため、結果として得られる JA4 フィンガープリントは同一になります。
注: 多くの WAF が Web ブラウザの JavaScript レベルのフィンガープリンティングを採用しているため、thermoptic はスクレイピングプロセスの重要なステップでブラウザを利用するためのフックも公開しています。詳細はこのセクションを参照してください。
率直に言えば、他のアプローチには根本的な欠陥があり、ブラウザフィンガープリンティング問題に対する実用的な長期的解決策にはなりません。
ブラウザの JA4+ フィンガープリンティングを「打ち負かす」他の多くの試みは、ブラウザスタックのさまざまな層を再実装することによって行われます。このアプローチには、次のようないくつかの深刻な欠点があります:
対照的に、thermoptic は HTTP リクエストを実行するためにブラウザ自体を使用するため:
thermoptic が制御するブラウザを最新のフィンガープリントセットに一致させるために更新するだけで済みます。もちろん、欠点のないソリューションはありません。thermoptic アプローチの欠点の詳細なリストについては、DOWNSIDES.md ドキュメントを参照してください。
thermoptic という名前なのか?「Thermoptic」(「thermoptic camouflage」の略)は、Ghost in the Shell (1995) アニメで少佐が使用した架空のカモフラージュへの言及です。映画では、このカモフラージュは可視光と熱放射の両方を含む複数の検出スペクトルにわたって装着者を隠すことができると示されています。同様に、このツールは複数のチャネル(HTTP、TLS など)にわたってユーザーをフィンガープリンティングから隠そうとします。
このツールは、接続している Chrome/Chromium ブラウザとまったく同じになるように、以下の JA4 フィンガープリントを偽装します:
thermoptic は制御された Chrome インスタンスを内部の proxyrouter サービス経由でルーティングするようになったため、Chrome を上流の HTTP または SOCKS プロキシ(認証情報を必要とするものを含む)に向けることができます。docker-compose.yml の proxyrouter サービスにある UPSTREAM_PROXY の値を編集して、上流プロキシ URI を設定します。空のままにすると、Chrome は認証なしのクラスタ内プロキシを通じてインターネットに直接通信します。
上流 SOCKS プロキシを設定する例:
proxyrouter:
environment:
UPSTREAM_PROXY: "socks5://username:[email protected]:1080"
一部の上流プロキシは低レベルのフィンガープリント(例えば TCP メタデータ)を変更する可能性があり、これによりレジデンシャルブラウザとの同等性が低下する場合があることに注意してください。
thermoptic は、クライアントが Cookie ヘッダーで指定したクッキーを使用してブラウザをロードします。その後、リクエストがブラウザコンテキストで実行されると、これらのクッキーが含まれます。これは、サーバーがクッキーの順序やその他の安易なトリックをフィンガープリントできないようにするために行われます。
注: これらのクッキーはリクエスト後も残ります。クッキーのクリーンアップロジックを実装したい場合は、thermoptic フックを記述してください。
はい、thermoptic はこのようなハイブリッドな使用方法をサポートしています。詳細についてはこのセクションを参照してください。
X-Fetch-*、Origin、Referer などのヘッダーを正しく設定していることを確認する必要があります。これらのヘッダーを thermoptic に伝えないと、適切にステルスな方法でリクエストを実行できません。
コンテキストヘッダーを設定しない場合、thermoptic はデフォルト値を設定しますが、これはターゲットサイトが期待するものと正確に一致しない可能性があります。例えば、Origin ヘッダーを設定しない場合、Origin は null に設定され、Referer ヘッダーを設定しない場合は Referer をまったく送信しません。
リクエストを可能な限りステルスにするために、これらのコンテキストヘッダーを含めることをお勧めします! thermoptic はあなたの心を読むことはできず、あなたのリクエストを読むことしかできません :)。
一般的に、これは JavaScript/ブラウザレベルのチェックを通過するために一時的に完全なウェブブラウザを利用する thermoptic フックの場合にのみ適用されます。これらのフックと完全なブラウザモードを一時的に使用する場合、ボットとしてフィンガープリントされないように注意する必要があります(例えば、Runtime.enable のような落とし穴を避ける)。
ここで働いている倫理的考慮事項と複雑なゲーム理論は、README で答えられる範囲を超えています。ただし、メール/Twitter/Github で私を炎上させる際には、これらの過度に単純化された点のいずれかに反論してください: