آموزش قدم‌به‌قدم DNS Benchmark Pro

سریع‌ترین DNS را با عدد و نمودار پیدا کن — از نصب تا خواندن نتیجه، در گوشی و کامپیوتر

اندروید و آیفون ویندوز لینوکس مک UDP / DoH / DoT پریست ایران
⭐ ستاره به پروژه 📢 کانال تلگرام

بخش اول: استفاده با گوشیبدون روت — از ساده به سخت مرتب شده

اندروید: ترموکس (Termux) پیشنهاد ما

ترموکس یک ترمینال واقعی لینوکس داخل اندروید است؛ یعنی همان نسخه کامپیوتر را روی گوشی اجرا می‌کنی.

  1. نصب ترموکس: از F-Droid یا صفحه GitHub ترموکس نصب کن (نسخه گوگل‌پلی قدیمی و خراب است).
  2. نصب پایتون و دریافت پروژه:
    termux
    pkg update && pkg install -y python git
    git clone https://github.com/Alvandcode/dns-benchmark-pro.git
    cd dns-benchmark-pro
    pip install requests matplotlib
  3. اولین تست (۳۰ ثانیه‌ای):
    termux
    python main.py --queries 5 --seed 42
    اگر جدول امتیازها را دیدی، همه‌چیز درست نصب شده.
  4. تست مخصوص ایران:
    termux
    python main.py --preset ir --queries 10 --seed 42
  5. اعمال نتیجه: هر کدام امتیاز بالاتر و ± کوچک‌تر داشت، همان DNS توست؛ آن را در تنظیمات وای‌فای گوشی (DNS خصوصی / Private DNS) وارد کن.
نصب matplotlibاگر نصب آن طول کشید یا خطا داد اشکالی ندارد — ابزار بدون آن هم کامل کار می‌کند، فقط نمودار ساخته نمی‌شود.

آیفون (iOS) توصیه نمی‌شود

اپل اجازه ترمینال واقعی مثل ترموکس را نمی‌دهد. دو راه داری:

  • راه ساده: با کامپیوتر تست بگیر و فقط نتیجه (آی‌پی برنده) را روی گوشی اعمال کن.
  • راه فنی: با برنامه a-Shell فقط حالت DoH جواب می‌دهد:
    a-shell
    python main.py --queries 5 --protocol doh --seed 42

بخش دوم: ویندوز (۱۰ و ۱۱)حدود ۵ دقیقه تا اولین جدول امتیاز

  1. نصب پایتون: از python.org نسخه 3.9 یا جدیدتر را دانلود کن و موقع نصب تیک Add python.exe to PATH را حتماً بزن.
  2. دریافت و نصب پروژه (در CMD یا PowerShell):
    cmd
    git clone https://github.com/Alvandcode/dns-benchmark-pro.git
    cd dns-benchmark-pro
    pip install -r requirements.txt
    اگر python شناخته نشد از py استفاده کن: py main.py --queries 5
  3. تست سریع:
    cmd
    python main.py --queries 5 --seed 42
    BEST:
    {'recommended': '1.1.1.1', 'score': 99.5, ...}
  4. تست کامل مخصوص ایران:
    cmd
    python main.py --preset ir --queries 20 --seed 42
    فایل results\report.html را در مرورگر باز کن تا جدول و نمودار را ببینی.
اگر همه TIMEOUT شدندفایروال یا آنتی‌ویروس پورت UDP/53 را بسته است؛ اول با --protocol doh امتحان کن.

بخش سوم: لینوکس (اوبونتو / دبیان)سریع‌ترین مسیر؛ همه‌چیز با مدیر بسته نصب می‌شود

  1. نصب پیش‌نیازها:
    bash
    sudo apt update && sudo apt install -y python3 python3-pip git
    git clone https://github.com/Alvandcode/dns-benchmark-pro.git
    cd dns-benchmark-pro
    pip install -r requirements.txt
    اگر pip پیدا نشد از pip3 استفاده کن.
  2. اجرا:
    bash
    python3 main.py --preset ir --queries 20 --seed 42
    python3 main.py --preset ir --queries 20 --runs 3 --seed 42
