Как DPI распознаёт VPN-трафик и какие протоколы обхода существуют

DPI (Deep Packet Inspection) — это не одна технология, а набор методов анализа сетевого трафика на уровнях выше простого просмотра заголовков. Операторы связи и государственные системы фильтрации используют DPI для обнаружения и блокировки VPN-соединений. Понимание того, как именно работает детект, позволяет осознанно выбирать протокол и оценивать его устойчивость.

Что видит DPI-система​


DPI-оборудование стоит на пути трафика (обычно на границе сети оператора) и анализирует каждый пакет в нескольких плоскостях:

  • Заголовки L3/L4 — IP-адреса, порты, протокол (TCP/UDP), флаги, размер пакетов, TTL.
  • Первые байты payload — даже если данные зашифрованы, начальные байты часто содержат идентификатор протокола или фиксированные конструкции.
  • Статистические характеристики потока — размер пакетов, интервалы между ними, соотношение входящего и исходящего трафика, энтропия.
  • Поведенческие паттерны — характер соединения, количество одновременных потоков, реакция на зондирование.

Важно: DPI не расшифровывает содержимое туннеля. Он определяет сам факт использования VPN по косвенным и прямым признакам.

Методы обнаружения по протоколам​


OpenVPN​


OpenVPN — один из самых детектируемых VPN-протоколов. Причины:

  • Фиксированный заголовок пакета. Каждый пакет OpenVPN начинается с однобайтового opcode, за которым следует идентификатор сессии (8 байт в режиме TLS). Сигнатура стабильна и легко распознаётся.
  • TLS handshake. В режиме TLS первый пакет содержит ClientHello с характерным набором cipher suites и расширений. DPI может сопоставить fingerprint handshake с известными шаблонами OpenVPN.
  • Порт по умолчанию. 1194/UDP или 1194/TCP — тривиальный индикатор, хотя смена порта решает лишь часть проблемы.
  • Keepalive-пакеты. Регулярные пакеты фиксированного размера с предсказуемым интервалом создают узнаваемый паттерн.

IPsec (IKEv2 / IKEv1)​


  • IKE handshake использует UDP-порт 500 (и 4500 для NAT-T). Начальные пакеты IKE содержат фиксированные конструкции: Exchange Type, SPI, набор proposal.
  • ESP-пакеты (IP protocol 50) имеют характерную структуру: SPI + Sequence Number + зашифрованный payload. Сам факт использования протокола 50 вместо TCP/UDP — прямой индикатор.
  • NAT-T инкапсулирует ESP в UDP/4500, но заголовок содержит ненулевой SPI и фиксированный формат.

WireGuard​


WireGuard работает поверх UDP и инкапсулирует IP-пакеты в зашифрованные UDP-датаграммы. Протокол использует фиксированный формат сообщений: каждый пакет содержит идентификатор типа сообщения, индексы отправителя и получателя, а затем зашифрованный payload. Handshake-сообщения имеют фиксированный размер, что создаёт узнаваемую сигнатуру по длине первого пакета.

Согласно документации проекта, WireGuard ассоциирует туннельные IP-адреса с публичными ключами пиров и отправляет зашифрованные пакеты на UDP-эндпоинт, привязанный к каждому пиру. Все данные шифруются и аутентифицируются, включая handshake.

Факторы, усложняющие детект WireGuard:

  • Протокол не отвечает на пакеты, не прошедшие аутентификацию, что затрудняет активное зондирование.
  • Порт настраивается произвольно — фиксированного порта по умолчанию нет.
  • Все данные зашифрованы, включая handshake.

Тем не менее, по характерному размеру первого пакета и отсутствию ответа на мусорные данные продвинутая DPI-система может классифицировать трафик как WireGuard.

Shadowsocks​


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

  • Нет фиксированного заголовка — данные начинаются со случайного salt, за которым следует зашифрованный payload.
  • Однако статистический анализ (высокая энтропия с первых байт, отсутствие TLS-паттернов на порту 443) может выдать протокол.
  • Современные реализации (с плагинами типа v2ray-plugin) маскируют трафик под WebSocket или TLS.

Эвристики и статистический анализ​


Когда сигнатурный детект не срабатывает, применяются косвенные методы:

