diff --git a/README.md b/README.md index e218f7a..94e4dbd 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,16 @@ # dpi-frag -маленький локальный socks5 прокси на C++, дробит TLS ClientHello на несколько TCP-пакетов так что DPI не видит SNI одним куском и не режет сайт по домену. +локальный socks5 прокси на C++, режет TLS ClientHello так что DPI не видит SNI одним куском. -работает тупо: ты подключаешься через него, он находит имя сайта внутри ClientHello и режет пакет прямо посередине домена перед тем как отправить дальше. большинство DPI смотрит паттерн в одном пакете — а тут его физически нет. +```mermaid +sequenceDiagram + App->>dpi-frag: SOCKS5 connect + ClientHello + dpi-frag->>DPI: часть 1 (до домена) + dpi-frag->>DPI: часть 2 (остаток домена) + Note over DPI: паттерн не собрать — пропускает + dpi-frag->>Site: обе части, как обычно + Site->>App: TLS handshake дальше как ни в чём не бывало +``` ## сборка @@ -11,18 +19,14 @@ cmake -B build cmake --build build --config Release ``` -нужен cmake и любой C++17 компилятор (проверено на MSVC). - ## юзать ``` build\Release\dpifrag.exe --port 1080 ``` -и в браузере/системе ставишь socks5 прокси на `127.0.0.1:1080`. +ставишь socks5 прокси на `127.0.0.1:1080` в браузере/системе. ## что не умеет -- не шифрует и не скрывает сам факт подключения, это не VPN -- не работает если DPI блокирует по IP, а не по SNI -- ipv6 таргеты через socks5 не тестировал, теоретически должно работать +не VPN, не шифрует. не поможет если блокировка по IP, а не по SNI.