Skip to content

Commit d60ccce

Browse files
committed
v0.2 — CIDR scanning, configurable EDNS, robust offline mode
- Add --cidr flag for direct CIDR range scanning (CLI + TUI) - Add --edns-size flag for configurable EDNS0 buffer size - Add Custom CIDR option to TUI input screen - Add EDNS Size field to TUI config screen - Zero-config offline mode: auto-loads 7,854 bundled resolvers - Platform-aware binary finder (dnstt-client, slipstream-client) - Remove preflight e2e and NS delegation checks (don't work in Iran) - Auto-generate _ips.txt alongside JSON results - Fetch auto-fallback to bundled resolvers when online fails - Worker buffer capped at workers*4 to prevent OOM - Cap CIDR expansion at 1M IPs with clear error message - Validate --edns-size <= 65535 - Update README and GUIDE.md (EN + FA)
1 parent 35b1731 commit d60ccce

16 files changed

Lines changed: 433 additions & 451 deletions

File tree

GUIDE.md

Lines changed: 69 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ findns tui
1212

1313
<div dir="rtl">
1414

15-
یا با خط فرمان (۳ دستور):
15+
یا با خط فرمان (بدون نیاز به هیچ فایل ورودی):
1616

1717
</div>
1818

1919
```bash
20-
findns fetch -o resolvers.txt --local # 1. دانلود لیست ریزالورها
21-
findns scan -i resolvers.txt -o results.json --domain t.example.com # 2. اسکن
22-
# 3. اولین IP از لیست passed در results.json = بهترین ریزالور شما
20+
findns scan --domain t.example.com # همین! resolverها خودکار بارگذاری می‌شوند
21+
# نتایج در results.json + results_ips.txt ذخیره می‌شود
22+
# اولین IP از لیست passed = بهترین ریزالور شما
2323
```
2424

2525
<div dir="rtl">
@@ -96,13 +96,12 @@ findns همه این‌ها را به صورت خودکار تست می‌کند
9696
# دانلود
9797
curl -LO https://github.com/SamNet-dev/findns/releases/latest/download/dnstt-client-linux
9898
chmod +x dnstt-client-linux
99-
mv dnstt-client-linux dnstt-client
10099

101-
# گذاشتن کنار findns (ساده‌ترین روش):
102-
mv dnstt-client /path/to/findns/
100+
# گذاشتن کنار findns (ساده‌ترین روش — نیازی به تغییر نام نیست):
101+
mv dnstt-client-linux /path/to/findns/
103102

104103
# یا گذاشتن در PATH:
105-
sudo mv dnstt-client /usr/local/bin/
104+
sudo mv dnstt-client-linux /usr/local/bin/
106105
```
107106

108107
<div dir="rtl">
@@ -174,6 +173,7 @@ TUI شما را قدم به قدم راهنمایی می‌کند:
174173
| CIDR scan — full | ~10.8M آی‌پی — کل فضای آی‌پی ایران (بسیار کند) |
175174
| Combined — light | ریزالورها + CIDR لایت (~27K آی‌پی) |
176175
| Combined — medium | ریزالورها + CIDR مدیوم (~104K آی‌پی) |
176+
| Custom CIDR | وارد کردن یک رنج CIDR دلخواه (مثلاً `5.52.0.0/16`) — تمام آی‌پی‌ها اسکن می‌شوند |
177177
| Custom file | بارگذاری فایل دلخواه (متنی یا JSON) |
178178

179179
### صفحه ۳: تنظیمات اسکن
@@ -193,6 +193,7 @@ TUI شما را قدم به قدم راهنمایی می‌کند:
193193
- **Skip Ping** — رد کردن تست ping (مفید اگر شبکه شما ICMP را بلاک می‌کند)
194194
- **Skip NXDOMAIN** — رد کردن تست تشخیص هایجک DNS
195195
- **EDNS Check** — تست پشتیبانی EDNS0 (مهم برای سرعت تانل)
196+
- **EDNS Size** — سایز بافر EDNS0 به بایت (پیش‌فرض: 1232). بزرگتر = سرعت بیشتر تانل. اگر فرگمنتیشن دارید، کمترش کنید (مثلاً 900)
196197

197198
**بخش E2E (اختیاری):**
198199
- **E2E Testing** — به صورت پیش‌فرض خاموش است. وقتی روشن کنید:
@@ -335,7 +336,9 @@ go build -o findns.exe ./cmd
335336

336337
## 3. دریافت لیست Resolverها (fetch)
337338

338-
قبل از اسکن، باید لیست resolver داشته باشید. دستور fetch به صورت خودکار از منابع عمومی دانلود می‌کند.
339+
دستور fetch به صورت خودکار از منابع عمومی دانلود می‌کند. اگر دانلود شکست بخورد (مثلاً GitHub فیلتر باشد)، به صورت خودکار از resolverهای داخلی استفاده می‌کند.
340+
341+
> **نکته:** اگر فقط می‌خواهید اسکن کنید، دیگر نیازی به `fetch` نیست! `findns scan --domain t.example.com` بدون `-i` خودکار resolverهای ایرانی داخلی را بارگذاری می‌کند.
339342
340343
### دانلود resolverهای UDP جهانی
341344

@@ -717,19 +720,23 @@ findns scan -i resolvers.txt -o results.json
717720

718721
این حالت بررسی می‌کند resolver زنده، فعال و بدون هایجک است. (برای رد کردن nxdomain از `--skip-nxdomain` استفاده کنید)
719722

723+
> **نکته:** `-i` و `-o` اختیاری هستند. بدون `-i` از 7,800+ resolver ایرانی داخلی استفاده می‌شود. بدون `-o` نتایج در `results.json` ذخیره می‌شود. فایل `results_ips.txt` هم خودکار ساخته می‌شود.
724+
720725
### اسکن کامل با دامنه تانل (پیشنهادی)
721726

722727
</div>
723728

724729
```bash
725-
findns scan -i resolvers.txt -o results.json --domain t.example.com
730+
findns scan --domain t.example.com
726731
```
727732

728733
<div dir="rtl">
729734

730-
مراحل: `ping -> resolve -> nxdomain -> resolve/tunnel`
735+
مراحل: `ping -> nxdomain -> resolve/tunnel`
736+
737+
> **نکته مهم:** وقتی `--domain` تنظیم شود، مرحله `resolve` ساده (رکورد A برای google.com) رد می‌شود — دامنه‌های تانل رکورد A ندارند. findns مستقیم به `resolve/tunnel` می‌رود.
731738
732-
> **نکته:** برای اضافه کردن تست EDNS payload size از فلگ `--edns` استفاده کنید. با این فلگ: `ping -> resolve -> nxdomain -> edns -> resolve/tunnel`
739+
> برای اضافه کردن تست EDNS payload size از فلگ `--edns` استفاده کنید. با این فلگ: `ping -> nxdomain -> edns -> resolve/tunnel`
733740
734741
### توضیح هر مرحله
735742

@@ -742,8 +749,9 @@ findns scan -i resolvers.txt -o results.json --domain t.example.com
742749
**3. nxdomain** — آیا resolver جواب جعلی می‌دهد (hijack)؟ یک دامنه تصادفی غیرموجود (مثل `nxd-abc123.invalid`) را کوئری می‌کند. resolver سالم باید NXDOMAIN برگرداند. resolver هایجک‌شده جواب NOERROR با آی‌پی جعلی برمی‌گرداند.
743750
- متریک: `nxdomain_ok` (تعداد جواب‌های صحیح), `hijack` (0=سالم)
744751

745-
**4. edns** — resolver چه سایز payload DNS را پشتیبانی می‌کند؟ سایزهای 512, 900 و 1232 بایت تست می‌شود. هرچه بزرگ‌تر = تانل سریع‌تر.
746-
- متریک: `edns_max` (بزرگ‌ترین سایز: 512, 900, یا 1232)
752+
**4. edns** — resolver چه سایز payload DNS را پشتیبانی می‌کند؟ سایزهای مختلف تا مقدار `--edns-size` (پیش‌فرض 1232) تست می‌شود. هرچه بزرگ‌تر = تانل سریع‌تر.
753+
- متریک: `edns_max` (بزرگ‌ترین سایز payload کارآمد به بایت)
754+
- با `--edns-size 4096` سایزهای بزرگتر هم تست می‌شوند
747755

748756
**5. resolve/tunnel** — آیا resolver دامنه تانل شما را می‌بیند؟ NS record و glue A record دامنه تانل را بررسی می‌کند. اگر resolver نتواند دامنه تانل را resolve کند، تانل کار نمی‌کند.
749757
- متریک: `resolve_ms` (میلی‌ثانیه)
@@ -759,9 +767,9 @@ findns scan -i resolvers.txt -o results.json \
759767

760768
<div dir="rtl">
761769

762-
مراحل: `ping -> resolve -> nxdomain -> resolve/tunnel -> e2e/dnstt`
770+
مراحل: `ping -> nxdomain -> resolve/tunnel -> e2e/dnstt`
763771

764-
> با `--edns`: `ping -> resolve -> nxdomain -> edns -> resolve/tunnel -> e2e/dnstt`
772+
> با `--edns`: `ping -> nxdomain -> edns -> resolve/tunnel -> e2e/dnstt`
765773
766774
نیازمند: `dnstt-client` و `curl` در PATH. این مرحله واقعاً dnstt-client را اجرا می‌کند، یک تانل SOCKS می‌سازد و با curl از طریق آن تانل یک صفحه وب را باز می‌کند.
767775
- متریک: `e2e_ms` (کل زمان از شروع تا اتصال موفق)
@@ -789,7 +797,9 @@ findns scan -i doh-resolvers.txt -o results.json --domain t.example.com --doh
789797

790798
<div dir="rtl">
791799

792-
مراحل: `doh/resolve -> doh/resolve/tunnel`
800+
مراحل: `doh/resolve/tunnel`
801+
802+
> وقتی `--domain` تنظیم شود، مرحله `doh/resolve` ساده رد می‌شود.
793803
794804
اسکن DoH با تست e2e:
795805

@@ -802,7 +812,7 @@ findns scan -i doh-resolvers.txt -o results.json \
802812

803813
<div dir="rtl">
804814

805-
مراحل: `doh/resolve -> doh/resolve/tunnel -> doh/e2e`
815+
مراحل: `doh/resolve/tunnel -> doh/e2e`
806816

807817
### فلگ‌های دستور scan
808818

@@ -816,8 +826,11 @@ findns scan -i doh-resolvers.txt -o results.json \
816826
| `--doh` | حالت DoH به جای UDP | `false` |
817827
| `--skip-ping` | رد کردن مرحله ping (مفید اگر ICMP مسدود باشد) | `false` |
818828
| `--edns` | فعال‌سازی تست سایز EDNS payload (اختیاری) | `false` |
829+
| `--edns-size` | سایز بافر EDNS0 به بایت — بزرگتر = سرعت بیشتر، کمتر کنید اگر فرگمنتیشن دارید | `1232` |
830+
| `--cidr` | اسکن مستقیم رنج CIDR بدون فایل ورودی (مثلاً `--cidr 5.52.0.0/16`) ||
819831
| `--skip-nxdomain` | رد کردن بررسی هایجک | `false` |
820832
| `--top` | تعداد نتایج برتر در خروجی ترمینال | `10` |
833+
| `--output-ips` | خروجی لیست آی‌پی ساده کنار فایل JSON | خودکار |
821834

822835
---
823836

@@ -878,6 +891,9 @@ findns nxdomain -i resolvers.txt -o nxd-results.json
878891

879892
```bash
880893
findns edns -i resolvers.txt -o edns-results.json --domain t.example.com
894+
895+
# با سایز بافر بزرگتر
896+
findns edns -i resolvers.txt -o edns-results.json --domain t.example.com --edns-size 4096
881897
```
882898

883899
<div dir="rtl">
@@ -1210,7 +1226,7 @@ kill %1
12101226

12111227
<div dir="rtl">
12121228

1213-
**۷. پورت‌ها در تداخل:**
1229+
**۸. پورت‌ها در تداخل:**
12141230
- findns از پورت‌های 30000 به بالا برای تست استفاده می‌کند
12151231
- اگر سرویس دیگری این پورت‌ها را گرفته، تست فیل می‌شود
12161232
- با `--port-base` پورت شروع را تغییر دهید (فقط در chain)
@@ -1309,8 +1325,9 @@ https://dns.quad9.net/dns-query
13091325

13101326
| فلگ | مخفف | توضیح | پیش‌فرض |
13111327
|-----|------|-------|---------|
1312-
| `--input` | `-i` | فایل ورودی (متنی یا JSON) | الزامی |
1313-
| `--output` | `-o` | فایل خروجی JSON | الزامی |
1328+
| `--input` | `-i` | فایل ورودی (متنی یا JSON). اگر داده نشود، از 7,800+ resolver ایرانی داخلی استفاده می‌شود | لیست داخلی |
1329+
| `--output` | `-o` | فایل خروجی JSON | `results.json` |
1330+
| `--output-ips` || خروجی لیست آی‌پی ساده (هر خط یک آی‌پی) کنار JSON | خودکار |
13141331
| `--timeout` | `-t` | تایم‌اوت هر تلاش (ثانیه) | `3` |
13151332
| `--count` | `-c` | تعداد تلاش برای هر IP | `3` |
13161333
| `--workers` || تعداد workerهای موازی | `50` |
@@ -1420,6 +1437,8 @@ findns resolve -i step1.json -o step2.json --domain google.com
14201437
- **passed:** لیست resolverهای موفق با متریک‌ها (مرتب شده بر اساس عملکرد)
14211438
- **failed:** لیست resolverهای ناموفق
14221439

1440+
**فایل `_ips.txt`:** کنار فایل JSON، یک فایل `_ips.txt` هم خودکار ساخته می‌شود (مثلاً `results_ips.txt`). این فایل فقط شامل آی‌پی‌های موفق است (هر خط یک آی‌پی) — برای استفاده مستقیم در اسکریپت‌ها و ابزارهای دیگر.
1441+
14231442
---
14241443

14251444
## 9. سناریوهای عملی
@@ -1536,7 +1555,7 @@ findns nxdomain -i resolved.json -o clean.json
15361555

15371556
<div dir="rtl">
15381557

1539-
**اسکن مستقیم:**
1558+
**روش ۱: با فایل CIDR:**
15401559

15411560
</div>
15421561

@@ -1546,6 +1565,22 @@ findns scan -i iran-ipv4.cidrs -o results.json --domain t.mysite.com
15461565

15471566
<div dir="rtl">
15481567

1568+
**روش ۲: مستقیم با فلگ `--cidr` (بدون فایل):**
1569+
1570+
</div>
1571+
1572+
```bash
1573+
# اسکن یک رنج مستقیم
1574+
findns scan --cidr 5.52.0.0/16 --domain t.mysite.com
1575+
1576+
# اسکن چند رنج
1577+
findns scan --cidr 5.52.0.0/16 --cidr 185.51.200.0/24 --domain t.mysite.com
1578+
```
1579+
1580+
<div dir="rtl">
1581+
1582+
> **نکته:** با `--cidr` نیازی به فایل ورودی (`-i`) نیست — رنج مستقیماً expand می‌شود. همچنین در TUI گزینه "Custom CIDR" وجود دارد.
1583+
15491584
findns به صورت خودکار:
15501585
1. هر رنج CIDR را به آی‌پی‌های تکی تبدیل می‌کند (مثلاً `/24` = 254 آی‌پی)
15511586
2. آدرس شبکه و broadcast را حذف می‌کند
@@ -1617,9 +1652,10 @@ findns scan -i resolvers.txt -o results.json \
16171652
**نکته 5: edns_max چقدر مهم است؟**
16181653
- `512`: حداقل (تانل کند)
16191654
- `900`: خوب
1620-
- `1232`: عالی (سریع‌ترین تانل)
1655+
- `1232`: عالی (پیش‌فرض — سریع‌ترین تانل)
1656+
- `4096`: اگر شبکه اجازه بدهد — با `--edns-size 4096` تست کنید
16211657

1622-
resolverهایی با `edns_max=1232` بهترین انتخاب هستند.
1658+
resolverهایی با `edns_max` بالاتر بهترین انتخاب هستند. با `--edns-size` می‌توانید سایز بافر را تغییر دهید — اگر در شبکه شما فرگمنتیشن اتفاق می‌افتد، مقدار کمتری (مثلاً 900) تنظیم کنید.
16231659

16241660
**نکته 6: هایجک چیست و چرا مهم است؟**
16251661
بعضی ISPها و resolverها وقتی دامنه‌ای وجود ندارد، به جای NXDOMAIN شما را به صفحه تبلیغاتی یا صفحه خطای خودشان هدایت می‌کنند. این resolverها ممکن است تانل DNS را خراب کنند.
@@ -1651,4 +1687,13 @@ ping نیاز به دسترسی خاص دارد: `sudo findns scan ...` یا ا
16511687

16521688
> پیشنهاد: اول UDP امتحان کنید. اگر کار نکرد، DoH بزنید.
16531689
1690+
**نکته 11: حالت آفلاین (بدون اینترنت)**
1691+
findns به صورت کامل آفلاین کار می‌کند:
1692+
- بدون `-i`: از 7,800+ resolver ایرانی داخلی استفاده می‌شود
1693+
- بدون `-o`: نتایج در `results.json` ذخیره می‌شود
1694+
- فایل `_ips.txt` خودکار ساخته می‌شود
1695+
- `fetch` اگر دانلود شکست بخورد، خودکار از لیست داخلی استفاده می‌کند
1696+
1697+
ساده‌ترین دستور ممکن: `findns scan --domain t.example.com`
1698+
16541699
</div>

0 commit comments

Comments
 (0)