Skip to content

Latest commit

 

History

History
380 lines (286 loc) · 15.7 KB

File metadata and controls

380 lines (286 loc) · 15.7 KB

🌐 IP Scanner

یک اسکنر IP چندنخی (Multi-threaded) قدرتمند و حرفه‌ای که با هدف بررسی در دسترس بودن IPها و محدوده‌های CIDR، استخراج دامنه از گواهی‌های SSL و پشتیبانی از فایل GeoIP توسعه یافته است.

⚠️ توجه مهم: این پروژه به طور کامل توسط هوش مصنوعی (ChatGPT / AI Assistant) نوشته و تولید شده است. کدها بهینه، ماژولار و با بهترین شیوه‌های برنامه‌نویسی پیاده‌سازی شده‌اند.


✨ ویژگی‌ها

🔍 قابلیت‌های اصلی

  • اسکن چندنخی (Multi-threaded) – با قابلیت تنظیم تعداد تردها برای سرعت بخشیدن به فرآیند
  • پشتیبانی از CIDR – اسکن محدوده‌های IP مانند 45.115.42.0/23
  • سه روش اسکن متفاوت:
    • Fast Scan – Ping → nslookup → بررسی پورت 443 SSL
    • Deep Scan – بررسی پورت‌های 80, 443, 8080, 8443 (حتی در صورت عدم پاسخ پینگ)
    • Fake SNI Scan – اسکن با SNI جعلی برای دور زدن فیلترینگ
  • استخراج دامنه از گواهی SSL – استخراج خودکار CN و SAN از سرتیفیکیت SSL
  • پشتیبانی از GeoIP – استخراج خودکار محدوده‌های IP از فایل geoip.dat بر اساس کد کشور
  • مدیریت حافظه (Caching) – جلوگیری از اسکن مجدد IPهای قبلاً بررسی شده
  • صفحه‌بندی (Pagination) – نمایش لیست‌های حجیم با قابلیت پیمایش با صفحه کلید

🧩 معماری ماژولار

پروژه به صورت کاملاً ماژولار و کلاس‌بندی شده طراحی شده است:

ip_scanner/
├── ip_main.py                 # نقطه ورودی
├── ip_ui.py                   # رابط کاربری اصلی
├── ip_scanner_core.py         # هسته اسکنر چندنخی
├── ip_storage.py              # مدیریت ذخیره‌سازی
├── geoip_parser.py            # پارسر فایل geoip.dat
├── x509_parser.py             # پارسر گواهی SSL (ASN.1 DER)
├── utils/
│   ├── network_utils.py       # ابزارهای شبکه (پینگ، پورت، hostname)
│   ├── ssl_utils.py           # ابزارهای SSL (استخراج سرتیفیکیت)
│   └── cidr_utils.py          # ابزارهای CIDR (اعتبارسنجی، تبدیل)
├── scanners/
│   ├── fast_scanner.py        # پیاده‌سازی Fast Scan
│   ├── deep_scanner.py        # پیاده‌سازی Deep Scan
│   └── fakesni_scanner.py     # پیاده‌سازی Fake SNI Scan
└── ui_components/
    ├── menu_manager.py        # مدیریت منوها
    ├── paginated_view.py      # نمایش صفحه‌بندی شده
    └── scan_controller.py     # کنترل اسکن (Pause/Resume/Stop)

🎮 کنترل‌های تعاملی

  • Pause – توقف موقت اسکن
  • Resume – ادامه اسکن از همان نقطه
  • Stop – توقف کامل و ذخیره نتایج تا لحظه

📊 مدیریت داده‌ها

  • آرشیو خودکار – ذخیره نتایج در ip_archive.csv
  • لیست IPهای زنده – ذخیره در LiveIPs.txt
  • دامنه‌های استخراج شده – ذخیره خودکار دامنه‌های SSL در extracted_domains.txt
  • جستجو در آرشیو – جستجوی سریع IP در نتایج قبلی
  • مرتب‌سازی – مرتب‌سازی IPها (عددی)
  • کش (Cache) – جلوگیری از اسکن مجدد IPهای تکراری

📥 قابلیت دانلود خودکار

  • دانلود فایل geoip.dat از مخازن رسمی V2Fly
  • پشتیبانی از آینه (Mirror) در صورت عدم دسترسی

📋 منوی برنامه

IP SCANNER - MAIN MENU
============================================================
1. Normal IP Scan          ← اسکن IPهای جدید (اجتناب از تکراری)
2. Force Update IP Scan    ← اسکن تمام IPها (حتی قبلاً اسکن شده)
3. Add Single IP           ← افزودن دستی IP یا CIDR
4. Live IPs List           ← نمایش IPهای زنده
5. Archive View            ← مشاهده آرشیو کامل نتایج
6. Archive Search          ← جستجو در آرشیو
7. Extracted Domains       ← نمایش دامنه‌های استخراج شده از SSL
8. Sort IPs List           ← مرتب‌سازی فایل ips.txt
9. Sort Live IPs           ← مرتب‌سازی لیست IPهای زنده
10. Sort Archive           ← مرتب‌سازی فایل آرشیو
11. Add from GeoIP         ← استخراج IP از geoip.dat (بر اساس کشور)
12. Help                   ← راهنما
0. Exit
============================================================