ПризнакЧто выдаёт
Постоянный поток данных без паузТуннель с активным трафиком, а не обычный веб-серфинг
Высокая энтропия всех пакетовШифрование без дополнительной маскировки
Одинаковый размер пакетовИнкапсуляция с фиксированным overhead
Один удалённый IP при большом объёме данныхВесь трафик идёт через один сервер
Отсутствие SNI или нестандартный SNI на 443Маскировка под TLS без реального TLS
Реакция на зондированиеСервер не отвечает на невалидные запросы или отвечает нестандартно

Активное зондирование​


DPI-система может отправить на подозрительный сервер пакет, имитирующий начало легитимного соединения (например, HTTP-запрос или TLS ClientHello). Если сервер не отвечает или отвечает не по протоколу — это индикатор туннеля. WireGuard в этом плане устойчив: он молча отбрасывает пакеты, которые не проходят аутентификацию.

Протоколы и техники обхода DPI​


VLESS / VMess + Reality (Xray)​


Протокол Reality в Xray решает проблему маскировки радикально: клиент при подключении к серверу использует реальный TLS-сертификат стороннего сайта. Для DPI-системы соединение выглядит как обычный HTTPS-запрос к легитимному домену. Отличить его от реального TLS-трафика без MITM невозможно.

Ключевые свойства:

  • Нет собственного handshake, который можно сигнатурно детектировать.
  • SNI указывает на реальный сайт.
  • При активном зондировании сервер проксирует запрос на настоящий сайт.

Trojan​


Trojan инкапсулирует трафик в стандартный TLS. Для наблюдателя соединение неотличимо от HTTPS-запроса к обычному сайту. Уязвимость: если сервер не имеет валидного сертификата или отвечает некорректно на HTTP-запросы, активное зондирование раскроет подмену.

AmneziaWG​


Модификация WireGuard, изменяющая формат заголовков пакетов. Стандартный WireGuard имеет фиксированные размеры сообщений и предсказуемую структуру; AmneziaWG добавляет мусорные байты и изменяет размеры, ломая сигнатуры, настроенные на оригинальный протокол.

Obfs4 / meek​


  • Obfs4 — обфусцирующий транспорт из экосистемы Tor. Шифрует данные и добавляет случайный padding, делая поток неотличимым от случайного шума.
  • Meek — инкапсулирует трафик в HTTPS-запросы к доменам крупных CDN, что делает блокировку экономически невыгодной.

Shadowsocks с плагинами​


Комбинация Shadowsocks + v2ray-plugin или Shadowsocks + kcptun позволяет обернуть трафик в WebSocket поверх TLS или в QUIC-подобный поток, что усложняет сигнатурный детект.

Практические ограничения обхода​


Ни один протокол не гарантирует 100% устойчивость к DPI. Причины:

  1. Обновление сигнатур. Операторы регулярно обновляют базы детекта. Протокол, работающий сегодня, может быть распознан через неделю.
  2. Поведенческий анализ. Даже идеально замаскированный туннель выдаёт себя паттерном: один сервер, постоянный поток, отсутствие разнообразия в SNI.
  3. Блокировка по IP. Если DPI не может классифицировать протокол, система может заблокировать IP-адрес сервера по факту подозрительной активности.
  4. Требования регулятора. В некоторых юрисдикциях операторы обязаны блокировать весь трафик, не прошедший через сертифицированные шлюзы.

Как проверить, детектируется ли ваш трафик​


Прямой способ — попросить кого-то на стороне оператора посмотреть дамп, но это нереалистично. Косвенные методы:

  • Сравнение с эталоном. Запустите tcpdump на клиенте и сравните первые байты пакетов с известными сигнатурами протокола. Если заголовок содержит фиксированные поля — сигнатурный детект вероятен.
  • Тест на зондирование. Отправьте на свой сервер мусорный пакет (например, echo "GET / HTTP/1.1" | nc server_ip port). Если сервер молчит — это косвенно подтверждает устойчивость к активному зондированию.
  • Мониторинг доступности. Если соединение стабильно обрывается через определённое время после установки — вероятно, DPI классифицировал поток и применил правило.
  • Смена порта и протокола. Если перенос на 443/TCP с TLS-маскировкой восстанавливает доступность, значит предыдущая конфигурация детектировалась.

Сводная таблица устойчивости​


ПротоколСигнатурный детектСтатистический детектАктивное зондирование
OpenVPNВысокий рискСредний рискНизкий риск
IPsec/IKEv2Высокий рискСредний рискНизкий риск
WireGuardСредний рискСредний рискНизкий риск
AmneziaWGНизкий рискСредний рискНизкий риск
VLESS+RealityНизкий рискНизкий рискНизкий риск
TrojanНизкий рискСредний рискСредний риск
Shadowsocks (без плагина)Средний рискВысокий рискНизкий риск
Shadowsocks + v2ray-pluginНизкий рискСредний рискНизкий риск

