# uwe-cyber/goibhniuwe architecture

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

- Interactive diagram: https://gitdiagram.com/uwe-cyber/goibhniuwe
- Repository: https://github.com/uwe-cyber/goibhniuwe

## Overview

GoibhniUWE is a Django-operated, Docker-based cyber range. Users choose vulnerable or custom environments, configure network topology and auxiliary services, then deploy an attack scenario for live monitoring or later analysis. The sampled views show scenario state and Docker deployment; the README documents Vulhub and custom-container selection, topology editing, and attack/traffic capabilities. Monitoring and capture components are represented from README and container specifications; unsampled details and links are omitted where their wiring is not evidenced.

Main entry points: [`GUI/GUI/views.py`](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py) (Range views), [`GUI/DjangoGUI/urls.py`](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/DjangoGUI/urls.py) (Django routes), [`GUI/GUI/forms.py`](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/forms.py) (GUI forms), [`GUI/GUI/custom_containers.py`](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/custom_containers.py) (Container definitions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Range interface"]
  node_routes["Django routes<br/>[urls.py]"]
  node_views["Range views<br/>[views.py]"]
  node_forms["GUI forms<br/>[forms.py]"]
  node_models[("Question model<br/>[models.py]")]
end

subgraph group_scenario["Scenario setup"]
  node_catalog["Vulnerability catalog<br/>[views.py]"]
  node_scenario_state["Scenario state<br/>[views.py]"]
  node_container_specs["Container definitions"]
  node_topology["Network topology<br/>[views.py]"]
end

subgraph group_runtime["Range runtime"]
  node_docker["Docker Engine"]
  node_vulnerable_env["Vulhub environments"]
  node_attackbox["Attackbox"]
  node_auto_attack["Automated attacks<br/>[auto_attack.py]"]
  node_traffic["Traffic generator"]
end

subgraph group_observe["Monitoring and analysis"]
  node_suricata["Suricata IDS<br/>[docker-compose.yml]"]
  node_capture["Traffic capture<br/>[packetyGrabber.py]"]
  node_beats["Filebeat and Packetbeat<br/>[docker-compose.yml]"]
  node_efk[("Elasticsearch and Kibana<br/>[docker-compose.yml]")]
  node_logs[("Captured logs")]
end

node_operator(("Range operator"))

node_operator -->|"uses"| node_routes
node_routes -->|"routes requests"| node_views
node_views -->|"lists environments"| node_catalog
node_views -->|"updates scenario"| node_scenario_state
node_views -->|"uses definitions"| node_container_specs
node_views -->|"builds topology"| node_topology
node_views -->|"creates containers"| node_docker
node_views -->|"uses forms"| node_forms
node_forms -->|"defines model form"| node_models
node_operator -->|"selects environment"| node_vulnerable_env
node_container_specs -->|"configures services"| node_docker
node_docker -->|"runs containers"| node_vulnerable_env
node_docker -->|"runs container"| node_attackbox
node_docker -->|"runs service"| node_suricata
node_docker -->|"runs services"| node_beats
node_docker -->|"runs services"| node_efk
node_auto_attack -.->|"probes target"| node_vulnerable_env
node_traffic -.->|"generates traffic"| node_vulnerable_env
node_suricata -->|"writes alerts"| node_logs
node_beats -->|"ships telemetry"| node_efk
node_capture -.->|"captures traffic"| node_logs

click node_routes "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/DjangoGUI/urls.py"
click node_views "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py"
click node_forms "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/forms.py"
click node_models "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/models.py"
click node_catalog "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py"
click node_scenario_state "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py"
click node_container_specs "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/custom_containers.py"
click node_topology "https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py"
click node_auto_attack "https://github.com/uwe-cyber/goibhniuwe/blob/main/exploit_material/automated_attack/auto_attack.py"
click node_traffic "https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Scripts/traffic_generator.sh"
click node_suricata "https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml"
click node_capture "https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Scripts/packetyGrabber.py"
click node_beats "https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml"
click node_efk "https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml"
click node_logs "https://github.com/uwe-cyber/goibhniuwe/tree/main/resource_files/logfiles"

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_views,node_forms,node_models toneBlue
class node_catalog,node_scenario_state,node_container_specs,node_topology toneAmber
class node_docker,node_vulnerable_env,node_attackbox,node_auto_attack,node_traffic toneMint
class node_suricata,node_capture,node_beats,node_efk,node_logs toneRose
class node_operator toneIndigo
```

## Components

### Range interface

- [Django routes](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/DjangoGUI/urls.py): `GUI/DjangoGUI/urls.py`
- [Range views](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py): `GUI/GUI/views.py`
- [GUI forms](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/forms.py): `GUI/GUI/forms.py`
- [Question model](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/models.py): `GUI/GUI/models.py`

### Scenario setup

- [Vulnerability catalog](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py): `GUI/GUI/views.py`
- [Scenario state](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py): `GUI/GUI/views.py`
- [Container definitions](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/custom_containers.py): `GUI/GUI/custom_containers.py`
- [Network topology](https://github.com/uwe-cyber/goibhniuwe/blob/main/GUI/GUI/views.py): `GUI/GUI/views.py`

### Range runtime

- **Docker Engine**
- **Vulhub environments**
- **Attackbox**
- [Automated attacks](https://github.com/uwe-cyber/goibhniuwe/blob/main/exploit_material/automated_attack/auto_attack.py): `exploit_material/automated_attack/auto_attack.py`
- [Traffic generator](https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Scripts/traffic_generator.sh): `resource_files/Scripts/traffic_generator.sh`

### Monitoring and analysis

- [Suricata IDS](https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml): `resource_files/Custom_Containers/required_containers/docker-compose.yml`
- [Traffic capture](https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Scripts/packetyGrabber.py): `resource_files/Scripts/packetyGrabber.py`
- [Filebeat and Packetbeat](https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml): `resource_files/Custom_Containers/required_containers/docker-compose.yml`
- [Elasticsearch and Kibana](https://github.com/uwe-cyber/goibhniuwe/blob/main/resource_files/Custom_Containers/required_containers/docker-compose.yml): `resource_files/Custom_Containers/required_containers/docker-compose.yml`
- [Captured logs](https://github.com/uwe-cyber/goibhniuwe/tree/main/resource_files/logfiles): `resource_files/logfiles`

### Other components

- **Range operator**

## Connections

- Range operator → Django routes: uses (evidence: `README.md`)
- Django routes → Range views: routes requests (evidence: `GUI/DjangoGUI/urls.py`)
- Range views → Vulnerability catalog: lists environments (evidence: `GUI/GUI/views.py`)
- Range views → Scenario state: updates scenario (evidence: `GUI/GUI/views.py`)
- Range views → Container definitions: uses definitions (evidence: `GUI/GUI/views.py`)
- Range views → Network topology: builds topology (evidence: `GUI/GUI/views.py`)
- Range views → Docker Engine: creates containers (evidence: `GUI/GUI/views.py`)
- Range views → GUI forms: uses forms (evidence: `GUI/GUI/views.py`)
- GUI forms → Question model: defines model form (evidence: `GUI/GUI/forms.py`)
- Range operator → Vulhub environments: selects environment (evidence: `README.md`)
- Container definitions → Docker Engine: configures services (evidence: `GUI/GUI/custom_containers.py`)
- Docker Engine → Vulhub environments: runs containers (evidence: `README.md`)
- Docker Engine → Attackbox: runs container
- Docker Engine → Suricata IDS: runs service
- Docker Engine → Filebeat and Packetbeat: runs services
- Docker Engine → Elasticsearch and Kibana: runs services
- Automated attacks → Vulhub environments: probes target
- Traffic generator → Vulhub environments: generates traffic (evidence: `README.md`)
- Suricata IDS → Captured logs: writes alerts
- Filebeat and Packetbeat → Elasticsearch and Kibana: ships telemetry
- Traffic capture → Captured logs: captures traffic (evidence: `README.md`)
