BeeScan is a modular platform for comprehensive IT infrastructure security auditing. It supports integration of external tools as plugins, automated result collection and structuring, multi-format report generation, and flexible centralized configuration. The architecture enables analysis of networks, web applications, DNS, and APIs, and is scalable for any DevSecOps, penetration testing, or monitoring tasks.
- Plugin support β 5 tools integrated.
- Plug-and-Play architecture β each tool is a separate parser module.
- PostgreSQL output and report rendering from the database.
- Tool profiles β choose scan level per tool.
- Report generation: TERMINAL, HTML, PDF.
- Docker isolation β separate containers for core and database.
- Logging β separate logs for host and container.
- Multilingual support β language switching via
config.jsonand new languages vialang.json.
- Pentests and penetration testing
- Infrastructure and web service audits
- Government and corporate network security
- DevSecOps and CI/CD
- Python β main development language
- PostgreSQL β database
- Docker β environment containerization
- Jinja2 β report templates
- Rich β terminal tables
- WeasyPrint β PDF generation
- Plugins (
plugins/*.py) β wrapper modules for CLI tools (e.g.,nmap,nikto). Each plugin implements the following functions:scan()β runs the scanner and saves the path to the result file (.xml,.json);parse()β parses the results;merge_entries()β merges data by IP and Domain intosource: "Both";get_column_order()andget_wide_fields()β configure table column order and visual formatting.
- Runner (
plugin_runner.py) β launches plugins and saves the paths to their results in a temporary JSON (/tmp/temp_files_*.json) without storing the actual file content. - Collector (
collector.py) β loads file paths, callsparse()/merge_entries(), filters out uninformative entries, and stores the result in theresultstable. - Database (PostgreSQL) β centralized repository for all results, all data is converted to a single schema and stored in tables.
- Report Generator (
report_generator.py) β retrieves data from the database, groups it by category, and visualizes it as:- terminal report,
- HTML,
- PDF.
- Configuration Module (
config/config.json) β defines scanning targets (target_ip,target_domain), active plugins, scan levels, report formats, theme (light/dark), and behavior (open_report,clear_db, etc.). - Startup Wrapper (
start.py) β single entry point that orchestrates Docker environment setup, database launch, scanner execution, data collection, and report generation with progress indicators. - Docker Environment β isolated and fully self-contained environment:
beescan_baseβ container with all scanners and logic,postgresβ separate container for the database,beescan_networkβ bridge network connecting the components.
beescan/
βββ config/ # Configuration files
β βββ plugins/
β β βββ nikto.json # Profile and levels for Nikto
β β βββ nmap.json # Profile and levels for Nmap
β βββ config.json # Main BeeScan configuration (targets, plugins, etc.)
β βββ start.py # Entry point, CLI launcher for the system
βββ core/ # Core system
β βββ collector.py # Parser and integrator into the database
β βββ logger_container.py # Container-level logger (core)
β βββ logger_host.py # Host-level logger (core)
β βββ logger_plugin.py # Logger for individual plugins
β βββ orchestrator.py # Manages dependencies and launch order
β βββ plugin_runner.py # Launches all plugins and records temp files
β βββ registry.py # Works with the registry table (target queue)
β βββ report_generator.py # Report generator (terminal, HTML, PDF)
β βββ severity.py # Severity levels and classification
βββ db/ # Database configuration
β βββ compose.yaml # Docker Compose for PostgreSQL
β βββ Dockerfile # Dockerfile (optional)
β βββ init.sql # Database schema initialization
β βββ populate_db.py # Script to insert test data
βββ docker/ # Docker setup
β βββ Dockerfile.base # Dockerfile for beescan-base (scanners, Python)
β βββ install_plugins.py # Script to install CLI tools in the container
βββ logs/ # Logging
β βββ container.log # Container log
β βββ host.log # Host log
β βββ nikto.log # Nikto plugin log
β βββ nmap.log # Nmap plugin log
βββ plugins/ # Scanner plugins/parsers
β βββ dig.py # Plugin for dig
β βββ nikto.py # Plugin for Nikto
β βββ nmap.py # Plugin for Nmap
β βββ nuclei.py # Plugin for nuclei
βββ reports/ # Generated reports
β βββ *.html
β βββ *.json
β βββ *.pdf
βββ templates/ # Jinja2 report templates
β βββ css/ # Stylesheets
β βββ plugins/ # Plugin-specific HTML subtemplates
β β βββ nmap.html.j2
β βββ report.html.j2 # Main HTML template
βββ requirements.txt # Python requirements
βββ start.sh # Bash launcher for the full system
βββ version.txt # Release version
- The system is started via
start.sh. The bash wrapper checks the environment, launchesstart.py, and runs the orchestration pipeline. - Docker and the
beescan_networknetwork are checked/created. - Containers are started:
- PostgreSQL (
beescan_postgres) - beescan-base (core logic + scanners)
- PostgreSQL (
plugin_runner.pyis launched for asynchronous scanning of targets.- Paths to scan results are saved in a temporary file
/tmp/temp_files_*.json. collector.pyis launched to parse, normalize, filter, and write results to the DB (strictly to the snapshot schema).- Reports are generated:
terminal,html,pdfβ all based on DB data viareport_generator.py.
- Plugin activity is determined via
config.json. - The
scan()function is called asynchronously:- Launches the scanner (e.g., nmap) with the required profile/arguments.
- Saves results (XML, JSON, STDOUT) to temporary files.
- Temporary files are not read directly; only their paths are saved to a temporary JSON.
- Only the collector operates with the results from this point.
- The collector connects to the database.
- Loads the plugin parser from
plugins/*.py. - Processes all temporary files (
temp_files_*.json):- Calls
parse()to parse results, - Calls
merge_entries()to unify duplicates, - Filters out non-informative records.
- Calls
- All valid entries are distributed across tables:
- hosts β unique IPs/FQDNs and OS info.
- services β unique services (port, protocol, CPE, product, etc.).
- vuln β result for each service finding (always includes severity, description, references, etc.).
- evidence β if needed, stores original logs (e.g., XML or stdout).
- registry β dynamic index of targets for passive/follow-up plugins.
- Any plugin result is always mapped to universal fields:
host,service,port,protocol,severity,description,evidence,references,source. - If a plugin returns something specific, it goes into
meta,evidence, or an extended description field. - Raw data (
evidence) is optional: e.g., for nmap, original XML/STDOUT can be saved in evidence; for nuclei β the JSON report, etc.
- Fresh data is extracted from the snapshot: tables
hosts,services,vuln,evidence,registry. - Data is automatically grouped by category and active plugins according to
config.json(categoryfor each plugin). - For each plugin, the following are queried:
- column order (
get_column_order()) - wide fields (
get_wide_fields()) - view (
get_view_rows())
- column order (
- Generates reports in the selected formats:
- Terminal report (rich tables, full plugin output)
- HTML report (via the universal Jinja2 template
report.html.j2, adapting to each plugin's structure) - PDF report (generated from HTML via WeasyPrint)
- Theme selection is supported (
"light"or"dark"). - All reports are built strictly from the current state of the DB β no intermediate JSON/logs are used.
- The
nmapmodule is enabled, a scan profile is set (easy/middle/hard). - For each target (ip/domain/network), nmap is run with the respective profile (arguments, ports, scripts).
- Each result is saved separately, then collected, parsed, and normalized via plugin functions (
parse(),merge_entries(),get_view_rows()). - All data is strictly stored in the snapshot:
- services (
services) - hosts (
hosts) - individual findings (
vuln) - if needed, raw XML (
evidence)
- services (
- All results are visible in the reports:
- Terminal β aggregated output for all services and severity levels.
- HTML/PDF β tabular, with sorting, filtering by categories/plugins, scan duration, and theme support.
git clone https://github.com/beesyst/beescan.git
cd beescan
bash start.shYou will be prompted to select a language during setup.
All parameters are set in config.json:
| Parameter | Default value | What true/value does |
What false/other value does |
|---|---|---|---|
target_ip |
"1.1.1.1" |
Scans the specified IP address | β |
target_domain |
"" |
Scans the specified domain | β |
target_network |
"" |
Scans the specified network range (e.g., 1.1.1.0/24) |
β |
target_api |
"" |
For integration with external API (optional) | β |
report_formats |
["terminal", "html"] |
Generates the selected report formats | β |
open_report |
true |
Automatically opens HTML/PDF report in browser | Does not open reports in browser |
clear_logs |
true |
Clears logs before each run | Logs are accumulated |
clear_reports |
true |
Deletes old reports before each run | Old reports are preserved |
clear_db |
true |
Clears all database tables before scanning | Old data in the database is preserved |
report_theme |
"dark" |
Uses dark theme for HTML and PDF reports | "light" β uses light report theme |
plugins |
see section below | List of active plugins and their parameters | β |
| Todo (5) | In Progress (1) | Done (28) |
|---|---|---|
| PDF reports | Summary of vulnerabilities by severity | Expose Raw Evidence and Expandable Details for Each Finding in HTML Report |
| Proxy integration (Tor/Chain) | Β | Normalize database structure and remove legacy results table |
| Integrate dig | Β | Nikto: Auto-select web ports from Nmap scan results |
| Integrate nuclei | Β | Dynamic plugin chaining: automatic orchestration based on scan dependencies |
| Multi-language support (RU/EN) | Β | Implement target registry for cross-plugin orchestration |
| Β | Β | Strict report and plugin order in output (categories + plugins) |
| Β | Β | Vulnerability severity classification |
| Β | Β | Add network target support to nmap plugin configuration |
| Β | Β | Add require and enabled fields to Nmap |
| Β | Β | Auto-update Kanban board in README from GitHub Projects |
- USDT (TRC20)/USDC (TRC20):
TUQj3sguQjmKFJEMotyb3kERVgnfvhzG7o - SOL (Solana):
6VA9oJbkszteTZJbH6mmLioKTSq4r4E3N1bsoPaxQgr4 - XRP (XRP):
rDkEZehHFqSjiGdBHsseR64fCcRXuJbgfr
π‘ Licensed for non-commercial use only. See LICENSE for details.