Обход блокировки Youtube на Python. Смотрим и скачиваем видео в высоком разрешении
Основная проблема в том, что у меня Linux, на котором GoodbyeDPI просто не работает, а другие решения оказались либо слишком "громоздкими", либо вообще не работающими. Было принято решение сделать свой, достойный инструмент для обхода блокировки Youtube, который будет работать на Linux. Как оказалось позже, делать даже почти ничего и не пришлось, ведь автор этой статьи (она заблокирована по требованию РКН) уже давно все сделал сам и предоставил исходный код. Чуть позже он опубликовал на GitHub новую версию, а я лишь немного дополнил ее, чтобы было удобнее скачивать видео и аудио в хорошем качестве.
В этой статье я покажу как использовать FuckDPI (или NoDPI от разработчика), чтобы спокойно смотреть видео на YouTube в высоком качестве, без ограничений и даже скачивать контент.
Немного про DPI и способы обхода:
В большинстве случаев DPI (Deep Packet Inspection) работает следующим образом:
При попытке получения доступа к заблокированному ресурсу DPI отправляет вам в ответ HTTP 302 Redirect, опережая ответ от целевого ресурса. Таким образом, вместо получения доступа к ресурсу, страница (или видеоролик, как в нашем случае) бесконечно грузится из за постоянной переадресации.
Как с этим бороться?
Способов много. Вот некоторые из них:
*PN - самый распространенный, но при этом опасный способ. Большинство нормальных *PN в России заблокированы и остались те, которые собирают кучу информации о пользователях и суют огромное количество рекламы. К тому же, я не хочу нарушать закон РФ, поэтому рассказывать про обход блокировок с помощью *PN не буду.
Tor - рабочий способ, но со своими заморочками. Во-первых, Tor также заблокирован в России, поэтому для доступа к нему понадобится раздобыть мосы. Во-вторых, даже если доступ к Tor получен, то скорость работы Youtube, да и многих других сервисов все равно будет очень низкая. Для мобильных устройств и Smart TV явно не лучшее решение (хотя некоторые им активно пользуются).
Использование дыр в DPI - эффективный, но не всегда рабочий способ. Активно применяется во всем известном GoodbyeDPI. Со временем провайдеры повышают мощность своих вычислительных ресурсов, поэтому GoodbyeDPI и его аналоги могут работать далеко не всегда и не везде.
Мы будем использовать последний способ. Несмотря на его минусы, он все равно очень эффективный и работает на множестве провайдеров. Я таким способом пользуюсь уже больше года и у меня все прекрасно работает без перебоев.
Обход блокировки:
Еще раз хочу отметить, что оригинальный код был взят из этого репозитория от данного разработчика и я искренне благодарен ему за столь полезный код. Он взял разработку nodpi и переписал ее.
В моем репозитории вы найдете файл blacklist.txt, в который помещены домены, блокировку которых мы хотим обходить:
youtube.com youtu.be yt.be googlevideo.com ytimg.com ggpht.com gvt1.com youtube-nocookie.com youtube-ui.l.google.com youtubeembeddedplayer.googleapis.com youtube.googleapis.com youtubei.googleapis.com yt-video-upload.l.google.com wide-youtube.l.google.com
Также там есть файл FuckDPI.py, который и является инструментом для обхода блокировки. Чтобы его запустить, нам необходимо создать виртуальное окружение python и установить некоторые модули:
git clone https://github.com/chernoff-security/fdpi
cd fdpi
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Отлично, переходим в веб-браузер и настраиваем подключение:
В качестве альтернативы можете использовать расширение FoxyProxy:
Переходим на youtube и проверяем:
Отлично, все работает! Мы можем спокойно смотреть видеоролики в разрешении 4К и без тормозов.
Теперь у нас новая задача - научиться скачивать видеоролики с ютуба, причем так, чтобы это было удобно, быстро и в хорошем качестве.
Велосипед я изобретать не стал и опять воспользовался уже готовым решением, но немного его улучшил и адаптировал под себя (работает только на Linux, но если изменить команды для ffmpeg, то должно заработать и на Windows). Что изменилось:
- Добавлен выбор:
- Русифицирован интерфейс
- Добавлен удобочитаемый вывод информации на экран
- Добавлена обработка ошибок, если пользователь ввел некорректный URL
Запускаем в новом окне терминала downloader.py:python downloader.py
Выбираем нужное действие. Например, попробуем скачать видео в высоком разрешении:
Заключение
Как оказалось, обойти блокировку YouTube даже на Linux довольно просто. Достаточно лишь нескольких строк кода на Python и понимания технологии DPI. Пока YouTube официально не заблокирован - данный способ будет работать. Желаю вам удачной борьбы с цензурой!