Skip to content

zemecom/NoDPI

 
 

Repository files navigation

logo

NoDPI

Say NO to blocking!

Visitors License: GPL-3.0 GitHub Release Github All Releases Github Latest Release GitHub Stars GitHub Forks GitHub Last commit

Important

Этот проект является ответвлением репозитория https://github.com/theo0x0/nodpi и разрабатывается независимо от него. Не путайте с https://github.com/raspabamos/nodpi !

Note

Эта версия предназначена для настольных систем. Версия для Android доступна здесь: https://github.com/GVCoder09/NoDPI4Android

Read this in other languages / Читайте на других языках

Содержание

Описание

NoDPI — это утилита, предназначенная для обхода DPI (Deep Packet Inspection). Что такое DPI? DPI — это технология анализа сетевых пакетов на основе их содержимого для регулирования и фильтрации трафика. Она часто используется интернет-провайдерами для цензуры и блокировки доступа к определённым веб-ресурсам и протоколам. Цель этой программы — «обмануть» DPI, модифицируя сетевые пакеты, хотя на самом деле этот "обман" часто является следствием нехватки вычислительных ресурсов и времени на стороне провайдера.

Эта утилита была разработана в первую очередь для российских пользователей как более простая (но менее мощная) замена аналогичным инструментам. В большинстве случаев она справляется со своей задачей; в частности, она позволяет без проблем пользоваться YouTube.

Но, к сожалению, абсолютная работоспособность этой утилиты не может гарантироваться. Некоторые сайты, например, YouTube, легко поддаются разблокировке, в то время как другие, например, Instagram.com или Facebook.com, требуют совершенно иных методов обхода блокировок, которые пока не реализованы в этой утилите из-за их низкоуровненности и сложности. Иногда работоспособность определенных сайтов может зависеть и от провайдера — того, как именно он блокирует сайт и какие технические средства применяет.

"Screenshot"

Как это работает

NoDPI запускает на вашем компьютере прокси-сервер, через который вы перенаправляете http(s)-трафик. Программа перехватывает исходящие ClientHello соединений и фрагментирует их одним из следующих способов:

Случайная фрагментация (по умолчанию)

ClientHello разбивается на несколько частей случайной длины. Каждая часть склеивается префиксами типа ClientHello, и всё это отправляется одним пакетом.

Фрагментация по SNI

В пакете есть поле, содержащее запись SNI. ClientHello разбивается на 4 части: сам SNI, первая и вторая половина SNI, и всё, что после него. К каждой части прикрепляется заголовок, указывающий на тип ClientHello, и всё это отправляется одним пакетом.

Также, независимо от способа, версия TLS заменяется на версию 1.3, которая является самой современной на данный момент (хотя это не означает, что ваши данные начинают передаваться в соответствии со спецификациями этой версии). Всё это в совокупности позволяет обойти блокировку. По всей видимости, DPI пока не обладает необходимыми мощностями, чтобы распутать этот «клубок», и просто игнорирует такой трафик, экономя время и силы. Но, возможно, скоро эти методы перестанут работать.

Important

NoDPI работает только с HTTPS-трафиком. Он также может принимать HTTP-трафик, но исключительно для совместимости — HTTP-сайты практически не подлежат разблокировке, и программа просто отправляет трафик адресату.

NoDPI не собирает и не отправляет никаких данных о вас, не использует сторонние программы и библиотеки, не вмешивается в системные процессы и не требует прав администратора для работы.

Весь код NoDPI написан исключительно на Python и использует только его стандартную библиотеку.

Основные возможности и преимущества

  • Открытый исходный код
  • Простота использования, запуска и настройки. Программа имеет интуитивно понятный интерфейс. Использование утилиты не требует специальных знаний; её может запустить любой пользователь без прав администратора.
  • Программа работает со списком заблокированных доменов и может автоматически определять заблокированные веб-сайты.
  • Кроссплатформенность обеспечивает стабильную работу на Windows/Linux/MacOS. Также доступна версия для Android.
  • Программа может быть интегрирована в корпоративную сеть и использоваться сотрудниками, а не только отдельными пользователями.
  • Поддерживает журналирование ошибок и доступа. Вы можете видеть, кто и когда посещал конкретные веб-сайты.
  • Имеет возможность добавлять себя в автозагрузку на Windows/Linux

Сайты, которые в настоящее время не поддаются разблокировке через NoDPI

По состоянию на февраль 2026 года следующие сервисы и веб-сайты нельзя разблокировать с помощью NoDPI:

  • Instagram
  • Facebook
  • X (Twitter)
  • Telegram
  • WhatsApp
  • Голосовая и видеосвязь в Discord

Для них вы можете использовать GoodbyeDPI от @ValdikSS или другие инструменты. Также недоступны все сайты, заблокированные по IP.

Альтернативы

Условия использования и отказ от ответственности

Warning

Используя это программное обеспечение в любой форме или распространяя его, вы принимаете следующие условия использования и отказ от ответственности.

