Skip to content

Latest commit

 

History

History
300 lines (226 loc) · 12 KB

File metadata and controls

300 lines (226 loc) · 12 KB

🌐 Domain Scanner

یک اسکنر دامنه چندنخی (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 یا بالاتر
  • اتصال به اینترنت (برای دانلود فایل‌ها و اسکن)

مراحل نصب

  1. کلون کردن مخزن
git clone https://github.com/your-username/domain-scanner.git
cd domain-scanner
  1. نصب کتابخانه‌های مورد نیاز
pip install requests
  1. اجرای برنامه
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 (اختیاری)

🧠 نحوه استفاده از GeoSite

در فایل domains.txt می‌توانید از تگ‌های geosite: استفاده کنید:

google.com
github.com
geosite:google
geosite:facebook
geosite:cloudflare
microsoft.com
geosite:telegram
geosite:youtube

برنامه هنگام اسکن، به طور خودکار تگ geosite:google را به لیست واقعی دامنه‌های گوگل تبدیل می‌کند (بیش از ۱۵ دامنه).

تگ‌های پیش‌فرض پشتیبانی شده (حتی بدون فایل geosite.dat)

  • google, facebook, twitter, github, cloudflare
  • microsoft, apple, netflix, amazon, telegram
  • whatsapp, instagram, reddit, youtube
  • cn, ir (دامنه‌های پرطرفدار چین و ایران)

🎮 کلیدهای کنترلی

حین اسکن

کلید عملیات
P توقف موقت (Pause)
R ادامه اسکن (Resume)
S توقف کامل و ذخیره نتایج (Stop)

در حالت نمایش صفحه‌بندی

کلید عملیات
یا N صفحه بعدی
یا P صفحه قبلی
Home یا H صفحه اول
End یا E صفحه آخر
Esc یا Q خروج

⚙️ معماری فنی

۱. اسکنر چندنخی (Multi-threaded Scanner)

  • استفاده از 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  # ذخیره هر ۲۰۰ نتیجه یکبار

افزودن تگ جدید به Built-in

در 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)
با ❤️ برای جامعه برنامه‌نویسان ایران