Files
mitm-webserver/documentation/backend/api.md
Marcus Almert 9106cac2a2
Some checks failed
Build and Deploy MITM Webserver / build (push) Has been cancelled
Build and Deploy MITM Webserver / traffic_target (push) Has been cancelled
documentation md files
2026-08-30 17:31:46 +02:00

6.7 KiB
Raw Blame History

HTTP and WebSocket API

The application is served below /api. FastAPI validates request models and publishes the complete JSON Schema at /api/openapi.json; use it for exact field types and the current response schema. This page documents semantics and all mounted operations.

General endpoints

Method/path Meaning
GET /api/hello Simple application health response.
GET /api/versions Returns the Python runtime version.

Network: /api/network

Method/path Parameters/body Behaviour
GET /interfaces none Lists interfaces, addresses, flags, MTU, MAC, state and Ethernet profile.
GET /routes none Lists kernel route entries and resolved output-interface names.
GET /links none Lists raw link information.
GET /bridges none Lists Linux bridges, STP state and current member details.
GET /full-state none Combines interfaces, routes, links and bridges into one snapshot.
POST /interfaces/reset-defaults { interfaces: string[] } Resets each requested interface to MTU 1500 and attempts to restore an automatic Ethernet profile through ethtool.
POST /bridge/create { name, interfaces } Creates a Linux bridge and attaches listed interfaces.
POST /bridge/remove { name } Removes an existing bridge.
GET /bridge/link-state-watchers none Returns all watcher states.
GET /bridge/{bridge_name}/link-state-watcher path name Returns one bridge watcher state.
POST /bridge/{bridge_name}/link-state-watcher/enable optional recovery holdoff Enables member failure/recovery propagation.
POST /bridge/{bridge_name}/link-state-watcher/disable path name Stops and removes that watcher.
WS /ws/state none Receives full network-state update payloads after network mutations.

An interface object includes its kernel index, name, state, MAC, MTU, decoded flags, assigned IPv4/IPv6 addresses, and, where available, speed/duplex/autoneg data.

Sniffer: /api/sniffer

Method/path Parameters/body Behaviour
POST /start exactly one of bridge or interface; optional bridge_capture_mode, benchmark_mode Creates a capture session. Bridge modes are tc_ebpf and af_packet.
POST /stop optional session ID or bridge/interface selector Stops an identified session, target sessions, or all sessions according to the request.
GET /status none Returns status keyed by captured interface: running/existing/up state, owner session, mode, and benchmark mode.
GET /debug none Returns internal session, buffered-record, tshark, telemetry, and tracker state. Treat as diagnostic output, not a stable client contract.

The start endpoint rejects requests containing both a bridge and an interface, or neither. A bridge defaults to tc_ebpf; an interface always captures using AF_PACKET.

Packets: /api/packets

Method/path Parameters/body Behaviour
GET /packets?limit=100 limit 1–10,000 Fetches most-recent normalized packet rows.
DELETE /packets?reset_id=true optional boolean Clears packet history; can reset database identity state.
WS /ws/packets none Receives packet updates from the in-process broadcaster.

REST history is authoritative. WebSocket clients must expect connection loss and dropped messages for a slow subscriber, then refill missed state with GET.

Analysis: /api/analysis

Every analysis endpoint accepts since_minutes when shown; its valid range is 1 minute to 30 days. Results are derived from the stored packet history and do not claim ground truth about a physical topology or attack.

Method/path Main query controls Result
GET /interface-hosts since_minutes, limit_per_interface Likely hosts attached to each MITM-side interface.
GET /interface-host-protocols plus limit_protocols_per_host Attachment inference with per-host protocol evidence.
GET /interface-protocol-paths limit_paths Directional aggregated paths for a Sankey-style view.
GET /conversations limit Aggregated directional endpoint conversations.
GET /conversation-flow-detail flow_id or directional endpoint/port fields; protocol, limit_packets Ordered packets, subflows, and derived request/response events.
GET /host-intelligence limit_hosts Host-centric peers, service and hostname hints.
GET /discovery limit Discovery, naming and service-advertisement activity.
GET /anomalies limit Heuristic scan, beacon, rare service, reset-heavy and drop-heavy candidates.

conversation-flow-detail requires a flow_id or enough directional fields to identify a conversation. All analysis endpoints return 503 while the database is unavailable and 500 when their underlying query fails.

Firewall: /api/firewall

Method/path Body/query Behaviour
GET /rules none Lists nftables ruleset in a predictable structured representation, enriched with textual rule data where possible.
DELETE /rules/{handle} optional family/table/chain defaults Deletes the rule identified by its nft handle.
POST /raw { cmd: string } Executes an arbitrary textual nft command and returns stdout/stderr/return code.

The raw endpoint is intentionally powerful and must not be exposed to untrusted clients. It changes the host firewall, not an application-local simulation.

Scripts: /api/scripts/scripts

The doubled path is produced by the current combination of router and application prefixes. Scripts are Python NFQUEUE workers installed under /srv/fw-scripts and can have systemd units and isolated virtual environments.

Method/path Behaviour
GET / Lists scripts and their unit mappings/status.
POST / Uploads a script multipart payload; accepts a script, optional requirements file and required name form field.
GET /{name} Downloads script source.
GET /{name}/requirements Downloads its requirements file.
PUT /{name}/requirements Replaces requirements and runs pip install in the script venv.
DELETE /{name}/requirements Deletes requirements and removes the venv.
POST /{name}/enable Creates/starts an NFQUEUE systemd service for a requested queue number.
POST /{name}/disable Stops/disables the service for a queue number.
DELETE /{name} Removes all, or one requested queue-number unit, then cleans script-related files as appropriate.

Names allow letters, digits, ., _, and -; . and .. are prohibited. Repository example scripts are protected from API modification. Enabling/uploading requirements has code-execution and host-service consequences.