Разработчик и/или поставщик данного программного обеспечения не несет никакой ответственности за любые убытки или ущерб, включая, но не ограничиваясь, прямые, косвенные, случайные, штрафные или косвенные убытки, возникшие в результате использования или невозможности использования данного программного обеспечения, даже если разработчик или поставщик были уведомлены о возможности таких убытков.

Разработчик и/или поставщик данного программного обеспечения не несут ответственности за любые юридические последствия, возникшие в результате использования данного программного обеспечения. Это включает, но не ограничивается, нарушение законодательства, правил или нормативных актов, а также любые претензии или иски, возникшие в результате использования данного программного обеспечения. Пользователь несет полную ответственность за соблюдение всех применимых законов и нормативных актов при использовании данного программного обеспечения.

Разработчик и/или поставщик данного программного обеспечения не несут ответственности за любые убытки или ущерб, возникшие в результате неправомерного использования данного программного обеспечения. Неправомерное использование включает, но не ограничивается, использование программного обеспечения для незаконных целей, нарушение авторских прав, патентных прав, торговых марок или других прав интеллектуальной собственности, а также использование программного обеспечения в нарушение условий лицензии данного программного обеспечения.

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

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

Быстрый старт

  1. Скачайте последнюю версию для вашей ОС со страницы релизов и распакуйте её.
  2. Перейдите в каталог с распакованной утилитой и запустите её командой nodpi.exe --blacklist blacklist.txt в Windows или ./nodpi --blacklist ./blacklist.txt в Linux. Вы можете заменить файл blacklist.txt своим. Если файл blacklist не указан, программа по умолчанию будет искать blacklist.txt в текущем каталоге.
  3. В настройках браузера или системы настройте прокси на 127.0.0.1:8881
  4. Наслаждайтесь!

Important

Не забудьте отключить прокси-сервер в настройках системы или браузера после закрытия программы!

Пожалуйста, сообщайте нам о любых проблемах и неполадках на странице Issues

Дополнительные списки

По умолчанию используется черный список, содержащий только домены YouTube. Дополнительные списки можно найти здесь.

Добавление в автозагрузку в Windows и Linux

Note

Эта опция доступна только в исполняемых версиях.

Important

Убедитесь, что файл blacklist.txt находится в одной папке с исполняемым файлом.

  1. Выполните команду nodpi --install. Программа будет добавлена ​​в автозагрузку через реестр Windows (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run) или через systemd в Linux.
  2. Перезагрузите компьютер.
  3. Наслаждайтесь!

Поддерживаемые аргументы командной строки

usage: nodpi [-h] [--config CONFIG] [--host HOST] [--port PORT]
             [--out-host OUT_HOST]
             [--blacklist BLACKLIST | --no-blacklist | --autoblacklist]
             [--fragment-method {random,sni}]
             [--domain-matching {loose,strict}]
             [--auth-username AUTH_USERNAME]
             [--auth-password AUTH_PASSWORD]
             [--log-access LOG_ACCESS] [--log-error LOG_ERROR]
             [--dns-retries DNS_RETRIES]
             [--dns-retry-delay DNS_RETRY_DELAY]
             [--dns-resolver DNS_RESOLVER] [--dns-timeout DNS_TIMEOUT]
             [--connect-timeout CONNECT_TIMEOUT]
             [--io-timeout IO_TIMEOUT]
             [--read-chunk-size READ_CHUNK_SIZE] [-q] [--start-in-tray]
             [--install | --uninstall]

options:
  -h, --help            show this help message and exit
  --config CONFIG       Path to JSON config file
  --host HOST           Proxy host
  --port PORT           Proxy port
  --out-host OUT_HOST   Outgoing proxy host
  --blacklist BLACKLIST
                        Path to blacklist file
  --no-blacklist        Use fragmentation for all domains
  --autoblacklist       Automatic detection of blocked domains
  --fragment-method {random,sni}
                        Fragmentation method (random by default)
  --domain-matching {loose,strict}
                        Domain matching mode (strict by default)
  --auth-username AUTH_USERNAME
                        Proxy auth username
  --auth-password AUTH_PASSWORD
                        Proxy auth password
  --log-access LOG_ACCESS
                        Path to the access control log
  --log-error LOG_ERROR
                        Path to log file for errors
  --dns-retries DNS_RETRIES
                        Number of system DNS resolve retries before fallback
  --dns-retry-delay DNS_RETRY_DELAY
                        Delay between DNS retries in seconds
  --dns-resolver DNS_RESOLVER
                        Fallback DNS-over-TCP resolver IP address
                        (can be used multiple times)
  --dns-timeout DNS_TIMEOUT
                        Timeout in seconds for DNS operations
  --connect-timeout CONNECT_TIMEOUT
                        Timeout in seconds for outbound TCP connect
  --io-timeout IO_TIMEOUT
                        Idle timeout in seconds for socket reads/writes
  --read-chunk-size READ_CHUNK_SIZE
                        Socket read chunk size
  -q, --quiet           Remove UI output
  --start-in-tray       Start minimized to tray (Windows only)
  --install             Add proxy to Windows/Linux autostart (only for executable version)
  --uninstall           Remove proxy from Windows/Linux autostart (only for executable version)

