我看過其他 503 錯誤的實例獲取,但沒有可用的我無法解決這個問題。
當我嘗試下載某個網站時,收到 503 服務不可用錯誤。除了相關網站之外,任何網站都不會發生這種情況。
這就是正在發生的事情。我輸入:
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 小時,所以你必須每小時手動刷新它。
以下是可用於抓取網站的完整命令:
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 cookie 值是恆定的,您只需每小時更改 cf_clearance cookie 值。
答案2
問題似乎是 TeamSpeak 正在使用 CloudFlare 的 DDoS 保護。請參閱答案底部的螢幕截圖。有關此保護的含義/含義的更多詳細信息在 Amazon 官方頁面上了解 CloudFlare 的安全功能:
CloudFlare 利用多元化網站社群的知識來支援新型安全服務。線上威脅的範圍從垃圾評論和過度機器人爬行等滋擾到 SQL 注入和拒絕服務 (DOS) 攻擊等惡意攻擊。 CloudFlare 針對所有這些類型的威脅提供安全保護,以確保您的網站安全。
有關其高級 DDoS 防護的更多詳細信息方法可以在這裡找到:
CloudFlare 的高級 DDoS 防護作為網路邊緣的服務提供,與此類威脅的複雜程度和規模相匹配,可用於緩解各種形式和規模的 DDoS 攻擊,包括針對 UDP 和 ICMP 協定以及 SYN 的攻擊/ACK、DNS放大和第7 層攻擊。本文檔解釋了每種攻擊方法的剖析,以及 CloudFlare 網路如何設計來保護您的 Web 免受此類威脅。
現在,這個因素如何影響您所看到的「503 服務暫時無法使用」?嗯,這意味著您嘗試訪問的網站受到 Amazon CloudFlare DDoS 檢測/緩解服務的高度保護,目前無法透過命令列工具(例如或 )wget
進行非標準存取。curl
FWIW,我從命令列進行了一些不同的curl
嘗試,我相信發生的情況是 CloudFlare 的 DDoS 保護就像選擇使用它的網站的巨大網頁代理一樣。 「真實」網站存在於主機名稱解析到的 IP 位址之外的其他地方。像這樣的網站 宣稱為您提供連接到 CloudFlare 主機名的「真實」IP 位址,但它似乎根本不起作用。或者,給定的 IP 位址可能是有效的,但服務的設定方式只是拒絕您直接訪問真實站點,而無需跳過 CloudFlare 的循環。
這僅僅意味著,您能做的最好的事情就是坐下來等待,也許在幾個小時或可能幾天內,站點面臨的安全問題就會消失,並且可以進行標準wget
或呼叫。curl
但現實是,如果這種安全保護措施到位且可靠,並且網站所有者沒有停用它,那麼您就無法採取太多措施來繞過它。
答案3
只是為了跟進這個答案https://superuser.com/a/946274/755660- 現在 __cfduid cookie 已被棄用,這可以工作:
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 標頭。
這是我修改為 wget 之前的 cURL(替換為 example.com 網站)的樣子。
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。無法嘗試。