English: README.md
اگر روی شبکهای هستید که تأخیر بالاست، اتصال بیخبر قطع میشود و پیدا کردن یک IP کارآمد Cloudflare تبدیل به کار روزانه شده — SenPai Scanner برای همین ساخته شده.
این ابزار IPهای لبه Cloudflare را پروب میکند، بهترینها را با xray داخلی و کانفیگ VLESS یا Trojan خودتان تست میکند، و نتیجه را آمادهی paste کردن تحویل میدهد. بدون حفظ کردن فلگهای عجیب، بدون تنظیمات پیچیده — فقط ابزار را اجرا کنید و بگذارید کارش را بکند.
senpaiscanner را اجرا کنید تا وارد یک منوی ساده شوید. با کلیدهای جهتنما و Enter جابهجا میشوید — هیچ فلگ CLI برای اسکن وجود ندارد.
┌────────────────────────────────────────────────────────────┐
│ ▶ Find Working IPs scan Cloudflare IPs — config optional │
│ Retry Last Scan retry last scan with previous config │
│ About │
│ Quit │
└────────────────────────────────────────────────────────────┘
Find Working IPs در یک یا دو فاز کار میکند:
فاز ۱ — اسکن اتصال: کاندیداهای Cloudflare را پروب میکند. اگر کانفیگ URL ندهید، از HTTP استاندارد استفاده میشود؛ اگر بدهید، SNI، host، مسیر WebSocket و پورت از لینک شما گرفته میشود. در حالت Random، هر IP سالم بهطور خودکار اسکن همسایه را فعال میکند — آدرسهای نزدیک در همان بلوک Cloudflare هم بررسی میشوند.
فاز ۲ — اعتبارسنجی xray (اختیاری): یک نمونه xray داخلی راهاندازی میکند و بهترین نتایج فاز ۱ را با کانفیگ واقعی VLESS یا Trojan شما end-to-end تست میکند. خروجی شامل endpoint، نوع transport، سرعت دانلود، تأخیر (TTFB) و وضعیت pass/fail است.
بعد از اتمام، c را بزنید تا endpointهای سالم در کلیپبورد کپی و در فایل ips.txt ذخیره شوند.
تنظیمات آخرین اسکن بهصورت خودکار ذخیره میشود. Retry Last Scan همان اسکن را بدون وارد کردن مجدد تنظیمات تکرار میکند.
از صفحه Releases دانلود کنید:
| پلتفرم | معماری | فایل |
|---|---|---|
| Linux | x86_64 | senpaiscanner-linux-amd64 |
| Linux | ARM64 | senpaiscanner-linux-arm64 |
| Linux | 32-bit x86 | senpaiscanner-linux-386 |
| macOS | Intel | senpaiscanner-darwin-amd64 |
| macOS | Apple Silicon | senpaiscanner-darwin-arm64 |
| Windows | x86_64 | senpaiscanner-windows-amd64.exe |
| Windows | 32-bit x86 | senpaiscanner-windows-386.exe |
Linux / macOS — نصب با یک دستور:
# نسخه پایدار
curl -fsSL https://github.com/MatinSenPai/SenPaiScanner/raw/refs/heads/main/install.sh | bash
# پیشانتشار
curl -fsSL https://github.com/MatinSenPai/SenPaiScanner/raw/refs/heads/main/install.sh | bash -s -- --prerelease
Windows (PowerShell):
$r = Invoke-RestMethod https://api.github.com/repos/matinsenpai/senpaiscanner/releases/latest
$url = ($r.assets | Where-Object name -eq "senpaiscanner-windows-amd64.exe").browser_download_url
Invoke-WebRequest $url -OutFile senpaiscanner.exe
APKهای امضاشده به هر Release ضمیمه میشوند:
| فایل | توضیح |
|---|---|
SenPaiScanner-{version}-universal-release.apk |
همه ABIها — پیشنهادی |
SenPaiScanner-{version}-arm64-v8a-release.apk |
فقط ARM 64-bit |
SenPaiScanner-{version}-armeabi-v7a-release.apk |
فقط ARM 32-bit |
APK را نصب کنید، «نصب از منابع ناشناس» را در صورت نیاز فعال کنید، دسترسی شبکه بدهید و روی START SCAN بزنید.
اگر میخواهید همان TUI کامل دسکتاپ را روی اندروید داشته باشید — از جمله اعتبارسنجی xray، فایل نتایج زنده و اسکن همسایه — Termux گزینه مناسبی است.
۱. نصب Termux از F-Droid (نسخه Play Store توصیه نمیشود):
pkg update && pkg upgrade -y
pkg install curl tar -y
۲. نصب SenPai Scanner:
curl -fsSL https://github.com/MatinSenPai/SenPaiScanner/raw/refs/heads/main/install.sh | bash
اسکریپت Termux را تشخیص میدهد و در $PREFIX/bin نصب میکند. روی گوشی ۶۴-bit، فایل senpaiscanner-linux-arm64 دانلود میشود.
۳. اجرا:
senpaiscanner
چند نکته برای Termux:
| موضوع | توضیح |
|---|---|
| ناوبری | کلیدهای جهتدار یا کیبورد بلوتوث؛ در منوها k / j / h / l هم کار میکند |
| Paste کردن URL | لانگپرس در Termux ← Paste |
کلید c (کلیپبورد) |
ممکن است در همه setupها کار نکند؛ نتایج همیشه در ips.txt هستند |
| فایلهای نتایج | قبل از اجرا cd ~ کنید تا همه فایلها در یکجا بمانند |
| اسکن طولانی | termux-wake-lock نصب کنید تا صفحه وسط اسکن خاموش نشود |
| بهروزرسانی | همان one-liner را دوباره اجرا کنید؛ در صورت وجود نسخه جدید آپدیت میشود |
نصب دستی (بدون اسکریپت):
curl -fsSL -o "$PREFIX/bin/senpaiscanner" \
https://github.com/matinsenpai/senpaiscanner/releases/latest/download/senpaiscanner-linux-arm64
chmod +x "$PREFIX/bin/senpaiscanner"
senpaiscanner
go install github.com/matinsenpai/senpaiscanner/cmd/senpaiscanner@latest
senpaiscanner # باز کردن TUI
senpaiscanner --version # نمایش نسخه
senpaiscanner -v # همان
senpaiscanner version # همان
بقیه کارها داخل TUI یا اپ اندروید است.
| کلید | عملکرد |
|---|---|
↑ / ↓ یا k / j |
جابهجایی بین ردیفها |
← / → یا h / l |
جابهجایی بین گزینههای یک ردیف |
Enter |
انتخاب / تأیید / شروع اسکن |
Esc |
برگشت |
q |
خروج از منو؛ حین اسکن: لغو یا بازگشت بعد از اتمام |
در ردیف Config URL کلیدهای ← / → مکاننما را جابهجا میکنند؛ Ctrl+A / Ctrl+E به ابتدا و انتها میروند.
| ردیف | گزینهها | توضیح |
|---|---|---|
| Source | Random / From File | محدوده تصادفی IPv4 Cloudflare، یا لیست از ips.txt |
| Count | 1,000 / 5,000 / 20,000 / Custom | تعداد IP در فاز ۱ |
| Workers | 50 / 100 / 200 / Custom | پروبرهای موازی — پیشفرض ۵۰ مناسب شبکههای ضعیفتر است |
| Timeout | 2s / 3s / 5s / Custom | مهلت هر پروب |
| Ports | Config, 443, 8443, 2053, 2083, 2087, 2096 | چندانتخابی؛ هر IP روی تمام پورتهای انتخابشده تست میشود |
روی Ports Enter بزنید تا به مرحله بعد بروید. برای toggle هر پورت، روی آن فوکوس کنید و Space یا Enter بزنید.
| ردیف | گزینهها | توضیح |
|---|---|---|
| Config | paste URL یا خالی | خالی = فقط فاز ۱؛ با URL = فاز ۱ + فاز ۲ |
| Top N | 10 / 25 / 50 / 100 / All / Custom | تعداد نتایج فاز ۱ که در فاز ۲ اعتبارسنجی میشوند |
لینکهای پشتیبانیشده: vless:// و trojan://. پارسر لینکهای واقعی را هم میپذیرد.
هر بار که اسکن را شروع میکنید، تنظیمات در این مسیرها ذخیره میشوند:
| پلتفرم | مسیر |
|---|---|
| Windows | %AppData%\senpaiscanner\config.json |
| macOS | ~/Library/Application Support/senpaiscanner/config.json |
| Linux / Termux | ~/.config/senpaiscanner/config.json |
Retry Last Scan در صفحه اصلی همین مقادیر را بارگذاری و فوراً اسکن را شروع میکند.
حین اسکن، یک فایل با نام SenPaiScannerResult-YYYYMMDD-HHMMSS.txt کنار باینری ساخته میشود. این فایل:
| حالت | رفتار |
|---|---|
| بدون URL کانفیگ | پروب HTTP استاندارد (speed.cloudflare.com، نمونه ۶۴ KiB) |
| با URL کانفیگ | SNI / host / path از لینک؛ برای type=ws ارتقای WebSocket انجام میشود |
در حالت Random، با پیدا شدن هر IP سالم، آدرسهای نزدیک در همان بلوک هم بهصورت خودکار پروب میشوند (تا شعاع ۳۲، حداکثر ۱۲ همسایه به ازای هر hit).
جدول زنده ۲۰ نتیجه برتر را نشان میدهد: ENDPOINT، LOSS، AVG(ms)، COLO، STATUS.
بهترین کاندیداهای فاز ۱ با xray داخلی تست میشوند:
| ستون | معنی |
|---|---|
| ENDPOINT | IP:port اعتبارسنجیشده |
| TYPE | نوع transport (ws, grpc, xhttp, …) |
| SPEED | throughput دانلود بر حسب Mbps، یا n/a |
| LATENCY | زمان تا اولین بایت (TTFB) |
| STATUS | ✓ موفق / ✗ ناموفق |
اتصال با /cdn-cgi/trace بررسی میشود. endpoint میتواند با SPEED مقدار n/a هم ✓ باشد. هر کاندید یک retry خودکار روی شکست دارد.
بعد از فاز ۲، c را بزنید تا endpointهای سالم (مثل 104.16.72.162:443) در کلیپبورد کپی و در ips.txt ذخیره شوند.
ips.txt (From File)فایل را کنار executable یا در پوشه کاری فعلی قرار دهید:
| نوع خط | مثال | رفتار |
|---|---|---|
| IPv4 ساده | 104.16.72.162 |
بارگذاری |
| CSV | 104.16.72.162,note |
ستون اول خوانده میشود |
| کامنت / خالی | # my list |
نادیده گرفته میشود |
| CIDR کوچک (≤۲۵۶ host) | 104.16.72.160/29 |
expand کامل |
| CIDR بزرگ | 104.16.0.0/16 |
نمونه تصادفی تا ۲۵۶ IP |
| CIDR نامعتبر | not-a-cidr/99 |
خطا و توقف اسکن |
خطوط IPv6 نادیده گرفته میشوند.
یک workflow مفید: اسکن Random بزنید ← با c نتایج را در ips.txt ذخیره کنید ← همان لیست را با From File روی پورتهای بیشتر تست کنید.
موتور پروب و منطق xray از طریق پل Go mobile (gomobile bind) روی اندروید اجرا میشود.
| بخش | امکانات |
|---|---|
| Home | کارت آمار (Tested، In-Flight، Healthy، Failed)؛ لیست IP؛ کپی تکی و گروهی |
| Settings | Source، Count، Workers، Timeout، Ports، Config URL، Top N |
| FAB | START SCAN / STOP SCAN |
| Info | معرفی، نسخه، لینک GitHub و تلگرام |
| قابلیت | TUI دسکتاپ | اندروید |
|---|---|---|
| تنظیمات پایدار + Retry Last Scan | ✓ | — (فقط در همان session) |
| فایل نتایج زنده | ✓ | — |
| فقط فاز ۱ (بدون URL) | ✓ | ✓ |
| اسکن همسایه (Random) | ✓ | ✓ |
CIDR در ips.txt |
✓ | فقط IP ساده |
ذخیره در ips.txt |
✓ | فقط کلیپبورد |
با پیشفرضها شروع کنید. ۵,۰۰۰ IP، ۵۰ worker، timeout ۵ ثانیه و پورت ۴۴۳ baseline خوبی روی خطوط lossy است.
بعد از اسکن اول از From File استفاده کنید. با c نتایج را بگیرید، ips.txt را ویرایش کنید، و shortlist را با پورتهای بیشتر تست کنید.
چند پورت امتحان کنید. پورتهای CDN Cloudflare زیر DPI رفتار متفاوتی دارند.
به اسکن همسایه اعتماد کنید. در حالت Random نیازی به بالا بردن Count نیست — هر hit سالم بهصورت خودکار همسایههایش را در صف قرار میدهد.
کانفیگ WebSocket به IP سازگار با WS نیاز دارد. برای type=ws، hold TLS + upgrade WS اجرا میشود. IPای که trace را رد کند ولی WS را نه، کاندید فاز ۲ نمیشود.
۰٪ loss به تنهایی کافی نیست. throughput غیرصفر یا WS موفق هم لازم است.
چرا ping نمیزند؟ Cloudflare ICMP را روی edge IPها drop میکند. SenPai Scanner رفتار HTTP/TLS واقعی را تست میکند که به استفاده عملی VLESS/Trojan نزدیکتر است.
تفاوتش با warp-plus چیست؟
SenPai Scanner پروکسی دائمی راه نمیاندازد. IPهای Cloudflare را برای کانفیگ xray شما پیدا و اعتبارسنجی میکند و لیست IP:port export میدهد.
محدوده IPها از کجاست؟
از لیستهای رسمی Cloudflare — cloudflare.com/ips-v4 و cloudflare.com/ips-v6 — که داخل باینری embed شدهاند.
«ips.txt not found» در From File چیست؟ فایل را کنار executable یا در پوشه کاری فعلی بگذارید.
اسکن با پورتهای زیاد کند است. هر پورت برای هر IP پروب میشود. ۵ پورت × ۵,۰۰۰ IP برابر است با ۲۵,۰۰۰ پروب در فاز ۱. Count یا تعداد پورتها را کاهش دهید.
چرا tested از Count بیشتر است؟ در حالت Random، اسکن همسایه تا ۴۰۰ پروب اضافه میکند. این رفتار عمدی است.
git clone https://github.com/matinsenpai/senpaiscanner.git
cd senpaiscanner
make build # پلتفرم فعلی
make build-all # همه پلتفرمها ← dist/
make test
make install # در $GOPATH/bin
Windows (cross-compile):
powershell -ExecutionPolicy Bypass -File build.ps1
# اختیاری: -Version "0.6.0"
تگ v* با GitHub Actions و GoReleaser آرشیو چندپلتفرمی و checksum منتشر میکند.
# ساخت کتابخانه Go mobile
cd android
./build_go_mobile.sh # Linux / macOS
build_go_mobile.bat # Windows
# ساخت APK
./gradlew :app:assembleDebug
./gradlew :app:assembleRelease # نیاز به keystore
CI با push تگ، APK امضاشده را به Release ضمیمه میکند.
CONTRIBUTING.md را ببینید.
Issue و PR خوشآمد است. برای تغییرات بزرگ اول یک issue باز کنید تا درباره جهت پروژه صحبت کنیم.
برای گزارش باگ لطفاً موارد زیر را ذکر کنید: OS/arch، نسخه (senpaiscanner --version)، صفحهای که در آن بودید، رفتار موردانتظار در مقابل آنچه دیدید.
Watch برای مانیتورینگ مداومMIT — LICENSE
$ claude mcp add SenPaiScanner \
-- python -m otcore.mcp_server <graph>