منوی انتخاب روش اسکن

NORMAL IP SCAN - Select Scan Method
============================================================
1. Fast Scan - Ping → nslookup → Port 443 SSL
2. Deep Scan - Multiple ports (80,443,8080,8443)
3. Fake SNI Scan - Scan with custom SNI
0. Back to Main Menu
============================================================

🚀 نصب و راه‌اندازی

پیش‌نیازها

  • Python 3.7 یا بالاتر
  • اتصال به اینترنت (برای اسکن و دانلود فایل‌ها)

مراحل نصب

  1. کلون کردن مخزن
git clone https://github.com/your-username/ip-scanner.git
cd ip-scanner
  1. نصب کتابخانه‌های مورد نیاز
pip install requests
  1. اجرای برنامه
python ip_main.py

📁 ساختار فایل‌ها

فایل توضیح
ip_main.py نقطه ورودی برنامه
ip_ui.py رابط کاربری اصلی
ip_scanner_core.py هسته اصلی اسکنر چندنخی
ip_storage.py مدیریت ذخیره‌سازی و بافر
geoip_parser.py پارسر فایل geoip.dat
x509_parser.py پارسر گواهی SSL (ASN.1 DER - بدون وابستگی)
utils/ ابزارهای کمکی (شبکه، SSL، CIDR)
scanners/ پیاده‌سازی روش‌های مختلف اسکن
ui_components/ کامپوننت‌های رابط کاربری

فایل‌های داده

فایل توضیح
ips.txt لیست IPها و CIDRها (یک خط یک آیپی یا رنج)
ip_archive.csv آرشیو نتایج اسکن
LiveIPs.txt IPهای زنده به همراه پورت‌ها و دامنه‌ها
extracted_domains.txt دامنه‌های استخراج شده از گواهی SSL
geoip.dat فایل GeoIP (اختیاری – قابل دانلود از منو)

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

در فایل ips.txt می‌توانید محدوده‌های CIDR را وارد کنید:

8.8.8.8
4.4.4.4
45.115.42.0/23
171.22.0.0/16

همچنین از منوی گزینه ۱۱ می‌توانید بر اساس کد کشور، محدوده‌های IP را استخراج کنید:

Enter country code: US   ← استخراج تمام IPهای متعلق به آمریکا
Enter country code: CN   ← استخراج تمام IPهای متعلق به چین
Enter country code: IR   ← استخراج تمام IPهای متعلق به ایران

کدهای کشور پشتیبانی شده (حتی بدون فایل geoip.dat)

  • US, CN, RU, DE, GB, FR
  • JP, KR, BR, IN, CA, AU

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

حین اسکن

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

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

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

⚙️ معماری فنی

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

  • استفاده از threading و queue برای مدیریت همزمان درخواست‌ها
  • قابلیت تنظیم تعداد تردها (پیش‌فرض ۲۰)
  • تایم‌اوت قابل تنظیم برای هر درخواست (پیش‌فرض ۳ ثانیه)

۲. سه روش اسکن

Fast Scan

Ping → nslookup → Port 443 SSL → استخراج دامنه

فقط در صورت پاسخ پینگ، ادامه می‌دهد. مناسب برای اسکن سریع.

Deep Scan

Ping (ignore) → Check 80,443,8080,8443 → nslookup → SSL extraction

حتی اگر پینگ جواب ندهد، پورت‌ها را بررسی می‌کند. مناسب برای اسکن عمیق.

Fake SNI Scan

Ping → Check ports with custom SNI → SSL extraction with fake SNI

با SNI جعلی به سرور متصل می‌شود. مناسب برای دور زدن فیلترینگ مبتنی بر SNI.

۳. استخراج دامنه از گواهی SSL

  • استفاده از پارسر ASN.1 DER سفارشی (بدون وابستگی به OpenSSL)
  • استخراج CN (Common Name) و SAN (Subject Alternative Names)
  • ذخیره خودکار دامنه‌ها در extracted_domains.txt

۴. پشتیبانی از CIDR

  • تبدیل خودکار 45.115.42.0/23 به لیست IPها
  • اعتبارسنجی فرمت CIDR

۵. بهینه‌سازی عملکرد

  • بافر (Buffer) – ذخیره نتایج در بافر ۱۰۰ تایی برای کاهش I/O
  • کش (Cache) – ذخیره IPهای قبلاً اسکن شده در حافظه
  • درخواست مستقیم سوکت – عدم استفاده از کتابخانه‌های سنگین

🔧 شخصی‌سازی

تنظیم تایم‌اوت و تردها

هنگام شروع اسکن از کاربر خواسته می‌شود:

  • Timeout – زمان انتظار برای پاسخ سرور (پیش‌فرض ۳ ثانیه)
  • Workers – تعداد تردهای همزمان (پیش‌فرض ۲۰)