Типичные ошибки при настройке​



Что выбрать в условиях агрессивного DPI​


Если сеть активно фильтрует VPN-трафик, приоритет смещается от «чистых» протоколов к маскирующим:

  1. VLESS + Reality — текущий оптимум по соотношению скорость/маскировка/устойчивость к зондированию.
  2. Trojan — хорошая альтернатива, если нужен простой стек без сложных зависимостей.
  3. AmneziaWG — если нужна совместимость с экосистемой WireGuard и минимальные изменения в конфигурации.
  4. Shadowsocks + v2ray-plugin — проверенный вариант для сред, где TLS-трафик не подвергается глубокой инспекции.

Чистый WireGuard и OpenVPN в сетях с продвинутым DPI рассматривать как основной транспорт нецелесообразно — они детектируются на уровне сигнатур без необходимости вскрывать шифрование.

Источники​


 
Статья не совсем полная:

1. Не сказано как dpi использует ai для детекта vpn.

2. Какие современные способы обхода dpi в частномти против ai ?

Дополни пожалуйста.
 

AI/ML в DPI: как машинное обучение детектирует VPN​


Почему сигнатурного анализа уже недостаточно​


Классический DPI работает по сигнатурам: фиксированные байты, размеры пакетов, порты. Протоколы вроде VLESS+Reality или Trojan не имеют стабильных сигнатур, потому что их трафик структурно идентичен легитимному TLS. Именно это заставило операторов и регуляторов внедрять ML-модели, которые классифицируют трафик не по содержимому, а по статистическим и поведенческим признакам потока.

Какие признаки извлекает ML-модель​


ML-классификатор не читает payload. Он работает с метаданными потока (flow features), которые доступны без расшифровки:

Размерные признаки:
  • Гистограмма размеров пакетов в потоке (packet size distribution)
  • Средний, медианный, максимальный размер пакета
  • Дисперсия размеров
  • Соотношение размеров входящих и исходящих пакетов
  • Размер первых N пакетов (обычно 5–20)

Временные признаки:
  • Интервалы между пакетами (inter-arrival time, IAT)
  • Дисперсия и среднее IAT
  • Паттерн чередования направлений (direction alternation)
  • Длительность потока
  • Периодичность (keepalive-пакеты создают регулярный паттерн)

Объёмные признаки:
  • Общий объём данных за сессию
  • Соотношение upstream/downstream
  • Скорость передачи (throughput)
  • Количество пакетов в единицу времени

Признаки TLS-рукопожатия (если трафик на 443):
  • Порядок и набор cipher suites в ClientHello
  • Порядок расширений (extensions order)
  • Длина SNI и его энтропия
  • Размер ClientHello
  • Наличие или отсутствие ALPN, supported_groups
  • Fingerprint JA3/JA4 — хеш от параметров ClientHello

Поведенческие признаки:
  • Количество одновременных соединений к одному IP
  • Разнообразие SNI при обращении к одному IP
  • Наличие или отсутствие HTTP-запросов после TLS handshake
  • Реакция на зондирование (отвечает ли сервер на невалидные данные)

Архитектуры моделей, применяемых в DPI​


Random Forest / Gradient Boosting (XGBoost, LightGBM):
  • Обучаются на табличных flow features
  • Быстрые в инференсе, подходят для inline-обработки на высокой скорости
  • Хорошо работают с ручным feature engineering
  • Типичная точность классификации VPN vs non-VPN: 92–97% на сбалансированных датасетах

Свёрточные сети (CNN):
  • Применяются к первым N байтам потока, представленным как одномерный массив
  • Улавливают локальные паттерны в последовательности байтов
  • Могут детектировать протокол даже при шифровании, если начальные байты имеют ненулевую структуру (например, TLS record header)

Рекуррентные сети (LSTM / GRU):
  • Работают с последовательностями: размеры пакетов во времени, чередование направлений
  • Улавливают временные зависимости, которые не видны в агрегированных статистиках
  • Особенно эффективны против туннелей с характерным ритмом (keepalive, регулярная инкапсуляция)

Трансформеры и attention-модели:
  • Новое направление; обучаются на длинных последовательностях flow features
  • Могут выявлять сложные корреляции между разнесёнными во времени событиями
  • Требуют значительных вычислительных ресурсов, поэтому пока чаще применяются в offline-анализе, а не в inline-DPI

