# benhamadaaridj/netscan architecture

> Architecture diagram of the GitHub repository benhamadaaridj/netscan, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/benhamadaaridj/netscan
- Repository: https://github.com/benhamadaaridj/netscan

## Overview

NetScan is a Flask network-monitoring application. Users authenticate, request single-host or range scans, then review stored results, compare scans, and export PDF reports; scheduled scans repeat this process and can generate change and critical-port alerts. The graph also includes email settings/notifications and the persistent domain state. Some route and template excerpts were incomplete, so uncertain wiring—particularly email-management routes—is left out or marked optional.

Main entry points: [`app/routes.py`](https://github.com/benhamadaaridj/netscan/blob/main/app/routes.py) (Flask routes), [`app/models.py`](https://github.com/benhamadaaridj/netscan/blob/main/app/models.py) (Domain models), [`app/scheduler.py`](https://github.com/benhamadaaridj/netscan/blob/main/app/scheduler.py) (Scan scheduler), [`app/scanner.py`](https://github.com/benhamadaaridj/netscan/blob/main/app/scanner.py) (Scan engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_routes["Flask routes<br/>[routes.py]"]
  node_templates["Web pages"]
  node_app["App setup<br/>[__init__.py]"]
end

subgraph group_scan["Scanning and analysis"]
  node_scanner["Scan engine<br/>[scanner.py]"]
  node_nmap["Nmap scanner"]
end

subgraph group_ops["Scheduling and alerts"]
  node_scheduler["Scan scheduler<br/>[scheduler.py]"]
  node_email["Email sender<br/>[email_sender.py]"]
  node_smtp["SMTP service"]
end

subgraph group_data["Persistence and reports"]
  node_models[("Domain models<br/>[models.py]")]
  node_pdf["PDF exporter<br/>[pdf_exporter.py]"]
  node_pdf_files["PDF reports"]
end

node_user(("Administrator"))

node_user -->|"submits requests"| node_routes
node_routes -->|"returns pages and results"| node_user
node_routes -->|"renders pages"| node_templates
node_app -->|"registers blueprints"| node_routes
node_routes -->|"reads and updates"| node_models
node_routes -->|"starts scans and comparisons"| node_scanner
node_scanner -->|"scans targets"| node_nmap
node_scanner -->|"stores scan data"| node_models
node_routes -->|"requests report export"| node_pdf
node_pdf -->|"reads scan ports"| node_models
node_pdf -->|"writes report"| node_pdf_files
node_app -->|"starts background loop"| node_scheduler
node_scheduler -->|"loads schedules and updates records"| node_models
node_scheduler -->|"runs scheduled scans"| node_scanner
node_scheduler -->|"sends critical alerts"| node_email
node_email -->|"reads email settings"| node_models
node_email -->|"sends messages"| node_smtp

click node_routes "https://github.com/benhamadaaridj/netscan/blob/main/app/routes.py"
click node_templates "https://github.com/benhamadaaridj/netscan/tree/main/templates"
click node_app "https://github.com/benhamadaaridj/netscan/blob/main/app/__init__.py"
click node_scanner "https://github.com/benhamadaaridj/netscan/blob/main/app/scanner.py"
click node_scheduler "https://github.com/benhamadaaridj/netscan/blob/main/app/scheduler.py"
click node_email "https://github.com/benhamadaaridj/netscan/blob/main/app/email_sender.py"
click node_models "https://github.com/benhamadaaridj/netscan/blob/main/app/models.py"
click node_pdf "https://github.com/benhamadaaridj/netscan/blob/main/app/pdf_exporter.py"
click node_pdf_files "https://github.com/benhamadaaridj/netscan/tree/main/downloads"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_routes,node_templates,node_app toneBlue
class node_scanner,node_nmap toneAmber
class node_scheduler,node_email,node_smtp toneMint
class node_models,node_pdf,node_pdf_files toneRose
class node_user toneIndigo
```

## Components

### Web interface

- [Flask routes](https://github.com/benhamadaaridj/netscan/blob/main/app/routes.py): `app/routes.py`
- [Web pages](https://github.com/benhamadaaridj/netscan/tree/main/templates): `templates`
- [App setup](https://github.com/benhamadaaridj/netscan/blob/main/app/__init__.py): `app/__init__.py`

### Scanning and analysis

- [Scan engine](https://github.com/benhamadaaridj/netscan/blob/main/app/scanner.py): `app/scanner.py`
- **Nmap scanner**

### Scheduling and alerts

- [Scan scheduler](https://github.com/benhamadaaridj/netscan/blob/main/app/scheduler.py): `app/scheduler.py`
- [Email sender](https://github.com/benhamadaaridj/netscan/blob/main/app/email_sender.py): `app/email_sender.py`
- **SMTP service**

### Persistence and reports

- [Domain models](https://github.com/benhamadaaridj/netscan/blob/main/app/models.py): `app/models.py`
- [PDF exporter](https://github.com/benhamadaaridj/netscan/blob/main/app/pdf_exporter.py): `app/pdf_exporter.py`
- [PDF reports](https://github.com/benhamadaaridj/netscan/tree/main/downloads): `downloads`

### Other components

- **Administrator**

## Connections

- Administrator → Flask routes: submits requests
- Flask routes → Administrator: returns pages and results
- Flask routes → Web pages: renders pages
- App setup → Flask routes: registers blueprints
- Flask routes → Domain models: reads and updates
- Flask routes → Scan engine: starts scans and comparisons
- Scan engine → Nmap scanner: scans targets
- Scan engine → Domain models: stores scan data
- Flask routes → PDF exporter: requests report export
- PDF exporter → Domain models: reads scan ports
- PDF exporter → PDF reports: writes report
- App setup → Scan scheduler: starts background loop
- Scan scheduler → Domain models: loads schedules and updates records
- Scan scheduler → Scan engine: runs scheduled scans
- Scan scheduler → Email sender: sends critical alerts
- Email sender → Domain models: reads email settings
- Email sender → SMTP service: sends messages