افزودن کد کشور جدید به Built-in

در geoip_parser.py به دیکشنری builtin_ranges اضافه کنید:

'IR': ['5.22.0.0/16', '31.2.0.0/16', '37.32.0.0/16', ...]

تغییر سایز بافر

در ip_storage.py خط زیر را تغییر دهید:

self._batch_size = 200  # ذخیره هر ۲۰۰ نتیجه یکبار

📦 وابستگی‌ها

کتابخانه کاربرد
requests بررسی پاسخ HTTP (اختیاری – قابل حذف)
threading مدیریت تردها (built-in)
queue صف IPها (built-in)
socket اتصالات سطح پایین (built-in)
ssl اتصالات SSL/TLS (built-in)
ipaddress کار با CIDRها (built-in)
csv ذخیره‌سازی نتایج (built-in)

🤝 مشارکت در توسعه

از آنجایی که این پروژه توسط هوش مصنوعی تولید شده است، اما هرگونه گزارش باگ، پیشنهاد ویژگی یا Pull Request با استقبال مواجه می‌شود.

گزارش مشکلات

  • فایل لاگ (ip_archive.csv) را بررسی کنید
  • اطمینان حاصل کنید فایل geoip.dat وجود دارد یا از منو دانلود شده
  • خطای دقیق را همراه با مراحل بازتولید گزارش دهید

📄 مجوز

این پروژه تحت مجوز MIT منتشر شده است. استفاده آزاد، تغییر و توزیع با ذکر منبع مجاز است.


💎 نقاط قوت پروژه

ویژگی توضیح
ماژولار هر بخش در فایل جداگانه با مسئولیت مشخص
سه روش اسکن Fast, Deep, Fake SNI
پشتیبانی از CIDR اسکن محدوده‌های کامل IP
استخراج SSL استخراج دامنه از گواهی‌ها
پشتیبانی از GeoIP استخراج IP بر اساس کشور
بهینه بافر، کش و تایم‌اوت هوشمند
کاربرپسند منوی تعاملی و کنترل‌های صفحه کلید
مستقل کمترین وابستگی به کتابخانه‌های خارجی

🧪 تست

برای تست برنامه می‌توانید از IPهای زیر استفاده کنید:

8.8.8.8
4.4.4.4
1.1.1.1
45.115.42.0/23

سپس گزینه 1. Normal IP Scan و روش 1. Fast Scan را انتخاب کنید. نتایج در LiveIPs.txt و ip_archive.csv ذخیره می‌شوند.

تست Fake SNI Scan

برای تست روش Fake SNI، SNI زیر را وارد کنید:

www.google.com

این روش به شما امکان می‌دهد سرورهایی که بر اساس SNI فیلتر شده‌اند را شناسایی کنید.


❓ سوالات متداول

س: آیا برای اجرا نیاز به فایل geoip.dat دارم؟
ج: خیر. برنامه از لیست داخلی (Built-in) برای کدهای کشور رایج استفاده می‌کند. اما برای دقت بالاتر، توصیه می‌شود geoip.dat را از منوی گزینه ۱۱ دانلود کنید.

س: چرا برخی IPها با تایم‌اوت بالا پاسخ می‌دهند؟
ج: این مشکل به دلیل اختلالات شبکه یا مسیریابی در ایران است. می‌توانید تعداد تردها را کاهش دهید یا تایم‌اوت را افزایش دهید.

س: تفاوت Fast Scan و Deep Scan چیست؟
ج: Fast Scan فقط در صورت پاسخ پینگ ادامه می‌دهد و فقط پورت 443 را بررسی می‌کند. Deep Scan حتی بدون پاسخ پینگ، پورت‌های 80، 443، 8080 و 8443 را بررسی می‌کند.

س: Fake SNI Scan چه کاربردی دارد؟
ج: برخی سرورها درخواست‌ها را بر اساس SNI (Server Name Indication) فیلتر می‌کنند. با استفاده از SNI جعلی می‌توانید این فیلترینگ را دور بزنید.

س: چگونه IPهای تکراری را حذف کنم؟
ج: از منوی گزینه 8. Sort IPs List استفاده کنید که خودکار تکراری‌ها را حذف می‌کند.

س: دامنه‌های استخراج شده از SSL کجا ذخیره می‌شوند؟
ج: در فایل extracted_domains.txt. این دامنه‌ها می‌توانند برای اسکن بعدی به فایل domains.txt پروژه Domain Scanner اضافه شوند.


🔗 ادغام با Domain Scanner

دامنه‌های استخراج شده از SSL در فایل extracted_domains.txt ذخیره می‌شوند. می‌توانید این دامنه‌ها را به فایل domains.txt پروژه Domain Scanner اضافه کنید:

cat extracted_domains.txt >> ../DomainScanner/domains.txt

📞 تماس و پشتیبانی

  • ایجاد Issue در گیت‌هاب
  • ارسال ایمیل (در صورت وجود)

IP Scanner
توسعه یافته توسط هوش مصنوعی (AI Assistant)
با ❤️ برای جامعه برنامه‌نویسان ایران