# ragnt/angryoxide architecture

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

- Interactive diagram: https://gitdiagram.com/ragnt/angryoxide
- Repository: https://github.com/ragnt/angryoxide

## Overview

AngryOxide is a Rust 802.11 survey and active attack tool. Its principal workflow selects an interface and channels, observes Wi-Fi frames, tracks access points and stations, applies target and whitelist scope, and runs rate-controlled collection attacks to produce validated handshake or PMKID hash material. Captures are also written to pcapng and Kismet-compatible database output, with GPS support; the interface can present live status in a terminal UI or headless mode. Several feature paths are README-backed but their wiring is not shown in the excerpts, so only documented relationships are represented.

Main entry points: [`src/main.rs`](https://github.com/ragnt/angryoxide/blob/master/src/main.rs) (Runtime coordinator), [`src/attack.rs`](https://github.com/ragnt/angryoxide/blob/master/src/attack.rs) (Attack engine), [`src/tx.rs`](https://github.com/ragnt/angryoxide/blob/master/src/tx.rs) (Frame transmission), [`src/pcapng.rs`](https://github.com/ragnt/angryoxide/blob/master/src/pcapng.rs) (PCAPNG writer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_operation["Survey and control"]
  node_main["Runtime coordinator<br/>[main.rs]"]
  node_targets["Target scope<br/>[targets.rs]"]
  node_whitelist["Protected networks<br/>[whitelist.rs]"]
  node_gps["GPS positioning<br/>[gps.rs]"]
  node_geofence["Geofence<br/>[geofence.rs]"]
end

subgraph group_attack["Attack workflow"]
  node_attack["Attack engine<br/>[attack.rs]"]
  node_auth["Handshake validation<br/>[auth.rs]"]
  node_tx["Frame transmission<br/>[tx.rs]"]
  node_rawsocks["Raw socket access<br/>[rawsocks.rs]"]
end

subgraph group_state["Network state"]
  node_devices["AP and station state<br/>[devices.rs]"]
end

subgraph group_output["Capture and output"]
  node_pcap["PCAPNG writer<br/>[pcapng.rs]"]
  node_database[("Kismet database writer<br/>[database.rs]")]
end

subgraph group_presentation["Operator interface"]
  node_status["Status log<br/>[status.rs]"]
  node_ui["Terminal UI<br/>[ui.rs]"]
  node_headless["Headless output<br/>[main.rs]"]
end

node_operator(("Operator"))
node_wifi(("Wi-Fi interface"))
node_capturefile["Capture files"]
node_kismetfile[("Kismet database file")]
node_gpsd(("GPSD service"))

node_operator -->|"configures"| node_main
node_wifi -->|"provides frames"| node_main
node_main -->|"applies scope"| node_targets
node_main -->|"excludes networks"| node_whitelist
node_main -->|"updates state"| node_devices
node_main -->|"dispatches attacks"| node_attack
node_attack -->|"requests transmission"| node_tx
node_tx -->|"uses sockets"| node_rawsocks
node_main -->|"validates handshakes"| node_auth
node_main -->|"obtains position"| node_gps
node_gpsd -.->|"supplies fixes"| node_gps
node_main -->|"checks location"| node_geofence
node_main -->|"sends frames"| node_pcap
node_main -->|"sends frames"| node_database
node_pcap -->|"writes capture"| node_capturefile
node_database -->|"writes records"| node_kismetfile
node_main -->|"records status"| node_status
node_status -->|"renders status"| node_ui
node_operator -->|"interacts"| node_ui
node_main -.->|"prints status"| node_headless

click node_main "https://github.com/ragnt/angryoxide/blob/master/src/main.rs"
click node_targets "https://github.com/ragnt/angryoxide/blob/master/src/targets.rs"
click node_whitelist "https://github.com/ragnt/angryoxide/blob/master/src/whitelist.rs"
click node_devices "https://github.com/ragnt/angryoxide/blob/master/src/devices.rs"
click node_attack "https://github.com/ragnt/angryoxide/blob/master/src/attack.rs"
click node_auth "https://github.com/ragnt/angryoxide/blob/master/src/auth.rs"
click node_tx "https://github.com/ragnt/angryoxide/blob/master/src/tx.rs"
click node_rawsocks "https://github.com/ragnt/angryoxide/blob/master/src/rawsocks.rs"
click node_gps "https://github.com/ragnt/angryoxide/blob/master/src/gps.rs"
click node_geofence "https://github.com/ragnt/angryoxide/blob/master/src/geofence.rs"
click node_pcap "https://github.com/ragnt/angryoxide/blob/master/src/pcapng.rs"
click node_database "https://github.com/ragnt/angryoxide/blob/master/src/database.rs"
click node_status "https://github.com/ragnt/angryoxide/blob/master/src/status.rs"
click node_ui "https://github.com/ragnt/angryoxide/blob/master/src/ui.rs"
click node_headless "https://github.com/ragnt/angryoxide/blob/master/src/main.rs"

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_main,node_targets,node_whitelist,node_gps,node_geofence toneBlue
class node_attack,node_auth,node_tx,node_rawsocks,node_kismetfile toneAmber
class node_devices toneMint
class node_pcap,node_database toneRose
class node_status,node_ui,node_headless,node_operator,node_wifi,node_capturefile,node_gpsd toneIndigo
```

## Components

### Survey and control

- [Runtime coordinator](https://github.com/ragnt/angryoxide/blob/master/src/main.rs): `src/main.rs`
- [Target scope](https://github.com/ragnt/angryoxide/blob/master/src/targets.rs): `src/targets.rs`
- [Protected networks](https://github.com/ragnt/angryoxide/blob/master/src/whitelist.rs): `src/whitelist.rs`
- [GPS positioning](https://github.com/ragnt/angryoxide/blob/master/src/gps.rs): `src/gps.rs`
- [Geofence](https://github.com/ragnt/angryoxide/blob/master/src/geofence.rs): `src/geofence.rs`

### Attack workflow

- [Attack engine](https://github.com/ragnt/angryoxide/blob/master/src/attack.rs): `src/attack.rs`
- [Handshake validation](https://github.com/ragnt/angryoxide/blob/master/src/auth.rs): `src/auth.rs`
- [Frame transmission](https://github.com/ragnt/angryoxide/blob/master/src/tx.rs): `src/tx.rs`
- [Raw socket access](https://github.com/ragnt/angryoxide/blob/master/src/rawsocks.rs): `src/rawsocks.rs`

### Network state

- [AP and station state](https://github.com/ragnt/angryoxide/blob/master/src/devices.rs): `src/devices.rs`

### Capture and output

- [PCAPNG writer](https://github.com/ragnt/angryoxide/blob/master/src/pcapng.rs): `src/pcapng.rs`
- [Kismet database writer](https://github.com/ragnt/angryoxide/blob/master/src/database.rs): `src/database.rs`

### Operator interface

- [Status log](https://github.com/ragnt/angryoxide/blob/master/src/status.rs): `src/status.rs`
- [Terminal UI](https://github.com/ragnt/angryoxide/blob/master/src/ui.rs): `src/ui.rs`
- [Headless output](https://github.com/ragnt/angryoxide/blob/master/src/main.rs): `src/main.rs`

### Other components

- **Operator**
- **Wi-Fi interface**
- **Capture files**
- **Kismet database file**
- **GPSD service**

## Connections

- Operator → Runtime coordinator: configures
- Wi-Fi interface → Runtime coordinator: provides frames
- Runtime coordinator → Target scope: applies scope
- Runtime coordinator → Protected networks: excludes networks
- Runtime coordinator → AP and station state: updates state
- Runtime coordinator → Attack engine: dispatches attacks
- Attack engine → Frame transmission: requests transmission
- Frame transmission → Raw socket access: uses sockets
- Runtime coordinator → Handshake validation: validates handshakes
- Runtime coordinator → GPS positioning: obtains position
- GPSD service → GPS positioning: supplies fixes
- Runtime coordinator → Geofence: checks location
- Runtime coordinator → PCAPNG writer: sends frames
- Runtime coordinator → Kismet database writer: sends frames
- PCAPNG writer → Capture files: writes capture
- Kismet database writer → Kismet database file: writes records
- Runtime coordinator → Status log: records status
- Status log → Terminal UI: renders status
- Operator → Terminal UI: interacts
- Runtime coordinator → Headless output: prints status