Автоэнкодеры и anomaly detection:
  • Модель обучается на «нормальном» трафике (браузинг, стриминг, мессенджеры)
  • Всё, что сильно отклоняется от выученного распределения, помечается как аномалия
  • Не требует размеченных данных по каждому VPN-протоколу — детектирует «непохожесть»

Как это выглядит на практике: ТСПУ и GFW​


ТСПУ (Россия):
  • Оборудование устанавливается на сетях операторов в рамках закона о «суверенном интернете»
  • По открытым данным и утечкам: комбинирует сигнатурный анализ, эвристики и ML-классификацию
  • ML-компонент предположительно обучен на flow features и TLS-фингерпринтах
  • Известны случаи, когда ТСПУ блокировал WireGuard и OpenVPN по сигнатурам, а VLESS+Reality — по поведенческим признакам (один IP, постоянный поток, отсутствие разнообразия SNI)

GFW (Китай):
  • Наиболее продвинутая система DPI в мире
  • Использует ML для детекта Shadowsocks, VMESS, Trojan
  • Известные техники: активное зондирование, статистический анализ энтропии первых байт, анализ TLS-фингерпринтов
  • Исследования (например, работа «How the Great Firewall Detects Shadowsocks») показывают, что GFW детектирует Shadowsocks по высокой энтропии первых пакетов и отсутствию TLS-паттернов на порту 443

Конкретные исследования и публикации​


  • Dainotti et al., «Internet Traffic Classification Through Bayesian Analysis of Packet Size and Arrival Times» — ранняя работа по flow-based классификации
  • Moore & Zuev, «Internet Traffic Classification Using Bayesian Analysis Techniques» — байесовская классификация по flow features
  • Rezaei et al., «Deep Learning for Encrypted Traffic Classification» — CNN на первых байтах зашифрованных потоков
  • Lashkari et al., «Characterization of Encrypted VPN Traffic Using Time-Series Analysis» — LSTM на временных рядах размеров пакетов
  • Anderson & McGrew, «Identifying Encrypted Malware Traffic with Contextual Graph Networks» — графовые модели для классификации зашифрованного трафика

────────────────────

Современные методы обхода AI-based DPI​


Принцип: не победить модель, а стать невидимым для её признаков​


ML-модель детектирует VPN не потому, что «знает» протокол, а потому что трафик статистически отличается от легитимного. Обход сводится к тому, чтобы сделать flow features неотличимыми от целевого класса (обычно — HTTPS-браузинг или видеостриминг).

1. Нормализация размеров пакетов (packet padding)​


Проблема: ML-модель видит гистограмму размеров пакетов. У VPN-туннеля она часто отличается от браузерного трафика (например, много пакетов одинакового размера из-за инкапсуляции).

Решение: Добавление случайного padding к пакетам, чтобы распределение размеров соответствовало целевому профилю.

Python:
# Концептуальный пример: padding до случайного размера из целевого распределения
import random
import numpy as np

# Целевое распределение размеров пакетов для HTTPS-браузинга
# (получено из реального дампа)
target_sizes = np.array([64, 128, 256, 512, 1024, 1400, 1460])
target_probs = np.array([0.15, 0.20, 0.25, 0.15, 0.10, 0.10, 0.05])

def pad_packet(payload: bytes) -> bytes:
    target_size = np.random.choice(target_sizes, p=target_probs)
    current_size = len(payload)
    if current_size < target_size:
        padding_length = target_size - current_size
        # Padding заполняется случайными байтами или нулями
        # в зависимости от протокола
        payload += bytes(random.getrandbits(8) for _ in range(padding_length))
    return payload

Где реализовано:
  • VLESS+Reality в Xray поддерживает padding в конфигурации
  • Trojan добавляет padding по умолчанию
  • Некоторые реализации Shadowsocks имеют опцию padding

2. Временная обфускация (timing jitter)​


Проблема: LSTM и трансформеры анализируют последовательность inter-arrival times. VPN-туннель часто имеет более регулярный паттерн, чем браузерный трафик.

Решение: Добавление случайной задержки перед отправкой пакетов.

Python:
import asyncio
import random

async def send_with_jitter(send_func, packet: bytes, base_delay=0.001):
    # Добавляем джиттер, имитирующий браузерный трафик
    # Браузерные запросы имеют логнормальное распределение задержек
    jitter = random.lognormvariate(mu=-6, sigma=1.5)
    await asyncio.sleep(base_delay + jitter)
    await send_func(packet)

