راهنمای تکنیکال دور زدن DPI برای توسعه‌دهندگان

April 27, 2026 • 12 min read

راهنمای عمیق برای توسعه‌دهندگانی که می‌خواهند سیستم‌های Anti-Censorship بسازند یا پروتکل‌های موجود را درک کنند.

DPI چگونه شما را شناسایی می‌کند؟

تکنیک‌های DPI:

  • 1. Pattern Matching: شناسایی الگوی ثابت در بسته‌ها
  • 2. Statistical Analysis: تحلیل توزیع اندازه بسته‌ها
  • 3. Timing Analysis: تحلیل فاصله زمانی بین بسته‌ها
  • 4. Flow Fingerprinting: شناسایی الگوی کلی ترافیک
  • 5. Active Probing: ارسال بسته تست به سرور

تکنیک‌های Anti-DPI

1. Traffic Obfuscation

مخفی کردن ترافیک VPN به صورت ترافیک معمولی HTTPS:

// WebSocket Transport (به نظر می‌رسد HTTPS)
{
  "transport": "ws",
  "wsSettings": {
    "path": "/api/v3/news",  // مثل یک API endpoint
    "headers": {
      "Host": "cdn.cloudflare.com"  // Fake domain
    }
  }
}

2. TLS Fingerprint Randomization

تغییر fingerprint TLS برای جلوگیری از شناسایی:

{
  "streamSettings": {
    "security": "tls",
    "tlsSettings": {
      "serverName": "google.com",
      "fingerprint": "chrome",  // یا firefox, safari, edge
      "alpn": ["h2", "http/1.1"]
    }
  }
}

3. Packet Padding

تغییر اندازه بسته‌ها برای از بین بردن الگوی آماری:

import random

def add_padding(packet, target_size):
    current_size = len(packet)
    if current_size < target_size:
        padding = random.randbytes(target_size - current_size)
        return packet + padding
    return packet

4. Timing Randomization

تغییر تایمینگ ارسال بسته‌ها:

import time
import random

def send_with_jitter(packets):
    for packet in packets:
        send(packet)
        # تاخیر تصادفی بین 10-50ms
        time.sleep(random.uniform(0.01, 0.05))

پروتکل VLESS - Architecture

ساختار بسته VLESS:

[Version: 1 byte]
[UUID: 16 bytes]
[Additional Info Length: 1 byte]
[Additional Info: variable]
[Command: 1 byte]
[Port: 2 bytes]
[Address Type: 1 byte]
[Address: variable]
[Payload: variable]

چرا VLESS سخت قابل شناسایی است؟

  • • Headerless: بدون header ثابت
  • • UUID: برای هر کاربر منحصر به فرد
  • • TLS Wrapping: به نظر می‌رسد HTTPS معمولی
  • • No Timestamp: عدم استفاده از timestamp قابل پیش‌بینی

QUIC Protocol Advantages

چرا QUIC بهتر است؟

  • 1. UDP-based: TCP fingerprinting کار نمی‌کند
  • 2. 0-RTT: اتصال سریع‌تر, الگوی handshake متفاوت
  • 3. Connection Migration: تغییر IP بدون قطع اتصال
  • 4. Encrypted Everything: حتی packet numbers رمزگذاری شده
// VLESS + QUIC Config
{
  "protocol": "vless",
  "settings": {
    "vnext": [{
      "address": "server.com",
      "port": 443,
      "users": [{"id": "UUID", "encryption": "none"}]
    }]
  },
  "streamSettings": {
    "network": "quic",
    "security": "tls",
    "quicSettings": {
      "security": "aes-128-gcm",
      "key": "random_key"
    }
  }
}

پیاده‌سازی Custom Protocol

اگر می‌خواهید پروتکل خودتان را بسازید:

Checklist:

  • ✅ No Fixed Pattern: هیچ byte ثابتی در header نباشد
  • ✅ Random Padding: پدینگ تصادفی به بسته‌ها
  • ✅ Timing Jitter: تاخیر تصادفی بین بسته‌ها
  • ✅ Mimicking: شبیه به پروتکل‌های معروف (HTTPS, HTTP/2)
  • ✅ Forward Secrecy: کلیدهای Ephemeral
  • ✅ Active Probing Resistance: پاسخ ندادن به probe بسته‌ها

ابزارهای توسعه و تست

Testing Tools

  • • Wireshark: تحلیل ترافیک
  • • nDPI: DPI شبیه‌ساز
  • • GFWList: تست فیلترینگ چین
  • • Censored Planet: دیتاست فیلترینگ جهانی

Development Libraries

  • • Xray-core: V2Ray fork با بهبود
  • • shadowsocks-rust: پیاده‌سازی Rust
  • • go-shadowsocks2: پیاده‌سازی Go
  • • quinn: QUIC implementation (Rust)

منابع بیشتر

ساخت ابزارهای Anti-Censorship

به جنگ با DPI با دانش تکنیکال

Xray-core GitHub
Support 24/7