Архивирование сайтов может быть очень хорошей идеей, потому что слетают с лица Интернета они, как полагается, неожиданно. Кто-то может сказать, что это не проблема - есть же веб-архив. Но, к сожалению, он архивирует сайты через весьма длительные периоды, и соответственно какая-то информация может просто ускользнуть. А еще может и вовсе не знать о понравившимся вам сайте, например в случае c оверлейными сетями или неиндексируемыми страницами. В этом посте я постараюсь рассказать как найболее удобно зеркалировать сайты с помощью программы HTTrack. Причем, собираюсь я затронуть не только зеркалирование сайтов в сети Интернет, но и в сетях TOR и I2P. Мануал затронет только систему Linux, но весь используемый в статье софт кросс-платформенный, что позволяет повторить описанное в системе Windows.

Использование HTTrack

HTTrack - кросплатформенная свободная программа, которая позволяет загружать WWW-сайты на локальный диск, путем рекурсивного перебора ссылок на каждой из страниц. HTTrack скачивает HTML, картинки и все другие файлы с сайта, тем самым “зеркалируя”. Это позволяет архивировать сайты, просматривать их оффлайн, переносить сайты с машины на машину. Конечно, некоторые вещи могут “пропасть”, вроде JavaScript, но со скачиванием статического контента программа справляется просто замечательно. Основная страница проекта предлагает версии на системы Windows, Linux, и даже Android, а также можно собрать из исходников.
В системах Ubuntu HTTrack есть в стандартном репозитории:
apt install httrack

Собственно, копируется сайт одной простой комадной:
httrack --mirror <url> -O <директория> --robots=0

Об опциях по порядку:
<url> - URL, откуда программа берет “старт” зеркалирования. Для полного зеркалирования сайта стоит указать URL, указывающий на корневую директорию, например http://example.com/. Но это не обязательно, и если нужно, то можно взять начало зеркалирования с директории поглубже, например http://example.com/example1/ или http://example.com/example1/example11/;
<директория> - директория, куда будет производится скачивание сайта. Если ее не указать, все будет скачано в текущую директорию;
--robots=0 - опция, которая заставляет HTTrack игнорировать инструкции мета-информации и в файле robots.txt, скачивая совершенно все, что найдет. Для понимания стоит отметить, что программа - не брутфорсер директории, она скачивает только по тем ссылкам, которые были найдены начиная с указанного URL.

После скачивания проходим в директорию, открываем index.html и собственно, вы можете просматривать браузером сайт прямо с локального диска. HTTrack в файлах разметки сам подменяет пути на локальные, что дает возможность удобного оффлайн-просмотра сайта.

Стоит отметить, что инструмент очень гибкий и имеет массу опции зеркалирования. Большое значение в HTTrack имеют фильтры. Записываются они в виде регулярных выражений. С помощью них можно отсеивать и включать в зеркалирование определенные шаблоны URL. Хорошо данную функцию использовать для фильтрации файлов по расширению, mime-type, или даже размеру. А также можно фильтровать целые директории. Важно знать, что приоритет выражений идет справа-налево в команде. Несколько примеров ниже.

Скачивать только файлы с расширением .png:
httrack --mirror <url> -*/* +*.png -O <директория> --robots=0

Скачивать все, кроме файлов с расширением .png:
httrack --mirror <url> -*.png -O <директория> --robots=0

Скачивать только архивы с расширениями .zip, .rar, .tar.*:
httrack --mirror <url> -*/* +*.zip +*.rar +*.tar.* -O <директория> --robots=0

Скачивать только файлы из директорий, содержащих в URL /secrets/:
httrack --mirror <url> -*/* +*/secrets/* -O <директория> --robots=0

Скачивать все, кроме файлов из директорий, содержащих в URL /trash/:
httrack --mirror <url> -*/trash/* -O <директория> --robots=0

А как же Tor и I2P?

Все не очень просто, как может показаться на первый взгляд. HTTrack поддерживает, к сожалению, только http-прокси, причем, похоже, самый простой его вариант. Запуск HTTrack через прокси проиходит с помощью опции -P <адрес>:<порт>.

Известно, что, например, TOR поддерживает http-прокси как прокси-вход в сеть (включается опцией HTTPTunnelPort <порт> в файле torrc), но вот только HTTrack этот прокси не понимает.
Поэтому, обернем HTTrack в torsocks. Torsocks позволяет завернуть в TOR практически большинство сетевых приложений, работающих по TCP. Делается это очень просто:
torsocks -P 9150 httrack --mirror <url.onion> -O <директория> --robots=0,
где -P 9150 указание порта, который слушает TOR.
И собственно все - скачивание .onion сайта должно начатся.

Так же мне для скачивания .onion-сайта помогла программка privoxy. Это http-прокси сервер, который может заруливать запросы в прокси других типов, например в TORовский socks5.

Устанавливаем privoxy:
apt install privoxy
Делаем конфиг-файл для него в одну строку (именно с точкой в конце):
vim /etc/privoxy/config
forward-socks5 / localhost:9150 .
Запускам privoxy с указанием этого конфиг-файла:
privoxy /etc/privoxy/config
И наконец натравливаем HTTrack на интересующий нас сайт в сети TOR, с использованием прокси:
httrack --mirror <url.onion> -O <директория> --robots=0 -P 127.0.0.1:8118,
где 127.0.0.1:8118 - сокет, который privoxy слушает по умолчанию.

К счастью, с дружбой HTTrack и http-прокси I2P проблем не возникло. Поднимаем I2P с http-прокси (что является кстати рекомендуемой конфигурацией) и натравливаем HTTrack:
httrack --mirror <url.i2p> -O <директория> --robots=0 -P 127.0.0.1:4444,
где 127.0.0.1:4444 - сокет, который слушает http-прокси I2P.