Docs GitHub
-- --
Theme:
Language:
EN فا

زنجیرهٔ اسکن#

در bgscan می‌توانید چند مرحلهٔ اسکن را به هم وصل کنید. خروجی هر مرحله به مرحلهٔ بعد می‌رود و فقط هدف‌هایی که از مرحلهٔ قبلی عبور کرده‌اند ادامه پیدا می‌کنند. تعداد مرحله‌ها از نوع اسکنی که انتخاب می‌کنید در می‌آید: اسکن تونل DNS با پیش‌اسکن ریزالور دو مرحله می‌سازد، اسکن Xray با pre-scan دو مرحله می‌سازد و یک اسکن سادهٔ ICMP فقط یک مرحله.

اسکن تک‌مرحله‌ای اصلاً وارد منطق زنجیره نمی‌شود. حالت اجرا (Pipeline Mode) فقط وقتی دو مرحله یا بیشتر داشته باشید اهمیت پیدا می‌کند.

حالت‌های اجرای زنجیره#

bgscan سه حالت برای اجرای زنجیره دارد. تفاوتشان بیشتر در سرعت و مقدار حافظه‌ای است که مصرف می‌کنند:

۱. حالت Streaming (پیش‌فرض)#


Stage 1 (IPs) → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
│           │           │
▼           ▼           ▼
(passed IPs)  (passed IPs)  (passed IPs)
  • نحوه کار: تمام مراحل به صورت هم‌زمان اجرا می‌شوند و آی‌پ‌ی‌ها از طریق کانال‌های داخل حافظه (In-memory) بین مراحل مختلف جریان پیدا می‌کنند.
  • مصرف حافظه: بالاترین حد (چون چندین نسخه از لیست آی‌پ‌ی‌ها را هم‌زمان در حافظه نگه می‌دارد).
  • سرعت: سریع‌ترین حالت (نیازی به منتظر ماندن برای اتمام کامل یک مرحله نیست).
  • بهترین کاربرد: اسکن با کارایی و سرعت حداکثری، در سیستم‌هایی که حافظه رم کافی دارند.
  • زمان استفاده: وقتی رم کافی دارید و می‌خواهید بالاترین نرخ پردازش (Throughput) را بگیرید.

ظرفیت کانال بین مراحل از max_ips_per_stage گرفته می‌شود و اگر تعداد Worker مرحلهٔ بعدی بیشتر باشد، به همان مقدار افزایش می‌یابد. وقتی مرحلهٔ پایین‌دستی عقب بماند، کانالش پر می‌شود و مرحلهٔ بالادستی بلاک می‌شود؛ همین رفتار مصرف حافظه را مهار می‌کند.

۲. حالت Sequential#


Stage 1 → [ICMP Scan] → (wait) → [TCP Scan] → (wait) → [HTTP Scan] → Results
  • نحوه کار: هر مرحله قبل از شروع، منتظر می‌ماند تا مرحله قبلی به طور کامل پایان یابد.
  • مصرف حافظه: کمترین حد (در هر لحظه فقط داده‌های مربوط به یک مرحله در حافظه بارگذاری می‌شود).
  • سرعت: کندترین حالت (زمان کل برابر است با مجموع زمان تک‌تک مراحل).
  • بهترین کاربرد: محیط‌هایی که با محدودیت شدید حافظه رم مواجه هستند.
  • زمان استفاده: هنگام اجرا روی سیستم‌هایی که رم محدودی دارند.

هر مرحله فایل نتیجهٔ خودش را می‌نویسد و مرحلهٔ بعد همان فایل را به‌عنوان ورودی می‌خواند. اگر مرحله‌ای هیچ نتیجه‌ای تولید نکند، زنجیره همان‌جا متوقف می‌شود. ضمناً مقدار ناشناخته برای pipeline_mode هنگام خواندن به sequential برمی‌گردد.

۳. حالت دسته‌ای (Batch)#


[Batch 1 of IPs] → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
[Batch 2 of IPs] → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
...
  • نحوه کار: آی‌پ‌ی‌ها به دسته‌های کوچک‌تر (Batches) تقسیم می‌شوند؛ هر دسته قبل از شروع دسته بعدی، تمام مراحل اسکن را به طور کامل طی می‌کند. هدف‌های جاافتاده بین مرحله‌ها در حافظه جابه‌جا می‌شوند و رفت‌وبرگشت از دیسک در کار نیست.
  • مصرف حافظه: متوسط (داده‌های مربوط به یک دسته را به ازای هر مرحله در حافظه نگه می‌دارد).
  • سرعت: متوسط (بهتر از حالت ترتیبی و ضعیف‌تر از حالت جریانی).
  • بهترین کاربرد: ایجاد تعادل میان مصرف حافظه و کارایی سیستم.
  • زمان استفاده: وقتی می‌خواهید از پر شدن ناگهانی حافظه (Memory Spikes) جلوگیری کنید و در عین حال سرعت پردازش مناسبی داشته باشید.

