Skip to content

Latest commit

 

History

History
252 lines (177 loc) · 12.6 KB

File metadata and controls

252 lines (177 loc) · 12.6 KB

Parallel dnstt resolver probe

🌐 زبان‌ها: English | فارسی

ابزار سریع و عمیق برای تست DNS Resolverها با هدف استفاده در DNSTT
(یک اسکریپت تکی، یک فایل خروجی)

این ریپازیتوری شامل یک ابزار تک‌فایلی پایتون است که برای بررسی DNS Resolverها در سناریوهای تونل‌سازی DNSTT طراحی شده است.
در هر اجرا، ابزار دقیقاً یک فایل خروجی تولید می‌کند (به‌صورت پیش‌فرض CSV و در صورت نیاز XLSX).

این ابزار در دو فاز اجرا می‌شود:

  • حالت FAST (موازی): تست‌های DNS-only برای فیلتر و رتبه‌بندی سریع Resolverها و پیدا کردن سایزهای پایدار EDNS / payload
  • حالت DEEP (ترتیبی): اجرای واقعی dnstt-client برای هر Resolver (یکی‌یکی)، بررسی اینکه تونل واقعاً کار می‌کند و انتخاب بهترین MTU

هدف این پروژه پیدا کردن Resolverهایی است که در عمل برای DNSTT جواب می‌دهند؛
مشابه Resolverهایی که در ابزارهای واقعی مثل HTTP Injector استفاده می‌شوند،
نه صرفاً Resolverهایی که به یک DNS ساده جواب می‌دهند.


پیش‌نیازها

فرض بر این است که موارد زیر را از قبل نصب کرده‌اید:

وابستگی‌های پایتون (یک‌بار نصب می‌شود):

pip install dnspython pandas

اختیاری، برای خروجی Excel واقعی:

pip install openpyxl

ورودی

لیست DNS Resolverها

این ابزار یک فایل متنی ساده می‌گیرد که در هر خط آن یک DNS Resolver نوشته شده است.

در این ریپازیتوری یک فایل نمونه هم وجود دارد:

sample_dns_list.txt

می‌توانید از همین فایل استفاده کنید یا آن را ویرایش کنید و DNS سرورهای دلخواه خودتان را به آن اضافه یا کم کنید.

