ابزار سریع و عمیق برای تست 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 ساده جواب میدهند.
فرض بر این است که موارد زیر را از قبل نصب کردهاید:
-
Python نسخه 3.9 یا بالاتر
https://www.python.org/downloads/ -
کلاینت رسمی DNSTT (dnstt-client)
https://dnstt.network/
وابستگیهای پایتون (یکبار نصب میشود):
pip install dnspython pandasاختیاری، برای خروجی Excel واقعی:
pip install openpyxlاین ابزار یک فایل متنی ساده میگیرد که در هر خط آن یک DNS Resolver نوشته شده است.
در این ریپازیتوری یک فایل نمونه هم وجود دارد:
sample_dns_list.txt
میتوانید از همین فایل استفاده کنید یا آن را ویرایش کنید و DNS سرورهای دلخواه خودتان را به آن اضافه یا کم کنید.
قوانین فایل:
- فقط IPv4
- وجود «:53» مجاز است ولی نادیده گرفته میشود (پورت همیشه 53 است)
- خطوط خالی و کامنتها (#) نادیده گرفته میشوند
اگر 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
این حالت علاوه بر FAST:
- یک تونل DNSTT واقعی برای هر Resolver اجرا میکند
- بررسی میکند endpoint محلی واقعاً قابل استفاده است
- بهترین MTU را بر اساس عملکرد واقعی انتخاب میکند
مود DEEP بیشتر مناسب کسانی است که تنظیمات سرور (مثل public key و tunnel-domain) را میشناسند.
این حالت تست بسیار دقیق end-to-end انجام میدهد.
فاز DEEP بهصورت ترتیبی اجرا میشود.
دامنهای است که DNSTT از آن برای ارسال درخواستهای DNS استفاده میکند (مثلاً t.example.com).
- اگر بدانید دقیقاً چیست و درست تنظیمش کنید، نتیجه دقیقتر میشود
- اگر ندانید، مشکلی نیست؛ FAST mode همچنان کار میکند
- بسیاری از کاربران این مقدار را از یک کانفیگ آماده کپی میکنند
اگر --tunnel-domain داده نشود، ابزار در حالت FAST-LITE اجرا میشود.
به زبان ساده، MTU یعنی بزرگترین سایز DNS که بدون خراب شدن کار میکند.
- خیلی کوچک = سرعت کم
- خیلی بزرگ = قطع شدن یا خراب شدن پاسخ
برای کاربران عادی که فقط مصرفکننده هستند، MTU موضوع مهمی نیست و لازم نیست درگیرش شوند.
ابزار بهصورت خودکار یک مقدار مناسب انتخاب میکند.
تنظیم MTU به درد کسانی میخورد که:
- سرور DNSTT راهاندازی میکنند
- یا میخواهند تنظیمات سرور را دقیقتر و بهینهتر کنند
در FAST هیچ تونلی اجرا نمیشود و همهچیز بهصورت موازی انجام میشود.
بررسیها شامل:
- پاسخدهی Resolver
- نشانههای hijack یا wildcard
- پایداری payload برای دامنهٔ تونل
- بررسی NS دامنه (بیشتر برای دیباگ)
بهصورت پیشفرض، هر دو وضعیت زیر موفق محسوب میشوند:
- NOERROR
- NXDOMAIN
اگر --tunnel-domain داده نشود، ابزار بهصورت خودکار در حالت FAST-LITE اجرا میشود.
در این حالت فقط موارد زیر بررسی میشوند:
- زنده بودن DNS Resolver
- رفتار NXDOMAIN (برای تشخیص hijack یا wildcard)
موارد زیر در FAST-LITE اجرا نمیشوند:
- تست payload برای دامنهٔ تونل
- تشخیص MTU
- بررسی Zone / NS
حالت FAST-LITE فقط برای غربال اولیه مناسب است
و سازگاری واقعی Resolver با DNSTT را تأیید نمیکند.
در 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
در حالت 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 استفاده کنید.
- هدف: اسکریپت شل برای اجرای probe روی یک chunk (تولیدشده توسط
-
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 واقعی اجرا میکند.