<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation</title><link>https://MohsenBg.github.io/bgscan/</link><description>Recent content on Documentation</description><generator>Hugo</generator><language>en</language><copyright>© 2026 MohsenBg. All rights reserved.</copyright><atom:link href="https://MohsenBg.github.io/bgscan/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting Started</title><link>https://MohsenBg.github.io/bgscan/docs/developer/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/developer/getting-started/</guid><description>&lt;h1 id="getting-started-developer"&gt;Getting Started (Developer)&lt;a class="anchor" href="#getting-started-developer"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This guide explains how to set up your environment, build, and run &lt;strong&gt;bgscan&lt;/strong&gt; locally for development.&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Read first:&lt;/strong&gt; &lt;a href="../contributing/"&gt;Contributing&lt;/a&gt; — branching, commit conventions, and PR workflow.&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://go.dev/"&gt;Go&lt;/a&gt; 1.26.3+ (see &lt;code&gt;go.mod&lt;/code&gt; for the exact version)&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;For Android builds: &lt;a href="https://developer.android.com/ndk"&gt;Android NDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-clone-the-repository"&gt;1. Clone the repository&lt;a class="anchor" href="#1-clone-the-repository"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/MohsenBg/bgscan.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;cd&lt;/span&gt; bgscan&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-create-a-branch"&gt;2. Create a branch&lt;a class="anchor" href="#2-create-a-branch"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git checkout -b feature/my-change&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href="../contributing/"&gt;Contributing&lt;/a&gt; for branch naming conventions.&lt;/p&gt;
&lt;h2 id="3-install-dependencies"&gt;3. Install dependencies&lt;a class="anchor" href="#3-install-dependencies"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;bgscan uses a companion tool called &lt;strong&gt;&lt;code&gt;bgscan-builder&lt;/code&gt;&lt;/strong&gt; to fetch and build the project&amp;rsquo;s dependencies. The install scripts download it for you, place it in the project root, and use it to fetch the correct dependency build for your OS/architecture.&lt;/p&gt;</description></item><item><title>Scan Source</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/scan-source/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/scan-source/</guid><description>&lt;h1 id="scan-source"&gt;Scan Source&lt;a class="anchor" href="#scan-source"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Before configuring a scan, bgscan asks you to choose where the target IPs come from. Navigate to &lt;strong&gt;Main Menu → Scan&lt;/strong&gt; to open the source picker, which presents two options:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Key&lt;/th&gt;
					&lt;th&gt;Option&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;IP List&lt;/td&gt;
					&lt;td&gt;Pick from your imported IP list files&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Result List&lt;/td&gt;
					&lt;td&gt;Pick from a previous scan&amp;rsquo;s result file&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;

&lt;img src="https://MohsenBg.github.io/bgscan/bgscan-target-source.webp" alt="bgscan scan source"&gt;

