CloudFlare でホストされているサイトへの Wget の問題: 503 サービスを利用できません

CloudFlare でホストされているサイトへの Wget の問題: 503 サービスを利用できません

私は503エラーの他の例を見たことがありますWgetしかし、利用できるものがないため、これを解決することはできません。

特定の Web サイトをダウンロードしようとすると、「503 Service Unavailable」エラーが発生します。 このエラーは、問題の Web サイト以外では発生しません。

これが起こっていることです。次のように入力します。

wget -r --no-parent -U Mozilla http://www.teamspeak.com/

そして、返されるエラーは次のとおりです。

--2015-03-12 11:57:08--  http://www.teamspeak.com/
Resolving www.teamspeak.com... 104.28.27.53, 104.28.26.53
Connecting to www.teamspeak.com|104.28.27.53|:80... connected.
HTTP request sent, awaiting response... 503 Service Unavailable
2015-03-12 11:57:09 ERROR 503: Service Unavailable.

このサイトは CloudFlare 保護を使用しています (サイトを開くと、「ブラウザをチェック」するため 5 秒待つ必要があります)。

答え1

CloudFlare 保護は、JavaScript、Cookie、および http ヘッダー フィルタリングに基づいています。wget を使用して CloudFlare で保護されたサイトをクロールする場合は、まずデバッガー付きのブラウザー (例: Firebug 付きの Firefox) にサイトを入力し、Cookie リクエスト ヘッダーをコピーする必要があります。

さて、最も難しい部分です。この Cookie は 1 時間のみ有効なので、1 時間ごとに手動で更新する必要があります。

サイトをクロールするために使用できる完全なコマンドは次のとおりです。

wget -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0" --header="Accept: text/html" --header="Cookie: __cfduid=xpzezr54v5qnaoet5v2dx1ias5xx8m4faj7d5mfg4og; cf_clearance=0n01f6dkcd31en6v4b234a6d1jhoaqgxa7lklwbj-1438079290-3600" -np -r http://www.teamspeak.com/

__cfduid クッキー値は一定であり、cf_clearance クッキー値は 1 時間ごとに変更するだけでよいことに注意してください。

答え2

問題は、TeamSpeak が CloudFlare の DDoS 保護を使用していることにあるようです。回答の下部にあるスクリーンショットを参照してください。この保護が何であるか、何を意味するかについての詳細CloudFlareのセキュリティ機能に関するAmazonの公式ページ:

CloudFlare は、多様な Web サイト コミュニティの知識を活用して、新しいタイプのセキュリティ サービスを実現します。オンラインの脅威は、コメント スパムや過剰なボット クロールなどの迷惑行為から、SQL インジェクションやサービス拒否 (DOS) 攻撃などの悪意のある攻撃まで多岐にわたります。CloudFlare は、これらすべての種類の脅威に対するセキュリティ保護を提供し、Web サイトを安全に保ちます。

高度なDDoS防御の詳細方法はここにあります:

CloudFlare の高度な DDoS 保護は、ネットワーク エッジでサービスとしてプロビジョニングされ、このような脅威の高度さと規模に対応し、UDP および ICMP プロトコルをターゲットとする攻撃、SYN/ACK、DNS 増幅、レイヤー 7 攻撃など、あらゆる形式と規模の DDoS 攻撃を軽減するために使用できます。このドキュメントでは、各攻撃方法の構造と、CloudFlare ネットワークがこのような脅威から Web プレゼンスを保護するためにどのように設計されているかについて説明します。

さて、これは、表示される「503 サービスは一時的に利用できません」にどのように影響するのでしょうか? つまり、アクセスしようとしているサイトは、Amazon CloudFlare DDoS 検出/軽減サービスによって非常に高いレベルの保護を受けているため、またはなどのコマンドラインツールを介した非標準のアクセスはwget現時点curlでは不可能であるということです。

ちなみに、私はコマンドラインからいくつかの異なるcurl試みをしましたが、CloudFlare の DDoS 保護は、それを使用することを選択したサイトに対して巨大な Web ページ プロキシのように機能しているだけだと思います。そして、「実際の」Web サイトは、ホスト名が解決される IP アドレス以外の場所に存在します。このようなサイト 請求CloudFlare ホスト名に接続された「実際の」 IP アドレスを提供しようとしましたが、まったく機能していないようです。または、提供された IP アドレスは有効ですが、サービスの設定方法により、CloudFlare のループを経由せずに実際のサイトに直接アクセスできないだけなのかもしれません。

つまり、あなたにできる最善のことは、ただ座って待つことであり、おそらく数時間か数日後には、サイトが直面しているセキュリティの問題は消え去り、標準wgetまたはcurl通話ができるようになるでしょう。しかし、現実には、このセキュリティ保護が実施されていて、それが強固で、Web サイトの所有者がそれを無効にしていない場合、それを回避する方法はあまりありません。

ここに画像の説明を入力してください

答え3

この回答について補足するとhttps://superuser.com/a/946274/755660- __cfduid クッキーは非推奨になったため、次の方法が機能します:

wget --header='cookie: cf_chl_2=5f706f217dfec17; cf_chl_prog=x12; cf_clearance=6on.0F8CTI4m4K2dqEx63zQQD62bq63eF8OOITzovsI-1655756823-0-150' \
  --header='user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' \
  -np -r https://example.com/uploads

これにより、-np (親なし) と -r (再帰) を使用してすべてのサブディレクトリが取得されます。

これらの値を取得するには、ブラウザ デバッガーを開き、ネットワークを curl としてコピーし、wget にフォーマットします。必要なのは、ユーザー エージェント ヘッダーと Cookie ヘッダーだけです。

cURLとしてコピー

wget に変更する前の cURL (example.com Web サイトに置き換え) は次のようになります。

curl 'https://example.com/uploads/' \
  --header='authority: example.com' \
  --header='accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
  --header='accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' \
  --header='cache-control: max-age=0' \
  --header='cookie: cf_chl_2=5f706f217dfec17; cf_chl_prog=x12; cf_clearance=6on.0F8CTI4m4K2dqEx63zQQD62bq63eF8OOITzovsI-1655756823-0-150' \
  --header='referer: https://example.com/wp-content/uploads/' \
  --header='sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"' \
  --header='sec-ch-ua-mobile: ?0' \
  --header='sec-ch-ua-platform: "macOS"' \
  --header='sec-fetch-dest: document' \
  --header='sec-fetch-mode: navigate' \
  --header='sec-fetch-site: same-origin' \
  --header='sec-fetch-user: ?1' \
  --header='upgrade-insecure-requests: 1' \
  --header='user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' \

答え4

こちらのほうが使いやすいかもしれません。

@echo off
set U=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0) Gecko/20100101 Firefox/9.0
set cf_clearance=
set SaveTo=
set Optional=-q
:If it fails, replace -q with -d -oLog for details.
for %%f in (
http://itorrents.org/torrent/606029c69df51ab29d5275b8ad4d531fa56a450b.torrent
) do wget %%f %Optional% -U "%U%" --header="Accept:text/html" --header="Cookie:__cfduid=dbef4c7a393e2d6a95385ccfadbc46e371591967392;cf_clearance=%cf_clearance%" -np -nd -P%SaveTo%
pause

によるとこれcf_clearance は最大 1 時間 45 分まで有効です。これこれらのトークンの取得を自動化するソリューションがあるようです。XP では実行できない Node.js を使用します。試すことができませんでした。

関連情報