Ограничение: Джиттер увеличивает latency, что критично для интерактивных приложений (VoIP, игры).

3. Мимикрия под конкретное приложение (protocol mimicry)​


Проблема: ML-модель обучена на реальных профилях трафика. Если VPN-трафик не похож ни на один известный профиль, anomaly detection пометит его.

Решение: Формировать трафик так, чтобы его flow features соответствовали конкретному приложению.

Пример: мимикрия под видеостриминг (YouTube/Netflix):
  • Большие последовательные загрузки (downstream >> upstream)
  • Пакеты близкие к MTU (1400–1460 байт)
  • Регулярные burst-паттерны (буферизация)
  • Низкая энтропия SNI (один домен на соединение)

Пример: мимикрия под браузерный HTTPS:
  • Разнообразные размеры пакетов
  • Короткие burst-запросы с паузами
  • Множество соединений к разным SNI
  • TLS 1.3 с стандартным набором расширений

Где реализовано:
  • Xray с fragment — разбивает TLS ClientHello на фрагменты, ломая JA3-фингерпринт
  • VLESS+Reality — использует реальный TLS-сертификат стороннего сайта, что делает JA3/JA4 идентичным легитимному
  • GOST с TLS-маскировкой — инкапсулирует трафик в TLS с валидным сертификатом

4. Разрушение JA3/JA4-фингерпринта​


Проблема: ML-модель может использовать JA3/JA4-хеш как признак. Если ClientHello VPN-клиента отличается от стандартных браузерных, это индикатор.

Решение: Модификация параметров TLS ClientHello.

Код:
# Пример: Xray fragment для разрушения JA3
# Разбивает ClientHello на несколько TCP-сегментов,
# что не позволяет DPI собрать полный fingerprint

{
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "TARGET_IP",
            "port": 443,
            "users": [
              {
                "id": "UUID",
                "encryption": "none",
                "flow": "xtls-rprx-vision"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "serverName": "www.microsoft.com",
          "fingerprint": "chrome",
          "publicKey": "PUBLIC_KEY",
          "shortId": "SHORT_ID",
          "spiderX": "/"
        },
        "tcpSettings": {
          "header": {
            "type": "none"
          }
        }
      }
    }
  ]
}

Параметр "fingerprint": "chrome" заставляет Xray генерировать ClientHello, идентичный Chrome, что делает JA3/JA4 неотличимым от реального браузера.

5. Fragment и мультиплексирование​


Проблема: DPI может анализировать первые пакеты потока. Если первый пакет содержит характерную конструкцию, модель классифицирует поток.

Решение:
  • Fragment — разбивка начальных пакетов на мелкие фрагменты, которые DPI не может корректно собрать
  • Мультиплексирование (mux) — несколько логических потоков в одном TCP-соединении, что размывает flow features

JSON:
// Xray: fragment в настройках исходящего соединения
"sockopt": {
  "tcpFastOpen": true,
  "tcpMptcp": true,
  "tcpNoDelay": true
}

6. Adversarial-подход: атака на саму модель​


Идея: Если известны признаки, которые использует модель, можно целенаправленно формировать трафик так, чтобы он попадал в «слепую зону» классификатора.

Пример: Исследование «Adversarial Examples for Network Traffic Classification» показывает, что добавление небольшого количества padding (менее 5% от объёма потока) может снизить точность CNN-классификатора с 95% до 60%.

Практическая реализация:
  • Сбор датасета легитимного трафика (браузер, стриминг, мессенджеры)
  • Извлечение flow features
  • Формирование VPN-трафика с flow features, максимально близкими к целевому классу
  • Проверка на локальной ML-модели (например, обученной на датасете ISCX-VPN или USTC-TFC2016)

Python:
# Проверка: обучаем локальную модель и тестируем обход
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
import pandas as pd

# Загружаем датасет с flow features
# (например, ISCX-VPN-2016 или собственный дамп)
df = pd.read_csv("flow_features.csv")
X = df.drop("label", axis=1)
y = df["label"]

# Обучаем модель
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)

# Тестируем на VPN-трафике с padding
y_pred = clf.predict(X_vpn_padded)
print(classification_report(y_vpn_true, y_pred))
# Если точность детекта VPN упала ниже 70% — обход эффективен

7. Разделение трафика и поведенческая маскировка​