در اسکن بیش از یک مرحله، اندازهٔ مؤثر دسته برابر max(batch_size, بیشترین تعداد Worker در مرحله‌های بعد از مرحلهٔ اول) است، بنابراین دسته هرگز آن‌قدر کوچک نمی‌شود که مرحله‌های بعدی بیکار بمانند.

پیکربندی فرآیند اسکن#

وضعیت اجرای فرآیند در فایل تنظیمات عمومی general_settings.toml تعیین می‌شود:

# Pipeline execution mode: "streaming", "sequential", or "batch"
pipeline_mode = "streaming"

تنظیمات مراحل (Stage Configuration)#

هر مرحله در این فرآیند از فایل پیکربندی اختصاصی خود استفاده می‌کند:

جریان داده بین مراحل#

تنها آی‌پ‌ی‌هایی به مرحله بعدی راه پیدا می‌کنند که معیارهای موفقیت مرحله فعلی را برآورده کنند:

  1. مرحله ICMP: فقط آی‌پ‌ی‌هایی که در مهلت زمانی و تعداد تلاش مشخص به پینگ پاسخ دهند، صعود می‌کنند.
  2. مرحله TCP: فقط آی‌پ‌ی‌هایی که Handshake روی پورت مشخص‌شده کامل شود، صعود می‌کنند.
  3. مرحله HTTP: فقط آی‌پ‌ی‌هایی که استاتوس کدشان داخل accepted_status_codes باشد، صعود می‌کنند.
  4. مرحله ریزالور DNS: فقط آی‌پ‌ی‌هایی که کد پاسخشان داخل accepted_rcodes باشد و در صورت فعال‌بودن، بررسی DPI را هم پاس کنند، صعود می‌کنند.
  5. مرحله تونل (DNSTT، VayDNS و Slipstream): فقط آی‌پ‌ی‌هایی که تونل از طریق پورت محلی SOCKS5 بالا بیاید و اعتبارسنجی شود، صعود می‌کنند.
  6. مرحله Xray: فقط آی‌پ‌ی‌هایی که Proxy وصل شود و در صورت فعال‌بودن، تست سرعت از حداقل تعیین‌شده پایین‌تر نرود، صعود می‌کنند.

هر مرحله فارغ از این‌که در مرحله‌های بعدی چه می‌گذرد، فایل نتیجهٔ خودش را می‌نویسد؛ پس خروجی میانی همیشه برای اسکن دوباره در دسترس است.

مثال عملی: فرآیند چندمرحله‌ای ICMP → TCP → HTTP#

  1. ورودی: تعداد ۱۰,۰۰۰ آی‌پی از لیست آی‌پی‌ها.
  2. مرحله ICMP: تعداد ۲,۰۰۰ آی‌پی به پینگ پاسخ می‌دهند ← این ۲,۰۰۰ آی‌پی به مرحله TCP فرستاده می‌شوند.
  3. مرحله TCP: تعداد ۵۰۰ آی‌پی پورت ۸۰ باز دارند ← این ۵۰۰ آی‌پی به مرحله HTTP فرستاده می‌شوند.
  4. مرحله HTTP: تعداد ۳۰۰ آی‌پی کد وضعیت HTTP 200 برمی‌گردانند ← ۳۰۰ وب‌سرور فعال و درست پیدا می‌شود.
  5. خروجی:
  • پوشه result/icmp/ حاوی نتایج بررسی تمام ۱۰,۰۰۰ آی‌پی اولیه است.
  • پوشه result/tcp/ حاوی نتایج مربوط به آن ۲,۰۰۰ آی‌پی پاسخگو به ICMP است.
  • پوشه result/http/ حاوی نتایج مربوط به آن ۵۰۰ آی‌پی پاسخگو به TCP است.
  • آمار نهایی: ۳۰۰ وب‌سرور فعال و سالم.

هر فایل نتیجه فقط شامل هدف‌های پاس‌کردهٔ همان مرحله است، نه همهٔ هدف‌هایی که بررسی کرده.

موضوعات مرتبط#