Skip to content

black1277/noDPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Прокси сервер на Node.js (noDPI)

Это локальный прокси-сервер на Node.js - анализирует исходящие HTTPS запросы, и если они идут к заблокированным хостам - модифицирует их таким образом, что они проходят через системы DPI. Например, ютуб начинает нормально работать.

🐒 Вдохновился описанием метода из этой статьи на хабре ( ❗ имеет региональные ограничения - из России не видна) и решил написать версию программы на Node.js. Никаких глобальных целей не ставил - просто чтобы попробовать, будет ли работать.

🔥 Работает!!!

Тестировал на своем домашнем компе с Windows 10 x64, в основном боролся с утечками памяти - в итоге после суток непрерывной работы процесс в диспетчере держится в рамках 36мб - 80мб в зависимости от интенсивности запросов. Во время теста одновременно смотрел ролики на ютуб, смотрел стрим с твича, загружал свои видео на ютуб(примерно по 300мб - 800мб), просматривал почту и другие сайты. Код не сильно красивый, но чтобы поиграться - хватает :trollface:

❕ Особенности:

  • написано без зависимостей и сторонних библиотек, нативными функциями, поэтому при установленной Node не нужно делать npm install и других манипуляций
  • работает на любых платформах где может работать Node.js
  • компилируется в исполняемый файл под системы Windows, Linux, Macos, для запуска исполняемого файла Node уже не потребуется.
  • проксирует только HTTPS запросы, все HTTP отсекаются - клиент получает '''HTTP/1.1 405 Method Not Allowed'''
  • запуск без параметров - модификации затронут только ютуб, с параметром -f будут добавлены хосты из файла blacklist.txt
  • открытый исходный код - никаких утечек данных и тайных закладок, бэкдоров
  • завершение работы происходит по ctrl+C, максимум в течении 5сек
  • идеально работает в связке с Mozilla Firefox - в этом браузере можно направить на прокси только HTTPS трафик. Настройки на скрине ниже: scrin

Использование и запуск:

  1. Вариант - если в системе установлена Node.js
  • скачать репозиторий
  • в консоли сделать текущей директорией папку где лежит package.json
  • запустить командой npm start или node ./src/final.js -d -f
  1. Вариант - скомпилировать в исполняемый файл под свою систему Собирается в приложение так (для Node version < 21):
  • npm install -g pkg

  • pkg -t node18-win-x64 ./src/final.js (для Windows x64)

  • pkg -t node18-linux-x64 ./src/final.js (для Linux)

  • pkg -t node18-macos-x64 ./src/final.js (для Mac)

    Начиная с 21 версии Node - можно скомпилировать нативными средствами. Подробнее, смотрите в документации

  1. Скачать готовый исполняемый файл со страницы релиза под свою платформу. Если запускать скомпилированное приложение без параметров, то будет патчить запросы только к ютуб. Если нужны все хосты из blacklist.txt, то нужно запускать с параметром -f (сам файл blacklist.txt не нужен, он уже внутри). Параметр -d если хотите видеть в консоли всё что происходит под капотом.

Известные проблемы:

  • При активном использовании некоторые сайты могут не открываться с первого раза. Достаточно бывает нажать кнопку обновить в браузере.
  • Проксируются только HTTPS, HTTP трафик не проходит.
  • Если следить за логами в консоли, иногда проскакивает красная строка с ошибкой сокета - ничего значимого.