چرا لینوکس بهترین است؟نصب، اجرای خودکار با cron و ساخت خروجی‌ها همه بدون دردسر اضافه انجام می‌شود.

بخش چهارم: مک (macOS)با Homebrew در سه قدم

  1. نصب Homebrew (اگر نداری، دستورش در سایت brew.sh است) و بعد:
    bash
    brew install python git
    git clone https://github.com/Alvandcode/dns-benchmark-pro.git
    cd dns-benchmark-pro
    pip3 install -r requirements.txt
  2. اجرا:
    bash
    python3 main.py --preset ir --queries 20 --seed 42

بخش پنجم: پریست ایران، هایجک و مقایسه مطمئنقلب تپنده ابزار برای کاربر ایرانی

تست داخلی در برابر خارجی

پریست ایران ریزالورهای شکان، الکترو و 403 را کنار عمومی‌ها می‌گذارد و دامنه‌ها را به داخلی/خارجی تقسیم می‌کند:

bash
python main.py --preset ir --domain-group internal --queries 20 --seed 42
python main.py --preset ir --domain-group external --queries 20 --seed 42
آی‌پی‌های 10.202.10.xمخصوص 403 فقط از داخل ایران جواب می‌دهند؛ بیرون ایران TIMEOUT می‌گیری که طبیعی است.

ستون hijack یعنی چه؟

ابزار برای هر سرور یک پروب به دامنه .invalid می‌فرستد که طبق استاندارد هیچ‌وقت وجود ندارد؛ جواب سالم حتماً باید NXDOMAIN باشد:

✅ cleanمسیر سالم است — به عددها اعتماد کن.
🚨 HIJACKEDمسیر UDP دستکاری شده — عددها یعنی «تأخیر پروکسی»؛ با --protocol doh راستی‌آزمایی کن.

مقایسه مطمئن با فاصله اطمینان

یک ران نویز دارد. سه بار تکرار کن و به ± نگاه کن (±0.11 پایدار، ±10 ناپایدار):

bash
python main.py --preset ir --queries 20 --runs 3 --run-delay 2 --seed 42
1.  1.1.1.1  score=99.75±0.11   grade=A+
2.  8.8.8.8  score=94.47±10.44  grade=A

بخش ششم: مانیتورینگ دائمیبهترین DNS امروز، شاید بهترین فردا نباشد

  1. اجرای دوره‌ای (هر ۵ دقیقه، تا Ctrl+C؛ تاریخچه در results/history.db می‌ماند):
    bash
    python main.py --preset ir --queries 10 --watch 300 --seed 42
  2. تعداد مشخص (عالی برای cron و Task Scheduler):
    bash
    python main.py --dns 1.1.1.1 8.8.8.8 --watch 60 --watch-count 6
  3. دیدن تاریخچه و روند:
    bash
    python main.py --history 10
    python main.py --trend
    python main.py --trend 1.1.1.1
    دستور آخر نمودار results/trend.png را هم می‌سازد.

بخش هفتم: عیب‌یابی سریع۹۰٪ خطاها یکی از این‌هاست

نشانهعلتراه‌حل
همه TIMEOUT شدندفایروال/آنتی‌ویروس یا فیلترینگ UDP/53با --protocol doh امتحان کن
ستون hijack قرمز استپروکسی شفاف روی مسیر UDPعدد UDP را قبول نکن؛ مبنا را DoH بگذار
عدد خیلی خوب ولی مشکوک (مثلاً 0.6ms)کش محلی یا پروکسی شفافبا DoH و --runs 3 راستی‌آزمایی کن
pip شناخته نشدPATH یا نصب ناقص پایتونلینوکس/مک: pip3 — ویندوز: py -m pip
matplotlib نصب نشدحجم بالا یا مشکل بیلد روی گوشیردش کن؛ ابزار بدون نمودار کامل کار می‌کند
کد خروج 2همه سرورها ۱۰۰٪ lossاتصال اینترنت و VPN را چک کن

یادآوری حریم خصوصی

کوئری‌ها به سرور ثالث ارسال می‌شود؛ دامنه حساس بنچمارک نکن. برای نتیجه قابل تکرار همیشه --seed بده.