# tacticalgator/modbuster architecture

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

- Interactive diagram: https://gitdiagram.com/tacticalgator/modbuster
- Repository: https://github.com/tacticalgator/modbuster

## Overview

Modbuster is a Python CLI for authorized Modbus TCP assessment. A user selects read, write, function-code enumeration, or diagnostics; the CLI parses arguments and dispatches to the corresponding verb. Read/write verbs classify addresses through shared helpers before issuing Modbus operations; diagnostics run standard checks or selected disruptive actions; enumeration probes function codes directly over TCP. Results are printed to the terminal. The main modules and their direct calls are shown; the Modbus target and pymodbus are external dependencies.

Main entry points: [`modbuster/modbuster.py`](https://github.com/tacticalgator/modbuster/blob/main/modbuster/modbuster.py) (Command parser), [`modbuster/verbs/read.py`](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/read.py) (Read verb), [`modbuster/verbs/write.py`](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/write.py) (Write verb), [`modbuster/verbs/diag.py`](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/diag.py) (Diagnostics)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI dispatch"]
  node_cli["Command parser<br/>[modbuster.py]"]
end

subgraph group_operations["Read and write"]
  node_read["Read verb<br/>[read.py]"]
  node_write["Write verb<br/>[write.py]"]
end

subgraph group_assessment["Discovery and diagnostics"]
  node_functions["Function scan<br/>[getfunctions.py]"]
  node_diag["Diagnostics<br/>[diag.py]"]
end

subgraph group_shared["Shared Modbus support"]
  node_common["Address and connection helpers<br/>[common.py]"]
end

node_user(("Operator"))
node_pymodbus["pymodbus client"]
node_target(("Modbus TCP device"))
node_terminal(("Operator terminal"))

node_user -->|"selects command"| node_cli
node_cli -->|"dispatches"| node_read
node_cli -->|"dispatches"| node_write
node_cli -->|"dispatches"| node_functions
node_cli -->|"dispatches"| node_diag
node_read -->|"parses address; connects"| node_common
node_write -->|"parses address; connects"| node_common
node_diag -->|"connects"| node_common
node_common -->|"creates client"| node_pymodbus
node_read -->|"reads data"| node_target
node_write -->|"writes values"| node_target
node_diag -->|"runs diagnostics"| node_target
node_functions -->|"probes codes"| node_target
node_read -->|"prints values"| node_terminal
node_write -->|"prints status"| node_terminal
node_diag -->|"prints results"| node_terminal
node_functions -->|"prints findings"| node_terminal

click node_cli "https://github.com/tacticalgator/modbuster/blob/main/modbuster/modbuster.py"
click node_read "https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/read.py"
click node_write "https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/write.py"
click node_functions "https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/getfunctions.py"
click node_diag "https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/diag.py"
click node_common "https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/common.py"

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_cli,node_pymodbus toneBlue
class node_read,node_write toneAmber
class node_functions,node_diag toneMint
class node_common toneRose
class node_user,node_target,node_terminal toneIndigo
```

## Components

### CLI dispatch

- [Command parser](https://github.com/tacticalgator/modbuster/blob/main/modbuster/modbuster.py): `modbuster/modbuster.py`

### Read and write

- [Read verb](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/read.py): `modbuster/verbs/read.py`
- [Write verb](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/write.py): `modbuster/verbs/write.py`

### Discovery and diagnostics

- [Function scan](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/getfunctions.py): `modbuster/verbs/getfunctions.py`
- [Diagnostics](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/diag.py): `modbuster/verbs/diag.py`

### Shared Modbus support

- [Address and connection helpers](https://github.com/tacticalgator/modbuster/blob/main/modbuster/verbs/common.py): `modbuster/verbs/common.py`

### Other components

- **Operator**
- **pymodbus client**
- **Modbus TCP device**
- **Operator terminal**

## Connections

- Operator → Command parser: selects command (evidence: `README.md`)
- Command parser → Read verb: dispatches (evidence: `modbuster/modbuster.py`)
- Command parser → Write verb: dispatches (evidence: `modbuster/modbuster.py`)
- Command parser → Function scan: dispatches (evidence: `modbuster/modbuster.py`)
- Command parser → Diagnostics: dispatches (evidence: `modbuster/modbuster.py`)
- Read verb → Address and connection helpers: parses address; connects (evidence: `modbuster/verbs/read.py`)
- Write verb → Address and connection helpers: parses address; connects (evidence: `modbuster/verbs/write.py`)
- Diagnostics → Address and connection helpers: connects (evidence: `modbuster/verbs/diag.py`)
- Address and connection helpers → pymodbus client: creates client (evidence: `modbuster/verbs/common.py`)
- Read verb → Modbus TCP device: reads data (evidence: `modbuster/verbs/read.py`)
- Write verb → Modbus TCP device: writes values (evidence: `modbuster/verbs/write.py`)
- Diagnostics → Modbus TCP device: runs diagnostics (evidence: `modbuster/verbs/diag.py`)
- Function scan → Modbus TCP device: probes codes (evidence: `modbuster/verbs/getfunctions.py`)
- Read verb → Operator terminal: prints values (evidence: `modbuster/verbs/read.py`)
- Write verb → Operator terminal: prints status (evidence: `modbuster/verbs/write.py`)
- Diagnostics → Operator terminal: prints results (evidence: `modbuster/verbs/diag.py`)
- Function scan → Operator terminal: prints findings (evidence: `modbuster/verbs/getfunctions.py`)