&lt;h2 id="ip-list"&gt;IP List&lt;a class="anchor" href="#ip-list"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Choosing &lt;strong&gt;IP List&lt;/strong&gt; opens your IP file browser. Select any file from the &lt;code&gt;ips/&lt;/code&gt; directory and bgscan will use its enabled entries as the scan targets.&lt;/p&gt;</description></item><item><title>Settings Overview</title><link>https://MohsenBg.github.io/bgscan/docs/settings/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/overview/</guid><description>&lt;h1 id="settings-overview"&gt;Settings Overview&lt;a class="anchor" href="#settings-overview"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan keeps all configuration in plain TOML files inside &lt;code&gt;settings/&lt;/code&gt;. The app also exposes these same options through the in-app Settings inspector, which writes changes back to disk automatically.&lt;/p&gt;
&lt;h2 id="setting-files"&gt;Setting files&lt;a class="anchor" href="#setting-files"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;File&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/general_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Global scan control and pipeline mode&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/writer_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Result buffering and disk writes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/icmp_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;ICMP probe tuning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/tcp_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;TCP connect tuning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/http_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;HTTP/HTTPS/HTTP3 probe tuning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/xray_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Xray test tuning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings/dns_settings.toml&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;DNS resolver, DNSTT, and SlipStream tuning&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="two-ways-to-edit-settings"&gt;Two ways to edit settings&lt;a class="anchor" href="#two-ways-to-edit-settings"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TOML files&lt;/strong&gt; — open any &lt;code&gt;settings/*.toml&lt;/code&gt; file in any text editor, change values, save, and restart bgscan. This is the most explicit approach and works well for version control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-app inspector&lt;/strong&gt; — open bgscan, navigate to &lt;strong&gt;Settings&lt;/strong&gt; in the main menu, pick a category, press &lt;code&gt;Enter&lt;/code&gt; on any field to edit it. Changes are saved immediately to disk.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some fields are dynamic. For example, TLS-related options only show when HTTPS is selected, and DNSTT/Slipstream fields only show when those probes are enabled.&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://MohsenBg.github.io/bgscan/docs/developer/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/developer/architecture/</guid><description>&lt;h1 id="architecture"&gt;Architecture&lt;a class="anchor" href="#architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan is a layered application. A lightweight entry point boots startup health checks, then hands control to a BubbleTea TUI. The TUI drives a multi-stage scanner engine whose probes and I/O are pluggable.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="directory-layout"&gt;Directory layout&lt;a class="anchor" href="#directory-layout"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── assets
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── xray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── outbounds
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── cmd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── bgscan
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── docs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.mod
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── internal
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── core
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── dns
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── fileutil
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── ip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── iplist
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── process
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── result
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ ├── scanner
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ │ └── xray
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── logger
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── startup
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── ui
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── components
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── shared
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── theme
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── ips
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── scripts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── settings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="layer-overview"&gt;Layer overview&lt;a class="anchor" href="#layer-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│ cmd/bgscan │
│ (entry point) │
├─────────────────────────────────────────────┤
│ internal/startup │
│ (health checks, config init) │
├─────────────────────────────────────────────┤
│ internal/ui │
│ ┌─────────────────────────────────────┐ │
│ │ main (root model, layout, dialogs) │ │
│ │ components (menus, tables, forms) │ │
│ │ shared (layout, env, dialog, ui) │ │
│ │ theme │ │
│ └─────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ internal/core │
│ ┌──────────────┐ ┌──────────┐ ┌─────────┐ │
│ │ scanner │ │ config │ │ result │ │
│ │ (engine, │ │ (TOML) │ │ (writer)│ │
│ │ probe, port) │ │ │ │ │ │
│ └──────────────┘ └──────────┘ └─────────┘ │
│ ┌──────────┐ ┌─────────┐ ┌──────────────┐ │
│ │ iplist │ │ dns │ │ xray/process │ │
│ └──────────┘ └─────────┘ └──────────────┘ │
├─────────────────────────────────────────────┤
│ internal/logger │
├─────────────────────────────────────────────┤
│ assets/ ips/ settings/ │
│ (data files) │
└─────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="directory-reference"&gt;Directory reference&lt;a class="anchor" href="#directory-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Path&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;cmd/bgscan&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Application entry point (&lt;code&gt;main.go&lt;/code&gt;). Creates the root TUI model and runs it.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Core logic: config, DNS, file utilities, IP handling, process management, results, scanner, and Xray integration.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/config&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;TOML-based configuration singleton with thread-safe accessors.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/scanner&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Scanner orchestrator, engine (pipeline), probe interface, port manager, and net utilities.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/result&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Asynchronous result writer, CSV merge/sort, result file registry, and loader.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/iplist&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;IP list CSV loader, parser, registry, and shuffle.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/dns&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;DNS query, DNSTT, SlipStream, and SOCKS5 helpers.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/xray&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Xray command runner, inbound/outbound management, and speed test.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/process&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Cross-platform process lifecycle (spawn, kill, signal).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/fileutil&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CSV, JSON, TOML, text, temp-file, and path helpers.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/core/ip&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;IP parsing and CIDR expansion.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/logger&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Leveled logging with lumberjack rotation. Three streams: core, ui, debug.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/startup&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Sequential startup health checks: logger, theme, config, Xray, DNSTT, Slipstream.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/ui/main&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Root BubbleTea model — header/body/footer layout, overlay dialog manager.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/ui/components&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Reusable UI: basic widgets, inspector forms, menus, tables, scanner view.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/ui/shared&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Shared UI infrastructure: layout geometry, dialog system, env/keys, component interface, validation.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;internal/ui/theme&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Dark/light/auto color palettes (Catppuccin-based).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;assets/xray/outbounds&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bundled Xray outbound config assets.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;assets/dnstt-client&lt;/code&gt;, &lt;code&gt;assets/slipstream-client&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;DNS tunneling binaries.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ips&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Default IP range lists per provider (Cloudflare, AWS, Azure, etc.) as CSV.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;settings&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Default &lt;code&gt;.toml&lt;/code&gt; settings files. &lt;code&gt;.default&lt;/code&gt; copies are fallback templates.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scripts&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Install, build, and release helper scripts.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Hugo Book documentation site.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="application-flow"&gt;Application flow&lt;a class="anchor" href="#application-flow"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;main()
 │
 ├─ startup.RunHealthChecks()
 │ ├─ logger init
 │ ├─ theme init
 │ ├─ config load + validate
 │ ├─ xray binary check
 │ ├─ dnstt binary check
 │ └─ slipstream binary check
 │
 ├─ tea.NewProgram(app.New()).Run()
 │ │
 │ ├─ header (title bar)
 │ ├─ body (component stack: main menu → scan/settings/logs/...)
 │ └─ footer (status bar, key hints)
 │
 └─ when user selects Run Scan:
 ├─ scanner.NewScanner(ctx, inputPath)
 ├─ scanner.AddStage(BuildICMPStage)
 ├─ scanner.AddStage(BuildTCPStage)
 ├─ ...
 ├─ scanner.Run()
 │ ├─ single stage → engine.RunScan
 │ └─ multi stage → engine.RunScanWithChain
 │ ├─ sequential
 │ ├─ streaming
 │ └─ batch
 │
 └─ results written via result.Writer → CSV merge → disk&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="key-design-principles"&gt;Key design principles&lt;a class="anchor" href="#key-design-principles"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No external runtime deps for core scans.&lt;/strong&gt; ICMP, TCP, and HTTP probes use Go stdlib. Xray, DNSTT, and Slipstream are optional binaries validated at startup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration is file-first.&lt;/strong&gt; All settings live in &lt;code&gt;settings/*.toml&lt;/code&gt;. The in-app inspector reads and writes the same files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probes are pluggable.&lt;/strong&gt; The &lt;code&gt;probe.Probe&lt;/code&gt; interface is the only contract. Adding a new scan type means implementing &lt;code&gt;Init/Run/Close&lt;/code&gt; and registering a stage builder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engine is pipeline-agnostic.&lt;/strong&gt; The engine does not know what the probes do — it just feeds IPs, collects results, and flushes to disk. The pipeline mode (sequential/streaming/batch) is a config choice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI is a component tree.&lt;/strong&gt; Every screen is a &lt;code&gt;ui.Component&lt;/code&gt; with &lt;code&gt;Init/Update/View/OnClose/Mode&lt;/code&gt;. Overlays (dialogs, pickers) stack on top; the top overlay consumes all input.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="related-pages"&gt;Related pages&lt;a class="anchor" href="#related-pages"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../core/"&gt;Core&lt;/a&gt; — scanner engine, probe interface, config, and result pipeline in detail&lt;/li&gt;
&lt;li&gt;&lt;a href="../ui/"&gt;UI&lt;/a&gt; — TUI architecture, component model, layout, and theming&lt;/li&gt;
&lt;li&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/getting-started/"&gt;Getting Started&lt;/a&gt; — build and run instructions&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Scan Types</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/scan-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/scan-types/</guid><description>&lt;h1 id="scan-types"&gt;Scan Types&lt;a class="anchor" href="#scan-types"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan supports five primary scan types, each accessible from the main menu via keyboard shortcuts:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Key&lt;/th&gt;
					&lt;th&gt;Scan Type&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Primary Use Case&lt;/th&gt;
					&lt;th&gt;Configuration File&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;ICMP Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Sends ICMP echo requests (ping) to check host availability&lt;/td&gt;
					&lt;td&gt;Host discovery, network mapping&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/icmp/"&gt;&lt;code&gt;icmp_settings.toml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;t&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;TCP Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Attempts TCP connections to specified ports&lt;/td&gt;
					&lt;td&gt;Port scanning, service discovery&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/tcp/"&gt;&lt;code&gt;tcp_settings.toml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;HTTP Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Sends HTTP/HTTPS requests to web servers&lt;/td&gt;
					&lt;td&gt;Web service testing, API endpoint discovery&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/http/"&gt;&lt;code&gt;http_settings.toml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;DNS Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Queries DNS servers for resolution and tunneling capabilities&lt;/td&gt;
					&lt;td&gt;DNS resolver testing, tunneling detection&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/dns/"&gt;&lt;code&gt;dns_settings.toml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Xray Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Tests outbound connectivity and bandwidth to remote servers&lt;/td&gt;
					&lt;td&gt;Network egress testing, bandwidth measurement&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/xray/"&gt;&lt;code&gt;xray_settings.toml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Note&lt;/strong&gt;: The DNS Scan option (&lt;code&gt;d&lt;/code&gt;) actually encompasses three sub-scan types when enabled in configuration:&lt;/p&gt;</description></item><item><title>Settings Inspector</title><link>https://MohsenBg.github.io/bgscan/docs/settings/inspector/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/inspector/</guid><description>&lt;h1 id="settings-inspector"&gt;Settings Inspector&lt;a class="anchor" href="#settings-inspector"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;When you open any settings section from the in-app Settings menu, you see the inspector. It is a tabbed field list with labels, current values, and edit affordances.&lt;/p&gt;

&lt;img src="https://MohsenBg.github.io/bgscan/bgscan-settings.webp" alt="settings menu"&gt;

&lt;ul&gt;
&lt;li&gt;select fields and press &lt;code&gt;Enter&lt;/code&gt; to change them&lt;/li&gt;
&lt;li&gt;press &lt;code&gt;d&lt;/code&gt; to view the description/help text for the selected field&lt;/li&gt;
&lt;li&gt;booleans show as toggles&lt;/li&gt;
&lt;li&gt;some protocols expose extra fields only when the mode is selected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Changes are saved immediately to disk without restarting the scanner.&lt;/p&gt;</description></item><item><title>Core</title><link>https://MohsenBg.github.io/bgscan/docs/developer/core/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/developer/core/</guid><description>&lt;h1 id="core"&gt;Core&lt;a class="anchor" href="#core"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;internal/core&lt;/code&gt; package contains all non-UI logic: configuration, the scanner engine, probe implementations, IP list handling, results, DNS, Xray integration, and process management.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="package-map"&gt;Package map&lt;a class="anchor" href="#package-map"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Package&lt;/th&gt;
					&lt;th&gt;Responsibility&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;config&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Thread-safe singleton holding all TOML settings; load/save helpers; validation entry points.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;config/validate&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Per-protocol validators (ICMP, TCP, HTTP, DNS, Xray, writer, general).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scanner&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Scanner&lt;/code&gt; orchestrator and stage builders.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scanner/engine&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Pipeline execution: single scan, sequential chain, streaming pipeline, batch pipeline.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scanner/probe&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Probe&lt;/code&gt; interface and all concrete probes (ICMP, TCP, HTTP, HTTP/3, DNS, DNSTT, SlipStream, Resolve, Xray).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scanner/portmgr&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Ephemeral port pool for probes that need local bind ports (Xray, DNSTT, SlipStream).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scanner/netutil&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Shared network utilities.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;result&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Writer&lt;/code&gt; (async batch+merge), CSV format, loader, registry, ordering.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;iplist&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CSV IP list loader, parser, registry, shuffle, streaming.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ip&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;IPv4 parsing and CIDR expansion.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dns&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;DNS query helpers, transport parsing, DNSTT/SlipStream SOCKS5 client.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;xray&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Xray binary runner, inbound/outbound config, link parsing, speed test.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;process&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Cross-platform process spawn/kill (Unix + Windows split).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;fileutil&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CSV, JSON, TOML, text, temp-file, and path helpers.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logger&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Leveled logging (core, ui, debug) with lumberjack rotation.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="scanner"&gt;Scanner&lt;a class="anchor" href="#scanner"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;internal/core/scanner/scanner.go&lt;/code&gt; defines the &lt;code&gt;Scanner&lt;/code&gt; struct — the public API the UI calls to run a scan.&lt;/p&gt;</description></item><item><title>General Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/general/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/general/</guid><description>&lt;h1 id="general-settings"&gt;General Settings&lt;a class="anchor" href="#general-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;General Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/general_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the core behavior of the bgscan scanner, including scan limits, execution modes, and performance tuning.&lt;/p&gt;
&lt;h2 id="quick-reference"&gt;Quick Reference&lt;a class="anchor" href="#quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;status_interval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;UI refresh rate in milliseconds&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;stop_after_found&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Stop after finding N successful targets&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;max_ips_to_test&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum number of IPs to scan&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;shuffled&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Randomize target order&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;pipeline_mode&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;streaming&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Execution mode for multi-stage scans&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;max_ips_per_stage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;100000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory cap per pipeline stage&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;batch_size&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Batch size for batch mode&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="scan-control"&gt;Scan Control&lt;a class="anchor" href="#scan-control"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="status-interval"&gt;Status Interval&lt;a class="anchor" href="#status-interval"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;status_interval = &lt;span style="color:#ff9f43"&gt;1000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Controls how often (in milliseconds) the UI refreshes with progress updates. Lower values give smoother real-time feedback but use more CPU. Higher values reduce overhead for very large scans.&lt;/p&gt;</description></item><item><title>Installation</title><link>https://MohsenBg.github.io/bgscan/docs/getting-started/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/getting-started/installation/</guid><description>&lt;h1 id="installation"&gt;Installation&lt;a class="anchor" href="#installation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan runs on Linux, macOS, Windows, and Android (Termux). Pick the method that fits your environment.&lt;/p&gt;
&lt;h2 id="quick-install"&gt;Quick Install&lt;a class="anchor" href="#quick-install"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Linux / macOS&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://raw.githubusercontent.com/MohsenBg/bgscan/refs/heads/main/scripts/install.sh | bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Windows (PowerShell)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;irm &lt;/span&gt;https&lt;span style="color:#ff5c57"&gt;:&lt;/span&gt;//raw.githubusercontent.com/MohsenBg/bgscan/refs/heads/main/scripts/install.ps1 | iex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Android (Termux)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pkg update -y &lt;span style="color:#ff6ac1"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pkg install bash curl unzip -y &lt;span style="color:#ff6ac1"&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl -fsSL https://raw.githubusercontent.com/MohsenBg/bgscan/refs/heads/main/scripts/install.sh | bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The installer downloads the latest release, extracts it to &lt;code&gt;bgscan/&lt;/code&gt;, and makes the binary executable. If a previous installation exists, it prompts you to remove it or back it up as &lt;code&gt;bgscan_old&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Scan Pipeline</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/scan-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/scan-pipeline/</guid><description>&lt;h1 id="scan-pipeline"&gt;Scan Pipeline&lt;a class="anchor" href="#scan-pipeline"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan supports multi-stage scanning where the output of one scan becomes the input for the next. This is configured via the &lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/general/"&gt;General Settings&lt;/a&gt; under &amp;ldquo;Pipeline Execution Mode&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="pipeline-modes"&gt;Pipeline Modes&lt;a class="anchor" href="#pipeline-modes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;bgscan offers three pipeline modes to balance performance, memory usage, and flexibility:&lt;/p&gt;
&lt;h4 id="1-streaming-default"&gt;1. Streaming (Default)&lt;a class="anchor" href="#1-streaming-default"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Stage 1 (IPs) → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
 │ │ │
 ▼ ▼ ▼
 (passed IPs) (passed IPs) (passed IPs)&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How it works&lt;/strong&gt;: All stages run simultaneously, with IPs flowing between stages via in-memory channels&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory usage&lt;/strong&gt;: Highest (holds multiple copies of IP lists in memory)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Fastest (no waiting for stages to complete)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: High-performance scanning with sufficient memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When to use&lt;/strong&gt;: When you have enough memory and want maximum throughput&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="2-sequential"&gt;2. Sequential&lt;a class="anchor" href="#2-sequential"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Stage 1 → [ICMP Scan] → (wait) → [TCP Scan] → (wait) → [HTTP Scan] → Results&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How it works&lt;/strong&gt;: Each stage waits for the previous to complete before starting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory usage&lt;/strong&gt;: Lowest (only one stage&amp;rsquo;s data in memory at a time)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Slowest (total time is sum of all stage times)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Memory-constrained environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When to use&lt;/strong&gt;: When running on systems with limited RAM&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="3-batch"&gt;3. Batch&lt;a class="anchor" href="#3-batch"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Batch 1 of IPs] → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
[Batch 2 of IPs] → [ICMP Scan] → [TCP Scan] → [HTTP Scan] → Results
...&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How it works&lt;/strong&gt;: IPs are divided into batches; each batch goes through all stages before the next batch starts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory usage&lt;/strong&gt;: Moderate (holds one batch&amp;rsquo;s data per stage)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Moderate (better than sequential, worse than streaming)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Balancing memory and performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When to use&lt;/strong&gt;: When you want to limit memory spikes while maintaining decent throughput&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuring-the-pipeline"&gt;Configuring the Pipeline&lt;a class="anchor" href="#configuring-the-pipeline"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The pipeline mode is set in &lt;a href="https://MohsenBg.github.io/bgscan/docs/settings/general/"&gt;&lt;code&gt;general_settings.toml&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>IP Files</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/ip-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/ip-files/</guid><description>&lt;h1 id="ip-files"&gt;IP Files&lt;a class="anchor" href="#ip-files"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Scanners read target addresses from IP list files. Before a list can be used for scanning it must be imported through the TUI, which validates and converts it into bgscan&amp;rsquo;s internal format.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="preparing-a-file-to-import"&gt;Preparing a File to Import&lt;a class="anchor" href="#preparing-a-file-to-import"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The file you import must be a plain &lt;code&gt;.txt&lt;/code&gt; file with &lt;strong&gt;one entry per line&lt;/strong&gt;. Only &lt;strong&gt;IPv4&lt;/strong&gt; is supported — IPv6 addresses and prefixes are not accepted and will be skipped on import.&lt;/p&gt;</description></item><item><title>Logs</title><link>https://MohsenBg.github.io/bgscan/docs/logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/logs/</guid><description>&lt;h1 id="logs"&gt;Logs&lt;a class="anchor" href="#logs"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan maintains three separate log streams, each covering a different layer of the application. You can view any of them live from inside the TUI.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Main Menu → Logs&lt;/strong&gt; to open the log menu.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="log-categories"&gt;Log Categories&lt;a class="anchor" href="#log-categories"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Key&lt;/th&gt;
					&lt;th&gt;Category&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Core Logs&lt;/td&gt;
					&lt;td&gt;Scan engine activity — IP probing, file I/O, result writing, and internal errors from the scanner core&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;UI Logs&lt;/td&gt;
					&lt;td&gt;Interface-layer events — component lifecycle, file operations triggered from the TUI, and UI-level errors&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Debug Logs&lt;/td&gt;
					&lt;td&gt;Low-level diagnostic output — detailed internal state, data dumps, and verbose error traces for troubleshooting&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Press the corresponding key to open that log&amp;rsquo;s viewer.&lt;/p&gt;</description></item><item><title>Overview</title><link>https://MohsenBg.github.io/bgscan/docs/getting-started/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/getting-started/quick-start/</guid><description>&lt;h1 id="getting-started-with-bgscan"&gt;Getting Started with bgscan&lt;a class="anchor" href="#getting-started-with-bgscan"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Welcome to &lt;strong&gt;bgscan&lt;/strong&gt;! This guide gives you a quick overview of what you&amp;rsquo;ll see after installation and how to run your first scan.&lt;/p&gt;
&lt;h2 id="launching-bgscan"&gt;Launching bgscan&lt;a class="anchor" href="#launching-bgscan"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Navigate to the installation folder and run the application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Double-click &lt;code&gt;bgscan.exe&lt;/code&gt; or run &lt;code&gt;.\bgscan.exe&lt;/code&gt; in PowerShell&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux/macOS/Termux:&lt;/strong&gt; Run &lt;code&gt;./bgscan&lt;/code&gt; in your terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="main-menu-overview"&gt;Main Menu Overview&lt;a class="anchor" href="#main-menu-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you launch bgscan, you&amp;rsquo;ll see the main menu with the following options:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Option&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Run Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Start a new network scan&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;IP Files&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Manage and select IP list files for scanning&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Result Files&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;View and manage saved scan results&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Configure scan parameters and preferences&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Xray Outbounds&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Manage Xray proxy configurations&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Logs&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;View application and scan logs&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="navigation-controls"&gt;Navigation Controls&lt;a class="anchor" href="#navigation-controls"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use these keyboard shortcuts to navigate:&lt;/p&gt;</description></item><item><title>Result Writer Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/writer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/writer/</guid><description>&lt;h1 id="result-writer-settings"&gt;Result Writer Settings&lt;a class="anchor" href="#result-writer-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;General Settings&lt;/strong&gt; tab 2 in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/writer_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls buffering and how often results are flushed to disk.&lt;/p&gt;
&lt;h2 id="quick-reference"&gt;Quick Reference&lt;a class="anchor" href="#quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;merge_flush_interval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Interval (in milliseconds) for merging delta results into the main result file.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;chan_size&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;4096&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Capacity of the internal channel used by scanner workers to send IP scan results to the writer goroutine.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;batch_size&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;4096&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Initial capacity of the in-memory batch used to accumulate IP scan results before flushing them to disk.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="merge-flush-interval"&gt;Merge Flush Interval&lt;a class="anchor" href="#merge-flush-interval"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Controls how frequently (in milliseconds) partial scan results are committed to disk. Lower values increase disk I/O but reduce memory usage. Higher values reduce disk I/O but increase memory usage.&lt;/p&gt;</description></item><item><title>UI</title><link>https://MohsenBg.github.io/bgscan/docs/developer/ui/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/developer/ui/</guid><description>&lt;h1 id="ui"&gt;UI&lt;a class="anchor" href="#ui"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;bgscan&amp;rsquo;s terminal UI is built on &lt;a href="https://github.com/charmbracelet/bubbletea"&gt;BubbleTea&lt;/a&gt; (the Elvish v2 fork at &lt;code&gt;charm.land/bubbletea/v2&lt;/code&gt;) and &lt;a href="https://github.com/charmbracelet/lipgloss"&gt;Lipgloss&lt;/a&gt; for styling. The architecture is a component tree with an overlay dialog system and a centralized layout manager.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="package-map"&gt;Package map&lt;a class="anchor" href="#package-map"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Package&lt;/th&gt;
					&lt;th&gt;Responsibility&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/main/app&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Root BubbleTea model. Manages layout, header/body/footer, and overlay dialog stack.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/main/header&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Top bar — app title and branding.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/main/body&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Central content area — holds a component stack (main menu → sub-screens).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/main/footer&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Status bar — app version, current screen name, goroutine count, memory usage.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/components/basic&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Reusable widgets: confirm, crud, input, inspector, logview, menu, notice, picker, progress, table, tabs.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/components/inspector&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Per-protocol settings forms (DNS, general, HTTP, ICMP, TCP, Xray).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/components/menus&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Screen-level menus: entry (main), logs, outbound, scantype, settings, targetsource.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/components/tables&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Data tables: iplist, ipviewer, outbounds, resultlist.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/components/scanner&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Live scan view — tabbed progress bars + result tables per stage.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/shared&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Shared infrastructure: layout, dialog, env (keys/modes), component interface, validation.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ui/theme&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Dark/light/auto color palettes + huh form theme adapter.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="component-interface"&gt;Component interface&lt;a class="anchor" href="#component-interface"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every screen, widget, and dialog implements &lt;code&gt;ui.shared.ui.Component&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>ICMP Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/icmp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/icmp/</guid><description>&lt;h1 id="icmp-settings"&gt;ICMP Settings&lt;a class="anchor" href="#icmp-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;ICMP Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/icmp_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the ICMP probe tuning.&lt;/p&gt;
&lt;h2 id="quick-reference"&gt;Quick Reference&lt;a class="anchor" href="#quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration (in milliseconds) to wait for an ICMP echo reply. Targets failing to respond within this window are considered unreachable.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;tries&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The maximum number of retry attempts per target to mitigate packet loss. Higher values improve reliability but increase total scan duration.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;workers&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The number of concurrent workers sending ICMP echo requests. Higher values increase scan speed at the cost of greater CPU and network utilization.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;prefix_output&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;icmp_&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The filename prefix applied to all output files generated by this module. Useful for distinguishing results when running multiple scans simultaneously.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="timeout"&gt;Timeout&lt;a class="anchor" href="#timeout"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;timeout = &lt;span style="color:#ff9f43"&gt;2000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maximum duration (in milliseconds) to wait for an ICMP echo reply. Targets failing to respond within this window are considered unreachable.&lt;/p&gt;</description></item><item><title>Result Files</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/result-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/result-files/</guid><description>&lt;h1 id="result-files"&gt;Result Files&lt;a class="anchor" href="#result-files"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;After a scan completes, bgscan writes the discovered IPs and their measurements to result files. These files are organized by created time and can be browsed, viewed, renamed, or deleted from the TUI.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="viewing-result-files"&gt;Viewing Result Files&lt;a class="anchor" href="#viewing-result-files"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Main Menu → Result Files&lt;/strong&gt; to open the result file browser.&lt;/p&gt;
&lt;p&gt;The table lists every result file across all scan types, sorted newest-first, and shows:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Column&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;File Name&lt;/td&gt;
					&lt;td&gt;The result file name (without &lt;code&gt;.csv&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Created Time&lt;/td&gt;
					&lt;td&gt;File creation or last modification timestamp&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Type&lt;/td&gt;
					&lt;td&gt;The scan engine that produced the file (&lt;code&gt;icmp&lt;/code&gt;, &lt;code&gt;tcp&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, etc.)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Size&lt;/td&gt;
					&lt;td&gt;File size on disk&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two keyboard actions are available:&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://MohsenBg.github.io/bgscan/docs/developer/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/developer/contributing/</guid><description>&lt;h1 id="contributing-guide"&gt;Contributing Guide&lt;a class="anchor" href="#contributing-guide"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Thank you for your interest in contributing to &lt;strong&gt;bgscan&lt;/strong&gt;! Every contribution is appreciated, whether it&amp;rsquo;s fixing bugs, improving documentation, or implementing new features.&lt;/p&gt;
&lt;h2 id="before-you-start"&gt;Before You Start&lt;a class="anchor" href="#before-you-start"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Search existing Issues before opening a new one.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re planning a large feature or major change, please open an Issue first to discuss it.&lt;/li&gt;
&lt;li&gt;Keep pull requests focused on a single change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="branch-strategy"&gt;Branch Strategy&lt;a class="anchor" href="#branch-strategy"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Please &lt;strong&gt;do not commit directly to the &lt;code&gt;main&lt;/code&gt; branch&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>TCP Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/tcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/tcp/</guid><description>&lt;h1 id="tcp-settings"&gt;TCP Settings&lt;a class="anchor" href="#tcp-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;TCP Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/tcp_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the TCP port scan configuration, including the target port, timeout, number of workers, retry attempts, and output prefix.&lt;/p&gt;
&lt;h2 id="port"&gt;Port&lt;a class="anchor" href="#port"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;port = &lt;span style="color:#ff9f43"&gt;80&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The target TCP port to probe on each IP address. The scanner attempts to establish a TCP connection to this port.
Common examples: 80 (HTTP), 443 (HTTPS), 22 (SSH).&lt;/p&gt;</description></item><item><title>Xray Outbounds</title><link>https://MohsenBg.github.io/bgscan/docs/scanner/xray-outbound/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/scanner/xray-outbound/</guid><description>&lt;h1 id="xray-outbounds"&gt;Xray Outbounds&lt;a class="anchor" href="#xray-outbounds"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;An outbound template tells bgscan how to route traffic through your proxy server during an Xray scan. Each template is a JSON file stored in &lt;code&gt;assets/xray/outbounds/&lt;/code&gt; that describes the protocol, transport, and security settings for one proxy configuration.&lt;/p&gt;
&lt;p&gt;Before running an Xray scan you must have at least one outbound template configured.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Main Menu → Xray → Outbounds&lt;/strong&gt; to open the outbound manager.&lt;/p&gt;
&lt;hr&gt;

&lt;img src="https://MohsenBg.github.io/bgscan/bgscan-outbound-menu.webp" alt="bgscan outbound menu"&gt;

&lt;h2 id="the-outbound-table"&gt;The Outbound Table&lt;a class="anchor" href="#the-outbound-table"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The table lists all configured outbound templates, sorted newest-first, and shows:&lt;/p&gt;</description></item><item><title>HTTP Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/http/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/http/</guid><description>&lt;h1 id="http-settings"&gt;HTTP Settings&lt;a class="anchor" href="#http-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;HTTP Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/http_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the HTTP/HTTPS/HTTP3 probe configuration, including target host, port, protocol, TLS settings, HTTP version, timeout, and accepted status codes.&lt;/p&gt;
&lt;h2 id="workers"&gt;Workers&lt;a class="anchor" href="#workers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;workers = &lt;span style="color:#ff9f43"&gt;50&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The number of concurrent workers performing HTTP requests.
Higher values increase scan speed at the cost of greater CPU and network utilization.&lt;/p&gt;</description></item><item><title>DNS Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/dns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/dns/</guid><description>&lt;h1 id="dns-settings"&gt;DNS Settings&lt;a class="anchor" href="#dns-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;DNS Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/dns_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the DNS resolver, DNSTT, and SlipStream scanning modules.&lt;/p&gt;
&lt;h2 id="quick-reference"&gt;Quick Reference&lt;a class="anchor" href="#quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;workers&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;500&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The number of concurrent workers sending DNS queries.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;protocol&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;udp&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The transport protocol used for DNS queries.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;domain&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The target domain name used as the primary query target for DNS resolution.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;port&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;53&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The target port used for DNS queries (typically 53).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;check_types&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[&amp;quot;txt&amp;quot;]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The DNS record types to query (e.g., A, AAAA, TXT, MX).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration in milliseconds to wait for a DNS response.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;tries&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The maximum number of network retry attempts per target to mitigate packet loss.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;accepted_rcodes&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[&amp;quot;noerror&amp;quot;, &amp;quot;nxdomain&amp;quot;]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The DNS response codes that are treated as successful (&amp;quot;alive&amp;quot;) results.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;check_dpi&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Enables the anti-hijacking pre-check.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dpi_timeout&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;500&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration in milliseconds to wait for the DPI pre-check response.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dpi_tries&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The maximum number of network retry attempts for the DPI pre-check.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;random_subdomain&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Generates a random subdomain for each query to bypass resolver caches.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;prefix_output&lt;/code&gt; (resolver)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;dns_&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The filename prefix applied to all output files generated by this module.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt; (dnstt)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Enables or disables the DNSTT probe phase.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;workers&lt;/code&gt; (dnstt)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The number of concurrent workers performing DNSTT handshakes.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;domain&lt;/code&gt; (dnstt)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The authoritative DNS zone delegated to your DNSTT server.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt; (dnstt)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;10000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration in milliseconds to wait for a complete DNSTT handshake.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;prefix_output&lt;/code&gt; (dnstt)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;dnstt_&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The filename prefix applied to all output files generated by the DNSTT module.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;enabled&lt;/code&gt; (slip_stream)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Enables or disables the SlipStream probe phase.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;workers&lt;/code&gt; (slip_stream)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The number of concurrent workers performing SlipStream probes.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;domain&lt;/code&gt; (slip_stream)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The authoritative DNS zone used by the SlipStream server.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt; (slip_stream)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;8000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration in milliseconds to wait for a complete SlipStream probe.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;prefix_output&lt;/code&gt; (slip_stream)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;slipstream_&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The filename prefix applied to all output files generated by the SlipStream module.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="resolver-settings"&gt;Resolver Settings&lt;a class="anchor" href="#resolver-settings"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The resolver section configures the bulk DNS resolver scanner that tests public DNS resolvers.&lt;/p&gt;</description></item><item><title>Xray Settings</title><link>https://MohsenBg.github.io/bgscan/docs/settings/xray/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://MohsenBg.github.io/bgscan/docs/settings/xray/</guid><description>&lt;h1 id="xray-settings"&gt;Xray Settings&lt;a class="anchor" href="#xray-settings"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; You can change these settings directly in the bgscan application instead of editing the TOML file manually.&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Xray Settings&lt;/strong&gt; in the main menu to configure these options interactively using the TUI inspector.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Configuration file: &lt;code&gt;settings/xray_settings.toml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This file controls the Xray outbound validation module, which tests connectivity and bandwidth to remote servers.&lt;/p&gt;
&lt;h2 id="quick-reference"&gt;Quick Reference&lt;a class="anchor" href="#quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Setting&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;6000&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum duration (in milliseconds) to wait for an Xray connectivity test to complete.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;workers&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Number of concurrent workers performing Xray connectivity tests.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;connectivity_test_type&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Type of connectivity test: 0 = connectivity only, 1 = download only, 2 = upload only, 3 = both download and upload.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;download_speed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Target download data size (in KB) for the test (used when test type includes download).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;upload_speed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Target upload data size (in KB) for the test (used when test type includes upload).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;prefix_output&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;xray_&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Filename prefix applied to all output files generated by this module.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;pre_scan_type&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;tcp&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Pre-scan connectivity test to perform before running Xray: &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;icmp&lt;/code&gt;, &lt;code&gt;tcp&lt;/code&gt;, or &lt;code&gt;http&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="timeout"&gt;Timeout&lt;a class="anchor" href="#timeout"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;timeout = &lt;span style="color:#ff9f43"&gt;6000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maximum duration (in milliseconds) to wait for an Xray connectivity test to complete. Tests failing to respond within this window are considered failed.&lt;/p&gt;</description></item></channel></rss>