[Из песочницы] Свободная литература или сказ про дружбу CoolReader c Tor

Картинка для привлечения вниманияЖивет у меня в доме соседка: очень хорошая женщина, пенсионерка, ветеран труда, бывший медицинский работник, отработавший всю жизнь медсестрой в больнице. В настоящее время на пенсии. Я ей помогаю, чем могу, но сказ не про соседку, а про то, что подарила ей дирекция больницы, где она раньше работала планшет. Все бы ничего в этом планшете (WIFI есть, 3G нету, диагональ экрана 7 дюймов, на алиэкспрессе такие по 45 долларов с доставкой), но вот что делать с этим планшетом, естественно, не объяснили. И пришлось мне отвечать на вопрос, что делаю со своим планшетом я, а я на планшете книжки читаю, в основном Ясинского и Эльтерруса.

Естественно я подключил планшет к своему ноутбуку и перекинул апкашку CoolReader, а также свою библиотеку. К сожалению, через два дня выяснилось, что литературные пристрастия у нас разные и мои книжки соседке неинтересны. Пришлось поделиться паролем от своего вайфая и настроить opds «Флибусты», так как что такое Интернет соседка знала весьма приблизительно и ни компьютера, ни интернет-соединения у нее нет и никогда не было.

После выходных меня огорошили тем фактом, что нужные книжки с Флибусты не скачиваются. Сказать, что я был в недоумении — ничего не сказать — вся интересующая меня литература всегда была в свободном доступе, но соседка хотела Дарью Донцову и »50 оттенков серого» и, к моему удивлению, они действительно не скачивались.Погуглив по сети, я выяснил, что в сети TOR добрые люди сделали зеркало Флибусты, с которого все прекрасно скачивается, однако все попытки объяснить CoolReader, что нужно заходить по .onion адресу, наткнулись на его стойкое нежелание коннектиться по .onion адресам в принципе. Что, в принципе, логично. Попытка объяснить принципы современного копирайта и покупки книг на «Литресе» была мною благополучно провалена: карточки, как и компьютера, у соседки нет, а противостоять наивному «а за что платить-то, если книжки у меня так и не будет?» и «где магазин, в который можно прийти и получить книжку на планшет?» оказалось выше моих скромных сил, поэтому пришлось решать эту проблему методами техническими, ибо не умею я людям говорить «нет», особенно тем, кто нуждается в помощи и защите.

К счастью, у меня уже был VRS (virtual root server), на котором крутился мой маленький проект по управлением Ubuntu и Apache.

Шаг 1. Устанавливаем на Ubuntu tor

apt-get install tor Настройки «по-умолчанию» меня вполне устроили.Шаг 2. Пишем скрипт для апача, назвав его, например: /home/user/flibusta/nph-flibusta.pl. Префикс nph- в имени файла очень важен, ибо влияет на то, как скрипт будет обрабатываться апачем.

#!/usr/bin/perl use warnings; use HTTP: Proxy; use LWP: UserAgent; use LWP: Protocol: socks; use CGI qw (: standard -nph);

my $q = new CGI; my $ua = LWP: UserAgent→new (max_redirect => 0, agent => $q→user_agent (),); $ua→timeout (60); $ua→proxy ([qw/ http https /] => 'socks://127.0.0.1:9050'); # Tor proxy

my $refer = $q→referer (); $refer = » unless defined ($refer); $refer =~ s/proxy\.flibusta\.net/flibustahezeous3.onion/g; my $rsp = $ua→get ('http://flibustahezeous3.onion'.$q→param ('url'), 'Referer'=>$refer, 'Accept'=>$q→http ('Accept'), 'Accept-Language'=>$q→http ('Accept-Language'), 'Accept-Encoding'=>'identity', 'Cookie'=>$q→http ('Cookie') ); my $fstr = $rsp→as_string; $fstr =~ s/flibustahezeous3\.onion/proxy.flibusta.net/g;

#define templates my $nbl = < DATA1 my $olb = quotemeta < DATA2 #get all book IDs my @IDs = $fstr =~ /\/b\/(\d+)\/download/g; foreach my $id (@IDs) { # prepare search and replace strings my $ao = $olb; $ao =~ s/BOOOOOOOK/$id/g; my $an= $nbl; $an =~ s/BOOOOOOOK/$id/g; # do replace to fix format for cool reader $fstr =~ s/$ao/$an/g; }

print $fstr;

Что делает скрипт: получает параметр скрипт $url, переделывает имя хоста на торовское, отправляет запрос через TOR и подправляет пришедший ответ в ту форму, в какой его хочет видеть CoolReader.Шаг 3. Настраиваем апач.Создаем файл /etc/apache2/sites-available/proxy.flibusta.net с примерно таким содержимым:

ServerAdmin webmaster@flibusta.net ServerName proxy.flibusta.net

DirectoryIndex /home/user/flibusta/nph-flibusta.pl DocumentRoot /home/user/flibusta/ AllowOverride None Options -Indexes +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow, deny Allow from all RewriteEngine On RewriteCond %{HTTP_HOST} =proxy.flibusta.net RewriteRule ^(.*)$ /nph-flibusta.pl? url=$1 [H=cgi-script, L] LogLevel warn CustomLog /var/log/apache2/access.log combined И даем команду:

a2ensite proxy.flibusta.net Перезапуская попутно апач: service apache2 restart Что тут происходит: все запросы к сайту proxy.flibusta.net отправляются на наш магический скрипт.Шаг 4. Исправляем конфигурацию DNS на роутере.У меня роутер ASUS RT-N66U, поэтому для того, чтобы была возможность провести необходимую модификацию, была проставлена прошивка MerlinWRT, использующая DNSmasq, c сайта разработчика. Включен раздел JFFS и в файл /jffs/configs/dnsmasq.conf.add была внесена строка:

address=/proxy.flibusta.net/99.99.99.99 Где 99.99.99.99 — IP-адрес моей VRSки (специально изменен во избежание хабраэфффекта) с учетом того факта, что адрес у меня динамический и никакой фильтрации IP-адресов на сервере при обращении к скрипту у меня нет. Очевидно, что для другой модели роутера шаг 4 будет иным, но аналогичным.Шаг последний. Добавляем адрес proxy.flibusta.net/opds в список электронных библиотек в программе CoolReader. Тут ничего пояснять, думаю, не надо. Просто используем соответствующее меню в интрефейсе CoolReader~а.

Надеюсь, мой опыт пригодится другим людям и поможет сделать не только мою соседку счастливей, но и кого-либо еще в этом мире. Отдельное спасибо человеку, который сделал возможность скачивания книг через сеть Тor и автору программы CoolReader, которой пользуются «и пионеры и пенсионеры».

PS: Через две недели я узнал, что «Донцова отличный писатель, а »50 оттенков серого» чернуха, которую не стоит читать таким воспитанным и вежливым молодым людям как я.», а также мне почти насильно впихнули шоколадный батончик Аленка вместе с просьбой удалить из меню CoolReader~а Litres, который почему-то «постоянно просит регистрации». Очевидно, что данный метод можно использовать и для организации доступа любого другого программного обеспечения к .onion и .i2p сайтам.

© Habrahabr.ru