یک اسکنر دامنه چندنخی (Multi-threaded) قدرتمند و حرفهای که با هدف بررسی در دسترس بودن دامنهها و استخراج دامنه از فایلهای GeoSite (V2Ray) توسعه یافته است.
⚠️ توجه مهم: این پروژه به طور کامل توسط هوش مصنوعی (ChatGPT / AI Assistant) نوشته و تولید شده است. کدها بهینه، ماژولار و با بهترین شیوههای برنامهنویسی پیادهسازی شدهاند.
- اسکن چندنخی (Multi-threaded) – با قابلیت تنظیم تعداد تردها برای سرعت بخشیدن به فرآیند
- پشتیبانی از GeoSite – استخراج خودکار دامنه از فایل
geosite.datپروژه V2Ray - تشخیص دامنههای زنده – با استفاده از متد HEAD برای کاهش مصرف پهنای باند و افزایش سرعت
- مدیریت حافظه (Caching) – جلوگیری از اسکن مجدد دامنههای قبلاً بررسی شده
- صفحهبندی (Pagination) – نمایش لیستهای حجیم با قابلیت پیمایش با صفحه کلید
پروژه به صورت کاملاً ماژولار و کلاسبندی شده طراحی شده است:
domain_ui/
├── menu_manager.py # مدیریت منوها و نمایش پیامها
├── paginated_view.py # نمایش صفحهبندی شده
├── scan_controller.py # کنترل اسکن (Pause/Resume/Stop)
└── components/
├── download_geo.py # دانلود فایلهای geosite/geoip
├── add_geosite.py # افزودن دامنه از geosite
├── scan_runner.py # اجرای اسکن
├── domain_manager.py # مدیریت دامنهها
└── view_handlers.py # نمایش لیستها و جستجو
- Pause – توقف موقت اسکن
- Resume – ادامه اسکن از همان نقطه
- Stop – توقف کامل و ذخیره نتایج تا لحظه
- آرشیو خودکار – ذخیره نتایج در
archive.csv - لیست دامنههای زنده – ذخیره در
IsLive.txt - جستجو در آرشیو – جستجوی سریع دامنه در نتایج قبلی
- مرتبسازی – مرتبسازی آلفابتیک لیستها
- کش (Cache) – جلوگیری از اسکن مجدد دامنههای تکراری
- دانلود فایلهای
geosite.datوgeoip.datاز مخازن رسمی V2Fly - پشتیبانی از آینه (Mirror) در صورت عدم دسترسی
DOMAIN SCANNER - MAIN MENU
============================================================
1. Normal Start ← اسکن دامنههای جدید (اجتناب از تکراری)
2. Force Update ← اسکن تمام دامنهها (حتی قبلاً اسکن شده)
3. Add Domain ← افزودن دستی دامنه به لیست
4. Live List ← نمایش دامنههای زنده
5. Archive View ← مشاهده آرشیو کامل نتایج
6. Archive Search ← جستجو در آرشیو
7. Sort Live List ← مرتبسازی لیست دامنههای زنده
8. Sort Domains ← مرتبسازی فایل domains.txt
9. Sort Archive ← مرتبسازی فایل آرشیو
10. Add from Geosite ← استخراج دامنه از geosite.dat
11. Download Geo Files ← دانلود فایلهای geosite/geoip
12. Help ← راهنما
0. Exit
============================================================
- Python 3.7 یا بالاتر
- اتصال به اینترنت (برای دانلود فایلها و اسکن)
- کلون کردن مخزن
git clone https://github.com/your-username/domain-scanner.git
cd domain-scanner- نصب کتابخانههای مورد نیاز
pip install requests- اجرای برنامه
python main.py| فایل | توضیح |
|---|---|
main.py |
نقطه ورودی برنامه |
domain_ui/ |
رابط کاربری و کامپوننتها |
scanner_core.py |
هسته اصلی اسکنر چندنخی |
storage.py |
مدیریت ذخیرهسازی و بافر |
geosite_parser.py |
پارسر فایل geosite.dat |
domain_parser.py |
اعتبارسنجی و پردازش دامنه |
dat_downloader.py |
دانلودر فایلهای کمکی |
geoparser/ |
پارسر حرفهای فایلهای DAT |
| فایل | توضیح |
|---|---|
domains.txt |
لیست دامنههای مورد نظر (یک خط یک دامنه) |
archive.csv |
آرشیو نتایج اسکن |
IsLive.txt |
دامنههای زنده به همراه IP |
geosite.dat |
فایل GeoSite (اختیاری – قابل دانلود از منو) |
geoip.dat |
فایل GeoIP (اختیاری) |
در فایل domains.txt میتوانید از تگهای geosite: استفاده کنید:
google.com
github.com
geosite:google
geosite:facebook
geosite:cloudflare
microsoft.com
geosite:telegram
geosite:youtubeبرنامه هنگام اسکن، به طور خودکار تگ geosite:google را به لیست واقعی دامنههای گوگل تبدیل میکند (بیش از ۱۵ دامنه).
google,facebook,twitter,github,cloudflaremicrosoft,apple,netflix,amazon,telegramwhatsapp,instagram,reddit,youtubecn,ir(دامنههای پرطرفدار چین و ایران)
| کلید | عملیات |
|---|---|
P |
توقف موقت (Pause) |
R |
ادامه اسکن (Resume) |
S |
توقف کامل و ذخیره نتایج (Stop) |
| کلید | عملیات |
|---|---|
← یا N |
صفحه بعدی |
→ یا P |
صفحه قبلی |
Home یا H |
صفحه اول |
End یا E |
صفحه آخر |
Esc یا Q |
خروج |
- استفاده از
threadingوqueueبرای مدیریت همزمان درخواستها - قابلیت تنظیم تعداد تردها (پیشفرض ۱۰)
- تایماوت قابل تنظیم برای هر درخواست (پیشفرض ۳ ثانیه)
- بافر (Buffer) – ذخیره نتایج در بافر ۱۰۰ تایی برای کاهش I/O
- کش (Cache) – ذخیره دامنههای قبلاً اسکن شده در حافظه
- درخواست HEAD – استفاده از متد HEAD به جای GET برای کاهش ترافیک
- پشتیبانی از
Pause/Resume/Stopبا استفاده ازthreading.Condition - مدیریت خطاهای اتصال، تایماوت و DNS
- عدم توقف برنامه در صورت خطای یک دامنه
DomainValidator.is_valid(domain) # بررسی فرمت دامنه
DomainValidator.is_valid("google.com") # True
DomainValidator.is_valid("*.google.com") # True (wildcard)
DomainValidator.is_valid("/regex/") # False (regex)هنگام شروع اسکن از کاربر خواسته میشود:
- Timeout – زمان انتظار برای پاسخ سرور (پیشفرض ۳ ثانیه)
- Workers – تعداد تردهای همزمان (پیشفرض ۱۰)
در storage.py خط زیر را تغییر دهید:
self._batch_size = 200 # ذخیره هر ۲۰۰ نتیجه یکباردر geosite_parser.py به دیکشنری builtin_domains اضافه کنید:
'myapp': ['myapp.com', 'api.myapp.com', 'cdn.myapp.com']| کتابخانه | کاربرد |
|---|---|
requests |
ارسال درخواستهای HTTP (قابل تعویض با urllib) |
threading |
مدیریت تردها (built-in) |
queue |
صف دامنهها (built-in) |
socket |
اتصالات سطح پایین (built-in) |
csv |
ذخیرهسازی نتایج (built-in) |
از آنجایی که این پروژه توسط هوش مصنوعی تولید شده است، اما هرگونه گزارش باگ، پیشنهاد ویژگی یا Pull Request با استقبال مواجه میشود.
- فایل لاگ (
archive.csv) را بررسی کنید - اطمینان حاصل کنید فایل
geosite.datوجود دارد یا از منو دانلود شده - خطای دقیق را همراه با مراحل بازتولید گزارش دهید
این پروژه تحت مجوز MIT منتشر شده است. استفاده آزاد، تغییر و توزیع با ذکر منبع مجاز است.
| ویژگی | توضیح |
|---|---|
| ماژولار | هر بخش در فایل جداگانه با مسئولیت مشخص |
| قابل توسعه | افزودن تگ جدید یا اسکنر جدید آسان |
| بهینه | بافر، کش و تایماوت هوشمند |
| کاربرپسند | منوی تعاملی و کنترلهای صفحه کلید |
| مستقل | کمترین وابستگی به کتابخانههای خارجی |
برای تست برنامه میتوانید از دامنههای زیر استفاده کنید:
google.com
github.com
stackoverflow.com
geosite:google
geosite:githubسپس گزینه 1. Normal Start را انتخاب کنید و نتایج را در IsLive.txt و archive.csv مشاهده کنید.
س: آیا برای اجرا نیاز به فایل geosite.dat دارم؟
ج: خیر. برنامه از لیست داخلی (Built-in) برای تگهای رایج استفاده میکند. اما برای تگهای تخصصی، نیاز به دانلود geosite.dat از منوی گزینه ۱۱ دارید.
س: چرا برخی دامنهها با تایماوت بالا پاسخ میدهند؟
ج: این مشکل به دلیل اختلالات DNS در ایران است. میتوانید تعداد تردها را کاهش داده یا تایماوت را افزایش دهید.
س: چگونه دامنههای تکراری را حذف کنم؟
ج: از منوی گزینه 8. Sort Domains استفاده کنید که خودکار تکراریها را حذف میکند.
- ایجاد Issue در گیتهاب
- ارسال ایمیل (در صورت وجود)
Domain Scanner
توسعه یافته توسط هوش مصنوعی (AI Assistant)
با ❤️ برای جامعه برنامهنویسان ایران