Pull to refresh

Объединение браузеров в непотопляемый трекер

Decentralized networks *
vseisk-p2p Одноранговые сети стали мощнейшей силой в современном интернете. Клиентские программы p2p-сетей объединяют компьютеры в гигантские сетевые «организмы», причем создают, поддерживают и контролируют эти сети сами конечные пользователи. Сегодня на каждом компьютере практически всегда открыт браузер. Объединяя браузеры в p2p-сеть получаем распределенную систему, которая всегда под рукой и которая может быть полезна для решения многих насущных задач.

Недавно я рассказывал о расширении Firefox, которое объединяет браузеры в p2p-поисковую сеть Всеиск. Теперь эта сеть освоила дополнительные функции: публикация/поиск торрентов и трекер для BitTorrent. Прежде чем перейти к подробному описанию, я в двух словах поясню постановку задачи.

Важнейшими узлами p2p-сети BitTorrent являются торрент-сайты. Через них пользователи находят раздачи, через них осуществляется координация текущих раздач. Однако торрент-сайты оказываются не только важнейшими, но и самыми слабыми точками BitTorrent. Уязвимость заключается прежде всего в том, что соответствующий сервер можно заблокировать, запретить, отобрать и т.п.

Если распределить диспетчерские функции по принципу p2p-сети, то это разом сделает координационный сервис неподвластным ни техническим, ни административным угрозам. Я решил сделать p2p-сервис, который будет реализовывать обычные функции торрент-сайта (поиск торрентов и диспетчер раздач), причем, при взаимодействии с клиентской программой, сервис будет выглядеть как обыкновенный трекер.

В этой статье я сначала коротко расскажу уважаемому собранию как все это работает технически, затем более развернуто покажу на картинках как пользоваться сервисом.


Как это устроено


раздел технический, можно пропустить
В случае классического торрент-трекера раздача организовывается следующим образом: при создании торрент-файла в него добавляется один или несколько URL-адресов трекеров. Например пусть это будет адрес http ://mytracker.com/announce. Затем пользователь получает торрент-файл и открывает его в клиентской программе, которая обращается по указанному адресу 'http ://mytracker.com/announce' чтобы объявить об участии в раздаче и получить от трекера список других участников.

В отличие от классического варианта, в моем решении клиентская программа обращается не к централизованному трекеру, а к локальному узлу сети Всеиск. Для этого при создании торрент-файла в него добавляется URL http ://localhost:7583/anns. Для BitTorrent-клиента все выглядит как в классическом случае — есть URL с которым ведется диалог по стандартному протоколу, просто обращение к трекеру направляется на локальный порт 7583. Этот порт слушает расширение Всеиск.

Далее происходит следующее:
1) BitTorrent-клиент послал запрос на порт 7583
2) узел Всеиск получил запрос и нашел в p2p сети узел(группу узлов) ответственных за конкретную раздачу
3) узел Всеиск запросил у ответственного узла список участников раздачи
4) узел Всеиск вернул BitTorrent-клиенту список участников раздачи

В результате клиентская программа получила необходимую информацию не с конкретного сайта, а из p2p сети. Получается распределенный p2p-трекер, который работает с любыми клиентскими программами.

vseisk-schema


Сразу нужно пояснить, что сейчас есть немало распределенных трекеров. По сути если вы встречаете аббревиатуру DHT в контексте какой-то клиентской BitTorrent-программы или когда говорят о «безтрекерной раздаче», то речь идет в том числе и о распределенном трекере. Однако существующие трекеры являются внутренними модулями каждой клиентской программы по отдельности, а значит в общем случае не работают для любых клиентских программ, а только для конкретной программы. Предложенное мной решение никак не зависит от клиентской программы, так что позволяет координировать раздачи между любыми клиентами глобально.

Следующий важный момент: другие распределенные решения реализуют только функцию диспетчера, поиска по названию там нет. В большинстве клиентов возможность поиска сводится к обращению на внешние поисковые сайты. В предлагаемом решении поиск торрента производится в той же самой p2p сети Всеиск, при этом опубликование торрент-файла сводится к копированию файла в выбранную пользователем папку.

Таким образом, построенная система фактически работает как стандартный торрент-сайт (поиск+трекер), но при этом лишена некоторых недостатков таких сайтов, например, распределенную p2p-систему невозможно закрыть/заблокировать/выключить. Никаких ограничений на публикуемые материалы нет, но будут предусмотрены меры по ограничению распространения криминальных материалов. В такой самоорганизующейся системе сами пользователи должны иметь возможность ограничивать распространение всякой гадости.

Как торренты попадают во Всеиск


Вариант первый: создаем торрент-файл самостоятельно
Предположим пользователь снял небольшой фильм «Бодрость в зимний день» и решает поделиться соответствующим файлом со всеми желающими. Для этого нужно создать торрент файл с помощью любого BitTorent-клиента. На картинках видно как это сделать в клиентах uTorrent и Vuze. Обратите внимание на комментарий — это поле должно быть заполнено чтобы данный торрент-файл можно было найти во Всеиск по соответствующей фразе. Важно чтобы в этом поле было точное название произведения, без лишней информации. Порядок слов при этом не важен. Второй существенный момент — адрес трекера. Как видно этот адрес указывает на localhost, причем номер порта может быть и другим если вы изменили соответствующий параметр настройки расширения Всеиск (страница 'настройки').

