Проблемы с Wget на сайте, размещенном в CloudFlare: 503 Service Unavailable

Проблемы с Wget на сайте, размещенном в CloudFlare: 503 Service Unavailable

Я видел и другие случаи возникновения ошибок 503 при использованииWget, но так как нет доступных я не могу решить эту проблему.

Когда я пытаюсь загрузить определенный веб-сайт, я получаю ошибку 503 Service Unavailable. Это не происходит ни с одним веб-сайтом, кроме указанного.

Вот что происходит. Я ввожу:

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. Если вы хотите сканировать защищенный CloudFlare сайт с помощью wget, вам сначала нужно войти в браузер с отладчиком (например, Firefox с Firebug) и скопировать заголовок запроса 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/

Обратите внимание, что значение cookie-файла __cfduid является постоянным, и вам нужно менять только значение cookie-файла cf_clearance каждый час.

решение2

Проблема, похоже, в том, что TeamSpeak использует защиту CloudFlare DDoS. Смотрите скриншот внизу ответа. Подробнее о том, что это за защита/означаетна этой официальной странице Amazon о функциях безопасности CloudFlare:

CloudFlare использует знания разнообразного сообщества веб-сайтов для поддержки нового типа службы безопасности. Онлайн-угрозы варьируются от неприятностей, таких как спам в комментариях и чрезмерное сканирование ботами, до вредоносных атак, таких как SQL-инъекции и атаки типа «отказ в обслуживании» (DOS). CloudFlare обеспечивает защиту от всех этих типов угроз и многое другое, чтобы ваш веб-сайт был в безопасности.

Более подробная информация об их усовершенствованной защите от DDoS-атакметоды можно найти здесь:

Расширенная защита от DDoS-атак CloudFlare, предоставляемая как услуга на границе сети, соответствует сложности и масштабу таких угроз и может использоваться для смягчения DDoS-атак всех форм и размеров, включая атаки, нацеленные на протоколы UDP и ICMP, а также SYN/ACK, DNS-амплификации и атаки уровня 7. В этом документе объясняется анатомия каждого метода атаки и то, как сеть CloudFlare разработана для защиты вашего веб-присутствия от таких угроз.

Теперь, как это влияет на «503 Service Temporarily Unavailable», которое вы видите? Что ж, это означает, что сайт, к которому вы пытаетесь получить доступ, находится под таким высоким уровнем защиты со стороны служб обнаружения/смягчения DDoS-атак Amazon CloudFlare, что нестандартный доступ через командную строку, например wgetили , curlна данный момент просто невозможен.

FWIW, я сделал несколько разных curlпопыток из командной строки, и я считаю, что происходит следующее: защита CloudFlare от DDoS действует как огромный прокси-сервер веб-страниц для сайтов, которые решили его использовать. А «настоящий» веб-сайт существует где-то в другом месте, нежели IP-адрес, в который преобразуется имя хоста.Сайты, подобные этому требоватьчтобы дать вам «реальный» IP-адрес, подключенный к имени хоста CloudFlare, но, похоже, это вообще не работает. Или, может быть, предоставленный IP-адрес действителен, но способ настройки сервиса просто запрещает вам прямой доступ к реальному сайту без прохождения через циклы CloudFlare.

Что просто означает, что лучшее, что вы можете сделать, это сидеть и ждать, и, возможно, через несколько часов или, возможно, дней проблемы безопасности, с которыми столкнулся сайт, исчезнут, и можно будет сделать стандартные wgetили curlзвонки. Но реальность такова, что если эта защита безопасности установлена ​​и надежна, и владелец сайта не отключил ее, то вы не сможете сделать многого, чтобы обойти ее.

введите описание изображения здесь

решение3

Просто чтобы продолжить этот ответhttps://superuser.com/a/946274/755660- теперь, когда cookie-файл __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. Нужны только заголовок user agent и заголовки cookie.

копировать как cURL

Вот как это выглядело в cURL (заменено на сайт example.com) до того, как я изменил его на wget.

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 мин.ЭтотПохоже, это решение для автоматизации извлечения этих токенов. Оно использует Node.js, который не работает на XP. Не удалось попробовать.

Связанный контент