Работа на Windows 7

Готовой сборки для Windows 7 пока нет. Текущая разработка, CI и Docker-окружение ориентированы на современный Python. Если вы хотите поэкспериментировать с совместимостью на Windows 7, вероятно, понадобится более старый Python, например 3.8, но такой сценарий сейчас активно не поддерживается.

Запуск из исходного кода

  1. Убедитесь, что у вас установлен Python 3.14 или выше. Сторонние runtime-зависимости не требуются.
  2. Склонируйте репозиторий git clone https://github.com/zemecom/NoDPI.git или скачайте архив с исходным кодом и распакуйте его.
  3. Перейдите в корневой каталог и запустите код командой python3 src/main.py.
  4. В настройках браузера или системы установите прокси-сервер на 127.0.0.1:8881.
  5. Наслаждайтесь!

Вы можете включить логирование ошибок и доступа с помощью параметров --log_error и --log_access.

Команды Makefile

Для локальной разработки можно использовать готовый Makefile:

make install-deps
make up
make test
make lint
make ci-check
make install-hooks

make up запускает NoDPI с текущей локальной конфигурацией, make lint запускает ruff, а make ci-check прогоняет синтаксические проверки, линт и тесты.

Один раз выполните make install-hooks, чтобы подключить версионируемые git hooks из .githooks/. После этого каждый git commit будет сначала прогонять те же локальные проверки, что и make ci-check.

make install-deps устанавливает локальные dev-зависимости из requirements-dev.txt. Для runtime сторонние зависимости не нужны; файл requirements.txt оставлен пустым, кроме поясняющего комментария.

Конфиг-файл и переменные окружения

Теперь NoDPI поддерживает JSON-конфиг и переопределение настроек через переменные окружения. В качестве шаблона можно использовать nodpi.example.json.

Пример:

python3 src/main.py --config ./nodpi.example.json

Если в корне проекта есть ./nodpi.json, NoDPI подхватывает его автоматически даже без --config. Для альтернативного файла можно использовать --config или NODPI_CONFIG.

Отдельные параметры можно переопределять через NODPI_HOST, NODPI_PORT, NODPI_DNS_RESOLVERS, NODPI_CONNECT_TIMEOUT и NODPI_IO_TIMEOUT.

Диагностика DNS и таймаутов

Если провайдер периодически ломает UDP DNS для проблемных доменов, запускайте NoDPI с более устойчивой DNS-стратегией:

python3 src/main.py \
  --dns-retries 3 \
  --dns-retry-delay 0.2 \
  --dns-timeout 2.0 \
  --dns-resolver 8.8.8.8 \
  --dns-resolver 1.1.1.1 \
  --connect-timeout 5 \
  --io-timeout 30

DNS-сбои теперь пишутся в лог с полями host, resolver_path, attempts, финальным reason и system_reason.

Сборка исполняемого файла

  1. Убедитесь, что у вас установлен Python 3.14 или выше.
  2. Установите pyinstaller: pip install pyinstaller
  3. Клонируйте репозиторий git clone https://github.com/zemecom/NoDPI.git или скачайте архив с исходным кодом и распакуйте его.
  4. Перейдите в корневой каталог и выполните команду pyinstaller ./nodpi.spec
  5. Скомпилированный файл будет находиться в папке ./dist

Запуск в Docker

  1. Установите Docker.
  2. Клонируйте репозиторий: git clone https://github.com/GVCoder09/NoDPI
  3. Перейдите в каталог проекта и соберите контейнер:
    cd NoDPI
    sudo docker build -t nodpi-proxy .
  4. Создайте локальный runtime-конфиг nodpi.json и убедитесь, что он ссылается на blacklist.txt как на путь к blacklist.
  5. Запустите контейнер командой:
    sudo docker run -d \
     --name nodpi \
     -p 8881:8881 \
     -v $(pwd)/nodpi.json:/app/nodpi.json:ro \
     -v $(pwd)/blacklist.txt:/app/blacklist.txt:ro \
     nodpi-proxy
  6. Наслаждайтесь!

FAQ

В: Законно ли использование NoDPI в России?

О: Да, его использование полностью законно по состоянию на октябрь 2025 года. Однако вы можете быть привлечены к административной ответственности за рекламу и распространение инструментов, предназначенных для обхода блокировок.

В: Безопасно ли это?

О: Да, использование этой утилиты безопасно. Весь трафик, передаваемый по HTTPS, остаётся зашифрованным, как и раньше. Более того, мы не собираем никакой информации о пользователях.

В: Эта программа маскирует мой трафик? Провайдер не видит какие сайты я посещаю?

О: Нет, в отличии от VPN или Tor, эта программа не скрывает трафик от провайдера. Он по прежнему может видеть IP адреса сайтов, к которым вы обращаетесь.

История звезд проекта

Star History Chart

About

NoDPI is a utility for bypassing the DPI (Deep Packet Inspection)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 97.2%
  • Makefile 1.9%
  • Other 0.9%