Проблема: Даже идеально замаскированный протокол выдаёт себя поведенчески: один IP, постоянный поток, отсутствие разнообразия.

Решение:
  • Split tunneling — только часть трафика идёт через VPN, остальной — напрямую. Это создаёт «нормальный» фоновый трафик, на фоне которого VPN-поток менее заметен.
  • Ротация серверов — периодическая смена IP-адреса сервера, чтобы не формировать долгосрочный профиль.
  • Разделение по SNI — если используется TLS-маскировка, разные соединения должны указывать разные SNI.

8. Использование QUIC/HTTP3 как транспорта​


Проблема: Большинство ML-моделей обучены на TCP/TLS-трафике. QUIC (UDP-based) имеет другую структуру flow features.

Решение: Инкапсуляция VPN-трафика в QUIC/HTTP3. Для DPI это выглядит как HTTP/3-соединение, которое пока реже подвергается глубокой инспекции.

Где реализовано:
  • Xray поддерживает транспорт gRPC и HTTP/2, которые работают поверх TLS
  • VLESS+Reality может работать поверх HTTP/2
  • Некоторые реализации Shadowsocks поддерживают QUIC-транспорт

Сводка: что работает против AI-DPI​


  • VLESS+Reality — лучший выбор: реальный TLS-сертификат, стандартный JA3, устойчивость к зондированию
  • Fragment + padding — разрушает сигнатуры и нормализует flow features
  • Мимикрия под браузерfingerprint: chrome в Xray делает ClientHello неотличимым
  • Split tunneling — снижает поведенческую заметность
  • Ротация серверов — предотвращает формирование долгосрочного профиля
  • QUIC-транспорт — усложняет анализ для моделей, обученных на TCP

Что не работает​


  • Чистый WireGuard — фиксированные размеры пакетов и характерный паттерн handshake легко детектируются ML
  • OpenVPN — сигнатуры + статистика + keepalive-паттерн
  • Shadowsocks без плагина — высокая энтропия первых байт без TLS-обёртки
  • Простая смена порта — ML не зависит от порта, он анализирует flow features

Как проверить эффективность обхода в лаборатории​


Bash:
# 1. Собираем дамп VPN-трафика
tcpdump -i eth0 -w vpn_capture.pcap host TARGET_IP

# 2. Собираем дамп легитимного браузерного трафика
tcpdump -i eth0 -w browser_capture.pcap port 443

# 3. Извлекаем flow features (например, через nfstream)
python3 extract_features.py vpn_capture.pcap > vpn_features.csv
python3 extract_features.py browser_capture.pcap > browser_features.csv

# 4. Обучаем классификатор и проверяем, различает ли он
python3 train_and_test.py vpn_features.csv browser_features.csv

# 5. Если точность > 90% — трафик детектируется, нужен padding/мимикрия
# 6. Если точность < 70% — обход эффективен

Python:
# extract_features.py — извлечение flow features через nfstream
from nfstream import NFStreamer
import pandas as pd

def extract_features(pcap_file):
    streamer = NFStreamer(source=pcap_file)
    flows = []
    for flow in streamer:
        flows.append({
            'src_ip': flow.src_ip,
            'dst_ip': flow.dst_ip,
            'src_port': flow.src_port,
            'dst_port': flow.dst_port,
            'protocol': flow.protocol,
            'packets': flow.bidirectional_packets,
            'bytes': flow.bidirectional_bytes,
            'duration_ms': flow.duration_ms,
            'avg_pkt_size': flow.bidirectional_bytes / max(flow.bidirectional_packets, 1),
            'min_pkt_size': flow.bidirectional_min_psize,
            'max_pkt_size': flow.bidirectional_max_psize,
            'std_pkt_size': flow.bidirectional_std_psize,
            'avg_iat_ms': flow.bidirectional_mean_iat_ms,
            'std_iat_ms': flow.bidirectional_std_iat_ms,
        })
    return pd.DataFrame(flows)

Итог​


AI-based DPI — это не «волшебная кнопка», а статистический классификатор. Он работает постольку, поскольку VPN-трафик статистически отличается от легитимного. Обход сводится к устранению этих отличий: нормализация размеров, временных интервалов, TLS-фингерпринтов и поведенческих паттернов. Протоколы вроде VLESS+Reality уже решают большую часть этих задач на уровне дизайна; дополнительные меры (padding, fragment, split tunneling) закрывают оставшиеся зазоры.
 
Назад
Верх Низ