راهنمای تکنیکال دور زدن 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 packet4. 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)
منابع بیشتر
- 📚 Xray-core GitHub - کد منبع VLESS
- 📚 FOCI Conference - تحقیقات Anti-Censorship
- 📚 GFW Report - تحلیل فیلترینگ چین
- 📚 Censored Planet - نقشه فیلترینگ جهانی