,

DPI. Что это такое? Как обойти на android

Что такое DPI?


DPI (Deep Packet Inspection) — технология, позволяющая собирать статистическую информацию из пакетов, проверять их и, конечно же, фильтровать информацию, в зависимости от содержимого пакета. Иногда операторы фильтруют с помощью этой технологии целые протоколы, такие как BitTorrent.
Различают два типа DPI: пассивный и активный. Разница лишь в том, что активный может заблокировать пакет и не дать ему дойти до адресата, а пассивный только лишь отправить фейковый пакет с редиректом или сбросом соединения. Способы обхода обоих схожи.

Как обмануть DPI?


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

HTTP


Типичный HTTP запрос (такой отправляют все известные браузеры) выглядит следующим образом:
GET /index.php HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: keep-alive

Все заголовки начинаются с большой буквы, далее двоеточие, затем один пробел, значение заголовка и конец строки в виде CRLF (\r\n).

Заглянем в RFC 7230:
Each header field consists of a case-insensitive field name followed
by a colon (":"), optional leading whitespace, the field value, and
optional trailing whitespace.

Согласно нему, заголовки не чувствительны к регистру, а после двоеточия может быть любое число пробелов. Это значит, что сломать DPI можно с помощью изменения «Host:» на «hOsT:». Большинство серверов примет пакет и если заменить символ конца строки с CRLF (\r\n) на LF (\n).

HTTPS


В случае с HTTPS, DPI ищут не зашифрованное поле SNI, в котором содержится адрес сайта. Можно было бы изменить поле SNI, но для этого придётся модифицировать системные библиотеки, поэтому для обхода блокировок по HTTPS используется фрагментация пакетов, которая, кстати, может использоваться и для HTTP. Суть в том, что почти все DPI умеют работать только с отдельно взятыми пакетами, а читать всё соединение они не умеют, поэтому достаточно отправить запрос к сайту в виде нескольких TCP пакетов.

DNS


Все предыдущие методы бесполезны, если адрес сайта неверно определился на уровне DNS сервера. Дело в том, что многие операторы перенаправляют все DNS запросы на свой сервер и если сайт заблокирован, отправляют некорректный ответ. Решается использованием протокола DoH.

Методы обхода DPI на android


Для Windows и Linux уже существуют решения вроде GoodbyeDPI и GreenTunnel, но для android до недавнего времени ничего такого не было, поэтому я решил сделать свою программу, и получился DPI Tunnel.

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

Как использовать



Если есть root, то в настройках программы выбрать «Установить DPITunnel прокси глобально» и нажать кнопку на главном экране, если root нет, то нажать кнопку на главном экране и выставить прокси в ручную в настройках Wi-Fi или APN. Адрес прокси: 127.0.0.1, порт тот, что указан в настройках программы.

Известные баги


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

Github: DPITunnel
4PDA: DPITunnel
Чат в Telegram (лучше писать на английском, если знаете): @DPITunnelOFFICIAL


DPI Tunnel 2.0
Android 4.4 и выше
Последнее изменение:
 
21soroka
21soroka, 12 марта 2020 - 18:50   (...)
Ответить
zhenyolka
zhenyolka, 13 марта 2020 - 05:59   (...)
Свой же копипаст. На хабре его просто дальше песочницы не пропустили. Все равно нельзя?
Ответить
Astramak
Astramak, 13 марта 2020 - 12:54   (...)
а spy-soft.net это тоже ваше?
Ответить
zhenyolka
zhenyolka, 13 марта 2020 - 14:48   (...)
Нет, они просто спи*дили мою статью, хотя не жалко: больше людей узнает о DPITunnel.
Ответить
21soroka
21soroka, 13 марта 2020 - 13:01   (...)
Опубликовал на «Форуме» — топик больше всего подходит именно этому разделу
Ответить

Добавить комментарий
Если нужно ответить кому-то конкретно,
лучше нажать на «Ответить» под его комментарием