قوانین فایل:

  • فقط IPv4
  • وجود «:53» مجاز است ولی نادیده گرفته می‌شود (پورت همیشه 53 است)
  • خطوط خالی و کامنت‌ها (#) نادیده گرفته می‌شوند

Quickstart

اگر Python و dnstt-client را نصب کرده‌اید، همین بخش برای شروع کافی است.

فقط FAST (فیلتر سریع):

python3 dnstt_resolver_probe.py --dns-list sample_dns_list.txt --tunnel-domain t.example.com --out results_fast.csv

این دستور :

  • ریزالورهایی که زنده هستند را پیدا میکند
  • ریزالورهایی که مناسب کوئری‌های DNSTT نیستند را شناسایی میکند
  • سایزهای payloadی که احتمالاً کار می‌کنند را مشخص می‌کند

می‌توانید فایل sample_dns_list.txt را آزادانه ویرایش کنید و DNSهای بیشتری به آن اضافه کنید.

نکته:
اگر پارامتر --tunnel-domain داده نشود، ابزار به‌صورت خودکار در حالت FAST-LITE اجرا می‌شود
(فقط بررسی زنده بودن DNS و رفتار NXDOMAIN).

اگر public key سرور، تنظیمات دقیق DNSTT یا جزئیات tunnel-domain را نمی‌دانید، FAST mode بهترین انتخاب است.
این حالت با حداقل اطلاعات هم نتیجهٔ کاربردی می‌دهد.

حالت FAST + DEEP (مناسب کاربران فنی‌تر):

python3 dnstt_resolver_probe.py --dns-list sample_dns_list.txt --tunnel-domain t.example.com --run-deep --dnstt-client-path /path/to/dnstt-client --dnstt-pubkey-file /path/to/server.pub --dnstt-mode ssh
image

این حالت علاوه بر FAST:

  • یک تونل DNSTT واقعی برای هر Resolver اجرا می‌کند
  • بررسی می‌کند endpoint محلی واقعاً قابل استفاده است
  • بهترین MTU را بر اساس عملکرد واقعی انتخاب می‌کند

مود DEEP بیشتر مناسب کسانی است که تنظیمات سرور (مثل public key و tunnel-domain) را می‌شناسند.
این حالت تست بسیار دقیق end-to-end انجام می‌دهد.

فاز DEEP به‌صورت ترتیبی اجرا می‌شود.


مفاهیم مهم (خلاصه)

tunnel-domain:

دامنه‌ای است که DNSTT از آن برای ارسال درخواست‌های DNS استفاده می‌کند (مثلاً t.example.com).

  • اگر بدانید دقیقاً چیست و درست تنظیمش کنید، نتیجه دقیق‌تر می‌شود
  • اگر ندانید، مشکلی نیست؛ FAST mode همچنان کار می‌کند
  • بسیاری از کاربران این مقدار را از یک کانفیگ آماده کپی می‌کنند

اگر --tunnel-domain داده نشود، ابزار در حالت FAST-LITE اجرا می‌شود.

MTU (سایز payload):

به زبان ساده، MTU یعنی بزرگ‌ترین سایز DNS که بدون خراب شدن کار می‌کند.

  • خیلی کوچک = سرعت کم
  • خیلی بزرگ = قطع شدن یا خراب شدن پاسخ

برای کاربران عادی که فقط مصرف‌کننده هستند، MTU موضوع مهمی نیست و لازم نیست درگیرش شوند.
ابزار به‌صورت خودکار یک مقدار مناسب انتخاب می‌کند.

تنظیم MTU به درد کسانی می‌خورد که:

  • سرور DNSTT راه‌اندازی می‌کنند
  • یا می‌خواهند تنظیمات سرور را دقیق‌تر و بهینه‌تر کنند

FAST Mode (فقط DNS)

در FAST هیچ تونلی اجرا نمی‌شود و همه‌چیز به‌صورت موازی انجام می‌شود.

بررسی‌ها شامل:

  • پاسخ‌دهی Resolver
  • نشانه‌های hijack یا wildcard
  • پایداری payload برای دامنهٔ تونل
  • بررسی NS دامنه (بیشتر برای دیباگ)

به‌صورت پیش‌فرض، هر دو وضعیت زیر موفق محسوب می‌شوند:

  • NOERROR
  • NXDOMAIN

FAST-LITE mode (بدون tunnel-domain)

اگر --tunnel-domain داده نشود، ابزار به‌صورت خودکار در حالت FAST-LITE اجرا می‌شود.

در این حالت فقط موارد زیر بررسی می‌شوند:

  • زنده بودن DNS Resolver
  • رفتار NXDOMAIN (برای تشخیص hijack یا wildcard)

موارد زیر در FAST-LITE اجرا نمی‌شوند:

  • تست payload برای دامنهٔ تونل
  • تشخیص MTU
  • بررسی Zone / NS

حالت FAST-LITE فقط برای غربال اولیه مناسب است
و سازگاری واقعی Resolver با DNSTT را تأیید نمی‌کند.


DEEP Mode (تونل واقعی)

در DEEP برای هر Resolver یک تونل واقعی DNSTT اجرا می‌شود.

Deep-1:

  • در حالت SSH منتظر banner واقعی SSH می‌ماند
  • در حالت SOCKS، handshake و اتصال TCP بررسی می‌شود

Deep-2:

  • تست دوبارهٔ سایزهای payload
  • انتخاب بهترین MTU بر اساس نرخ موفقیت، timeout، TCP fallback و latency

اگر Deep-1 شکست بخورد، Deep-2 اجرا نمی‌شود.

برای اجرای DEEP، وجود --tunnel-domain الزامی است و
این فاز در حالت FAST-LITE قابل اجرا نیست.


لاگ‌ها

لاگ‌های dnstt-client برای هر Resolver در فایل جدا ذخیره می‌شوند:

results/dnstt_<resolver>_<port>.log

لاگ‌ها در ترمینال چاپ نمی‌شوند.
در عوض، مسیر لاگ و بخش انتهایی آن در فایل خروجی ذخیره می‌شود تا بتوانید بررسی کنید.


فایل خروجی

در هر اجرا دقیقاً یک فایل خروجی دارید:

  • CSV به‌صورت پیش‌فرض
  • XLSX در صورت استفاده از گزینه --xlsx
image

در حالت FAST-LITE، مقدار ستون recommendation برابر با UNKNOWN خواهد بود،
به این معنی که سازگاری DNSTT به‌صورت کامل بررسی نشده است.


ابزارهای کمکی اضافی موجود در این ریپازیتوری

این ریپازیتوری همچنین چند اسکریپت و باینری کمکی برای پردازش دسته‌ای و کاربران ویندوز دارد. این فایل‌ها اخیراً اضافه شده‌اند (یا به صورت untracked در git ظاهر می‌شوند). در ادامه توضیحات کوتاهی و مثال‌های استفاده آمده است — توضیحات از روی نام فایل‌ها استنتاج شده‌اند؛ در صورت تفاوت، آن‌ها را به‌روزرسانی کنید.

  • concate_csv.py

    • هدف: اسکریپتی برای ترکیب چند فایل CSV خروجی در یک فایل CSV واحد برای تحلیل آسان‌تر.
    • مثال استفاده (فرض می‌شود Python 3 نصب است):
      python3 concate_csv.py results/*.csv -o combined_results.csv
    • نکته: اگر فایل‌های CSV شما هدر دارند، این اسکریپت باید هدرها را مدیریت کرده و تنها یک سطر هدر نگه دارد. در غیر این صورت، اسکریپت را ویرایش کنید یا از یک pipeline ساده (awk/head) استفاده کنید.
  • split_txt.py

    • هدف: تقسیم یک لیست بزرگ رزولور (فایل متنی) به فایل‌های کوچک‌تر تا بتوانید دسته‌ها را به‌صورت موازی یا در چند ماشین پردازش کنید.
    • مثال استفاده:
      python3 split_txt.py sample_dns_list.txt --chunk-size 200 --out-dir chunks
    • نتیجه: فایل‌هایی مانند chunks/part_001.txt, chunks/part_002.txt, ... ایجاد می‌شود.
  • process_dns_chunk.sh

    • هدف: اسکریپت شل برای اجرای probe روی یک chunk (تولیدشده توسط split_txt.py) و ذخیره خروجی در فایل یا دایرکتوری مشخص. ممکن است فراخوانی dnstt_resolver_probe.py را بسته‌بندی و لاگ‌ها را مدیریت کند.
    • مثال استفاده:
      bash process_dns_chunk.sh chunks/part_001.txt results/results_part_001.csv
      <!-- or just: -->
      ./process_dns_chunk.sh
    • حتما قبل از استفاده از این فایل، فراموش نکنید آدرس Tunnel خودتون رو وارد کنید. مثال: t.dnstt.com
    • نکته: این اسکریپت یک شل اسکریپت است و به شل سازگار با Bash نیاز دارد. در ویندوز از WSL یا Git Bash استفاده کنید.
  • dnstt-client-windows-amd64.exe

    • هدف: نسخه ویندوزی باینری dnstt-client تا امکان اجرای حالت DEEP روی میزبان‌های ویندوز فراهم شود.
    • استفاده: هنگام اجرای DEEP در ویندوز، مسیر این فایل را به --dnstt-client-path بدهید:
      python3 dnstt_resolver_probe.py --dns-list sample_dns_list.txt --run-deep --dnstt-client-path ./dnstt-client-windows-amd64.exe --dnstt-pubkey-file server.pub --dnstt-mode ssh
    • نکتهٔ امنیتی: با باینری‌های دانلودشده یا درج‌شده در مخزن با احتیاط رفتار کنید. اگر این باینری را خودتان نساخته‌اید، منبع آن را قبل از اجرا بررسی کنید.

ایمنی و مجوز استفاده

از این ابزار فقط روی DNS Resolverهایی استفاده کنید که مالک آن‌ها هستید
یا اجازهٔ صریح برای تست آن‌ها دارید.

FAST فقط DNS query ارسال می‌کند.
DEEP یک تونل DNSTT واقعی اجرا می‌کند.