vseisk-create-torrent


Итак, создан торрент-файл для распределенного трекера, теперь можно опубликовать файл в сети Всеиск. Для этого пользователь просто помещает торрент-файл в специальную папку (настроить папку для публикации можно на странице 'настройки' в поле 'Папка с торрентами'). Далее уже само расширение Всеиск проанализирует и опубликует данные о торренте. На этом шаге другие пользователи уже могут найти и получить торрент-файл, теперь нужно начать раздачу с помощью BitTorrent-клиента. Для этого нужно просто открыть торрент-файл в клиентской программе и при этом указать место где находится исходный файл с фильмом.

Вариант второй: изменяем имеющийся торрент-файл
Рассмотрим ситуацию, когда у нас уже есть торрент-файл, но он создан для работы с другим трекером. Копируем торрент-файл в упомянутую папку и открываем страницу 'торренты'.

vseisk-torrent-list


В общем списке торрентов сразу видны помеченные восклицательным знаком файлы, которые Всеиск не может принять. Если навести мышку на треугольный значок в начале строки, появится пояснение в чем проблема с этим файлом. Чтобы редактировать файл просто щелкаем на название и открываем форму редактирования.

vseisk-torrent-edit


Заполняем поле «Заголовок» и сохраняем файл. Теперь осталось только открыть его в клиентской программе.
Замечание: торрент-файлы, помеченные как «частная раздача» редактировать нельзя, но можно сделать копию, добавив имя нового файла в поле «имя файла».

Вариант третий: раздача без публикации
Если пользователь хочет раздавать файл только своим друзьям/знакомым и не публиковать данные о файле в поисковой сети, то достаточно просто не помещать торрент-файл в папку для публикации. В остальном раздача будет работать как обычно, даже если торрент файл не зарегистрирован. Конечно в таком варианте пользователь сам должен позаботиться о передаче торрент-файла получателям.

Поиск и получение торрент-файла


Чтобы начать поиск, выбираем тип поиска «торренты» и пишем запрос:

vseisk-torrent-search


Получаем список доступных торрентов:

vseisk-torrent-found


Выбираем какой-то файл и начинаем получение. Теперь расширение попытается скачать торрент-файл у других пользователей.

vseisk-torrent-get


Когда торрент-файл получен и вы снова зайдете на страницу «торренты», файл появится в общем списке торрентов. Отсюда щелчком мыши можно открыть его в клиентской программе чтобы подключиться к раздаче.

vseisk-torrent-open


Настройки, ограничения


В настоящее время для работы с распределенным трекером необходимо открыть внешний доступ на порт расширения Всеиск. Это требование не столько техническое, сколько организационное. Мне кажется логичным если пользователь что-то хочет получить, то нужно что-то дать взамен. Если порт открыт, то другие узлы сети смогут обращаться напрямую друг к другу для сохранения информации и поиска. В этом случае нагрузка на сеть будет действительно равномерной. Если же открыты только некоторые узлы, то на них нагрузка будет, очевидно, больше.

Кроме этого соображения есть и техническая причина. К сожалению, пока Firefox не поддерживает UDP сокет, так что простые технологии прохода NAT применить не удается. А более сложные технологии для TCP просто недоступны на уровне сетевых функций высокого уровня, имеющихся в Firefox.

Конечно для многих пользователей это ограничение будет отпугивающим, и я сам не могу сказать что мне это решение очень нравится. Поэтому продолжу искать другие пути. Но пока — так.

Задать сетевой порт для расширения можно на странице «Настройки». Я не стану подробно рассказывать как открыть порт на машине для доступа извне, поскольку на эту тему написано много ( пример ), да и читатели этого сайта наверняка знают как это сделать.
Пояснение: для того, чтобы пользоваться только поиском в интернете, открывать порт не обязательно, это ограничение касается только функции трекера.

Изменения, дополнения


Хочу поблагодарить участников обсуждения первой статьи за конструктивную критику и интересные идеи. Сразу же я сделал возможность добавлять ссылки во Всеиск не делая закладку (это было предложение от rednaxi), теперь на странице редактирования закладки есть соответствующая галочка. Начал вносить изменения для автоматического анализа открываемых страниц а также статистики посещения страниц с прицелом на (полу?)автоматическое добавление интересных страниц в сеть Всеиск.

Заключение


На первом этапе сеть Всеиск умела сохранять ссылки на страницы в интернете и искать эти ссылки по соответствующим ключевым словам. Теперь сеть освоила дополнительные функции: публикация/поиск торрентов и трекер сети BitTorrent. Фактически сеть Всеиск в этом случае выступает диспетчерским сервисом для другой p2p сети — BitTorrent.

Сейчас выпущена версия 0.8-бета. Скачать можно тут. Если вас заинтересовал этот проект, буду очень признателен читателям, которые попробуют пользоваться расширением и поделятся своими замечаниями, соображениями, найденными ошибками.
Tags:
Hubs:
Total votes 128: ↑119 and ↓9 +110
Views 3.7K
Comments Comments 112