NetMon Dokumentation

Version: NetMon Dokumentation 1.1.19

Kompakte Zusammenstellung der zentralen Projekt- und Nutzerdokumentation.

Inhaltsverzeichnis

README

USER GUIDE

CONFIGURATION

SECURITY

ARCHITECTURE

DEB PACKAGING PLAN

CHANGELOG

README

Quelle: docs/README.md

NetMon

Dokumentierter Paket- und App-Stand: 1.1.19.

NetMon ist eine Linux-GUI fuer Netzwerk-, DNS-, Firewall-, VPN-, Security-, Radio- und Hilfsfunktionen. Der Startpfad liegt in netmon/main.py, die Hauptoberflaeche in netmon/app.py, und die Funktionslogik ist in Controller-, Service- und Tab-Module aufgeteilt.

Kurzbeschreibung

NetMon kombiniert klassische Netzwerk-Werkzeuge, DNS-/DoT-Steuerung, Firewall- und Sicherheitspruefungen, VPN-Slots, Radio, Theme Studio, Linux-Hilfe und Chad-Analyse in einer Tk-/ttk-Oberflaeche. Der Code verwendet fuer die GUI tkinter, fuer den Start einen Splash-/Lock-/Crash-Flow und fuer viele Teilbereiche klar getrennte Controller- und Service-Module.

Hauptfunktionen

Screenshots

Screenshot-Platzhalter: Hauptfenster mit Haupttabs.

Screenshot-Platzhalter: Radio-Tab mit aktuellem Sender, Steuerung & EQ und projectM.

Screenshot-Platzhalter: Security-Bereich mit Firewall-/Monitoring-Ansicht.

Installation

Im Repository deklarierte Python-Abhaengigkeiten

Im Startpfad explizit vorausgesetzt oder optional importiert

Debian-Paketstand

Beispiel-Setup unter Linux

python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python -m netmon --headless
./.venv/bin/python -m netmon

Wenn tkinter fehlt, meldet netmon/main.py explizit den Debian/Ubuntu-Hinweis sudo apt install -y python3-tk.

Erste Schritte

  1. Optional im Headless-Modus pruefen: ./.venv/bin/python -m netmon --headless
  2. GUI starten: ./.venv/bin/python -m netmon
  3. Im Bereich Settings / Theme Studio Theme und Sprache pruefen.
  4. DNS-, Firewall- und Security-Bereiche nur mit passender Linux-Umgebung und ggf. sudo nutzen.
  5. Weitere Details: USER_GUIDE.md, DEVELOPER_GUIDE.md, CONFIGURATION.md

Externes Testlabor

Lizenz

NetMon verweist im aktuellen Stand auf GPL-3.0-or-later. Relevante Dateien:

Kontakt

Projekt-/Support-Kontakte im aktuellen Stand:

Changelog

Siehe CHANGELOG.md.

USER GUIDE

Quelle: docs/USER_GUIDE.md

Benutzeranleitung NetMon

Einfuehrung

NetMon ist eine Linux-Anwendung mit grafischer Oberfläche auf Basis von tkinter/ttk. Der Code verbindet Netzwerkwerkzeuge, DNS-/Firewall-Steuerung, Sicherheitspruefungen, Radio, Theme Studio, Linux-Hilfe, Cleanup-Funktionen und Chad-Analyse in einer einzigen Anwendung.

Was ist NetMon?

NetMon ist laut Codebasis eine Desktop-Anwendung fuer Netzwerk- und Security-Aufgaben mit zusaetzlichen Hilfsfunktionen. Der zentrale Einstiegspunkt ist netmon/main.py, die Hauptklasse ist App in netmon/app.py.

Fuer wen ist NetMon gedacht?

Installation

Voraussetzungen

Installation unter Linux

python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python -m netmon --headless
./.venv/bin/python -m netmon

Wenn beim GUI-Start tkinter fehlt, verweist netmon/main.py auf sudo apt install -y python3-tk.

Abhaengigkeiten

Bedienung

Netzwerkueberwachung

DNS Guard und DNS-Steuerung

Firewall und Security-Monitoring

Radio

Chat / Chad

Systeminformationen

VPN-Profile und Statusanzeige

Speedtest und Server-ID

Secure Browser

Scanfunktionen

ClamAV-Scans

Laufenden ClamAV-Scan im Terminal pruefen

ps -o pid,etime,%cpu,cmd -C clamscan

ELAPSED zeigt die bisherige Laufzeit und %CPU die aktuelle Prozessauslastung. Die vollstaendige, nicht abgeschnittene Kommandozeile inklusive Scanpfaden zeigt:

ps -efww | grep '[c]lamscan'

Eine hohe CPU-Auslastung bedeutet normalerweise, dass ClamAV noch arbeitet. clamscan --infected liefert jedoch keine verlaessliche Live-Dateinummer; die endgueltige Anzahl steht erst nach Abschluss in der Scan-Zusammenfassung.

RKHunter-Auswertung und Referenzupdate

Logs

Theme Studio

Linux-Hilfe

Fehlerbehebung

Problem Ursache im Code Loesung / Workaround
GUI startet nicht tkinter fehlt oder DISPLAY ist nicht gesetzt (netmon/main.py) python3-tk installieren oder --headless verwenden; bei Remote-Umgebungen X11/Wayland weiterreichen.
NetMon startet nicht erneut Instanz-Lock aktiv (acquire_netmon_instance_lock) Laufende Instanz beenden oder alten Prozess pruefen.
Onlineanalyse funktioniert nicht OPENAI_API_KEY fehlt (AiOnlineService) API-Key als Umgebungsvariable setzen.
Linux-Hilfe erzeugt keine PDF direkt Der aktuelle Workflow ist bewusst auf Prompt-Kopie, externen PDF-Build und Import ausgelegt Oben Als Prompt mit PDF nutzen, PDF extern erstellen/herunterladen und unten ueber PDF importieren laden.
projectM laesst sich nicht starten projectM ist optional und wird gesondert erkannt projectM/Flatpak-Pfade pruefen; im Radio-UI den Installationshinweis nutzen.
Packet Capture / Wireshark fehlt Wireshark-/tshark-Launcher nicht installiert Wireshark installieren; der Packet-Capture-Bereich enthaelt einen Installationshinweis.
DNS-/Firewall-Aktionen scheitern Viele Systemaktionen benoetigen sudo -n oder eine frische sudo-Session Sudo-Session erneuern und mit passender Linux-Umgebung arbeiten.
Secure Browser erreicht eine benoetigte Seite nicht Der Website-Filter erlaubt nur die konfigurierte Domain-Liste Dry-Run und Whitelist pruefen; nur die konkret benoetigten Login-, Zahlungs- oder CDN-Domains ergaenzen.
ClamAV-Schnellscan dauert unerwartet lange Zu viele oder grosse eigene Scanpfade, Archive, viele kleine Dateien oder langsame Datentraeger Unter Schnellscan-Pfade die Auswahl verkleinern; Prozessstand mit ps -o pid,etime,%cpu,cmd -C clamscan pruefen.
ClamAV zeigt waehrend des Scans 0 Dateien clamscan --infected liefert die verwertbare Dateisumme erst in der Abschlussausgabe Laufzeit und Prozess im Terminal beobachten; die endgueltige Dateizahl nach Scanende ablesen.

Bekannte Probleme

Ursache Beobachtung Loesung
Linux Hilfe fuehrt riskante Befehle nicht direkt aus Der Bereich ist als Referenz-, Prompt- und Bibliotheksfunktion ausgelegt Befehle pruefen, Prompts extern nutzen und PDFs ueber die Bibliothek verwalten.
Sprachpaket-Hinweis nennt spaetere Vollumsetzung Sprachunterstuetzung ist vorhanden, aber der Hinweistext ist noch konservativ Sprachdateien in netmon/lang/ pruefen und bei Bedarf erweitern.
Lizenz-/Dokumentations-/Video-Links enthalten Platzhaltertexte in app.py Nicht alle Hilfe-/Info-Links sind produktiv angebunden Externe Hilfe nur verwenden, wenn konkrete Inhalte hinterlegt sind.

FAQ

  1. Wie starte ich NetMon ohne GUI?

python -m netmon --headless fuehrt den Headless-Snapshot aus.

  1. Wie pruefe ich nur, ob die GUI einmal startet?

python -m netmon --headless-smoke erstellt die GUI einmal und beendet sie wieder.

  1. Welche Themes kann ich direkt beim Start waehlen?

--theme akzeptiert laut netmon/main.py die Werte dark, light, beige und pop.

  1. Wo speichert NetMon seine Konfiguration?

Standardmaessig unter ~/.config/netmon bzw. XDG_CONFIG_HOME/netmon.

  1. Wo speichert NetMon Laufzeit- und Statusdateien?

Standardmaessig unter ~/.local/state/netmon bzw. XDG_STATE_HOME/netmon.

  1. Warum startet die GUI nicht?

Im Startpfad werden fehlendes tkinter, fehlendes DISPLAY, Tk-Fehler und weitere Bootstrap-Fehler explizit behandelt. NetMon schreibt dabei ein Startprotokoll nach ~/Documents/NetMon/diagnostics bzw. ~/Dokumente/NetMon/diagnostics und erzeugt zusaetzlich strukturierte Diagnoseberichte als netmon-*.json.

  1. Wie sende ich Fehlerprotokolle oder Diagnoseberichte an den Support?

Im Bereich Einstellungen -> Support / Diagnose kann der Benutzer ein Supportpaket erzeugen. Dieses ZIP landet unter ~/Documents/NetMon/support bzw. ~/Dokumente/NetMon/support und enthaelt das aktuelle Start-/Crash-Protokoll sowie den neuesten Diagnosebericht. Zusaetzlich gibt es im About-/Bugreport-Bereich ein Formular, dessen Angaben als Nutzermeldung in das Supportpaket aufgenommen werden.

Vor dem Export zeigt NetMon im Support-Bereich ausserdem einen sichtbaren Datenschutzhinweis an: Diagnosepakete dienen nur der Fehleranalyse, koennen aber je nach Fall Hostnamen, Benutzernamen, Dateipfade oder IP-Adressen enthalten und sollten vor dem Versand kurz geprueft werden.

  1. Darf NetMon mehrfach parallel laufen?

Nein. netmon/main.py verwendet einen Instanz-Lock und beendet weitere Starts mit einer Fehlermeldung.

  1. Wie aktiviere ich DNS Guard?

Im DNS-Tab gibt es den Schalter DNS Guard aktivieren; Statusvariablen und Logmeldungen werden im Code gesetzt.

  1. Was macht DNS Guard?

Er ueberwacht die aktiven DNS-Server, bewertet Abweichungen und kann je nach Zustand eine Auto-Korrektur anstossen.

  1. Wie erkenne ich, ob DoT aktiv ist?

Die App fuehrt DoT-Statusvariablen wie dot_status_var, dot_server_var und dot_last_test_var.

  1. Wo finde ich den Radio-Bereich?

Als Radio-Tab im verschachtelten Tools-Notebook.

  1. Kann ich den Radio-Player losloesen?

Ja. Der Code in netmon/netmon_radio_core.py und netmon/features/radio_controller.py verwaltet Host-/Handover-/Attach-Dateien fuer eingebetteten und losgeloesten Betrieb. Das losgeloeste Standalone-Radio laeuft dabei aktuell ausschliesslich im Darkmode.

  1. Wo liegt die Radio-Datenbank?

Im State-Verzeichnis, standardmaessig als radio_db.json und radio_db_meta.json.

  1. Wie speichere ich Theme-Studio-Profile?

Das Theme Studio bietet Theme speichern und Theme laden; Profile landen unter ~/Documents/NetMon/ThemeStudio oder ~/Dokumente/NetMon/ThemeStudio.

  1. Wirkt Theme Studio auf alle Themes?

Nein. Laut UI-Hinweis wirkt Theme Studio nur auf das Testprofil Pop.

  1. Wie funktioniert Chad-Onlineanalyse?

Der Online-Service liest OPENAI_API_KEY und sendet Requests an /v1/responses.

  1. Was passiert ohne API-Key?

Der Online-Service antwortet mit Kein API-Key gesetzt und fuehrt keine Onlineanalyse aus.

  1. Wo finde ich System- und Security-Funktionen?

Im Hauptnotebook gibt es die Bereiche System, Tools und Security mit jeweils eigenem Unter-Notebook.

  1. Gibt es einen Packet-Capture-Export nach Wireshark?

Ja. Packet-Capture-Controller und UI enthalten Wireshark-/tshark-Erkennung und einen Button In Wireshark oeffnen.

  1. Wo sehe ich Logs?

Im Tab Log; dort existiert auch der Link aus dem Firewall-Status direkt in den Firewall-Bereich.

  1. Wie erkennt NetMon eine neue Version?

Im About-Dialog kann NetMon die aktuelle Website-Version ueber netmonroots.com/latest-version.json pruefen. Wenn online eine neuere Version gemeldet wird, kann NetMon direkt auf die Downloadseite weiterleiten.

Unklar / Nicht dokumentiert

CONFIGURATION

Quelle: docs/CONFIGURATION.md

Konfiguration NetMon

Speicherorte

Konfigurationsdateien

Datei Standardort Zweck
config.json Config App-Einstellungen (self.netmon_config_path)
ai_config.json Config Chad-/AI-bezogene Einstellungen (self.ai_config_path)
linux_help_commands.json Config Linux-Hilfe-Daten
netmon_hdd_slots.json Config HDD-Slot-Konfiguration
netmon_link_slots.json Config Link-Slot-Konfiguration
netmon_vpn_slots.json Config VPN-Slots
netmon_primary_vpn_slots.json Config Primaere VPN-Slots
netmon_privacy.json Config Privacy-/DNS-/VPN-Einstellungen
radio_stations.json Config Radio-Stationen
radio_favorites.json Config Radio-Favoriten
radio_settings.json Config Radio-Einstellungen

Die Schnellscan-Auswahl liegt in config.json:

State- und Laufzeitdateien

Datei / Ordner Standardort Zweck
radio_db.json State Radio-Datenbank
radio_db_meta.json State Radio-DB-Metadaten
radio_host_state.json State Host-Status fuer eingebetteten Radio-Betrieb
radio_attach_request.json State Attach-Anforderung
radio_standalone_attach_request.json State Standalone-Attach-Anforderung
radio_standalone_show_request.json State Show-Anforderung fuer Standalone-Radio
radio_detached_state.json State Status fuer losgeloesten Player
radio_handover_request.json State Handover an externen Player
radio_handover_ack.json State Handover-Bestaetigung
netmon_security_baseline.json State Security-Baseline
startup_guard_baseline.json State Startup-Guard-Baseline
startup_guard_trustlist.json State Startup-Guard-Trustlist
repository_guard_baseline.json State Repository-Guard-Baseline
repository_guard_trustlist.json State Repository-Guard-Trustlist
process_guard_trustlist.json State Process-Guard-Trustlist
roots_baseline_guard_baseline.json State Roots-Baseline-Guard-Baseline
roots_baseline_guard_whitelist.json State Roots-Baseline-Guard-Whitelist
netmon_clamav_findings.json State Persistierte ClamAV-Funde
captures/ State Packet-Capture-Dateien
logs/speedtest_history.jsonl State Speedtest-Historie
logs/ State Laufzeit- und Feature-Logs, z. B. speedtest_history.jsonl
WireGuard/ Documents NetMon-Importordner fuer lokale WireGuard-Profile
LinuxHelp/pdfs/ Documents Importierte Linux-Hilfe-PDFs
LinuxHelp/meta/ Documents JSON-Metadaten zu importierten Linux-Hilfe-PDFs

Diagnose- und Supportdateien

Datei / Ordner Standardort Zweck
startup_error.log Documents/diagnostics Startfehlerprotokoll mit Bootstrap- und GUI-Startfehlern
crash.log Documents/diagnostics Sammellog fuer Laufzeitabstuerze
netmon-*.json Documents/diagnostics Strukturierte Diagnoseberichte fuer Start- und Laufzeitfehler
netmon-support-*.zip Documents/support Supportpaket mit Manifest, Diagnosebericht und Fehlerprotokollen

Standardwerte

Backup / Restore

Unklar / Nicht dokumentiert

Hinweise zu VPN-/WireGuard-Profilen

SECURITY

Quelle: docs/SECURITY.md

Security-Hinweise NetMon

Netzwerkzugriffe

Im Code wurden folgende Arten von Netzwerkzugriffen gefunden:

DNS-Aenderungen

Root-Rechte / sudo

RKHunter-Referenzdatenbank

rkhunter --propupd kann manipulierte Dateieigenschaften als neue Referenz akzeptieren und ist deshalb besonders geschuetzt:

ClamAV-Signaturdatenbank

Logging

Datenschutz

Secure Browser

Risiken

Bereich Risiko Beleg im Code
Systemkommandos Viele Aktionen veraendern Netzwerk-, DNS- oder Firewall-Zustand auf dem Host sudo -n-Kommandos in netmon_network_service.py, dns_control_service.py, firewall_controller.py
Onlineanalyse Inhalte werden an einen externen API-Dienst gesendet AiOnlineService
Start-Error-Logging Startlog schreibt Umgebungsdaten und Stacktraces in Datei netmon/main.py
Packet Capture Rohdaten aus dem Netzwerk koennen lokal gespeichert und in Wireshark geoeffnet werden Packet-Capture-Tab/Controller
Detached Radio Handover-/Status-Dateien im State-Verzeichnis steuern Prozesswechsel netmon_radio_core.py

Schutzmassnahmen

Benutzerhinweise

Unklar / Nicht dokumentiert

Audit-Einordnung K1 bis K9

Die in scripts/build_security_audit_pdf.py aufgefuehrten Punkte K1 bis K9 sind im Audit selbst nicht als bestaetigte Sicherheitsluecken bewertet, sondern als ausgeschlossene Kandidaten mit niedriger Konfidenz.

ID Thema Audit-Status Einordnung Aktueller Repo-Status
K1 Git-Subcommand-Passthrough ausgeschlossen Lokaler Entwicklerpfad, kein LLM- oder Netzwerk-Input in run_command() zusaetzlich gehaertet: Git-Subcommand-Allowlist in agent/runner.py
K2 WireGuard-Endpoint in UFW-Killswitch ausgeschlossen Profil liegt root-owned; Audit sah keinen realistischen Remote-Pfad zusaetzlich gehaertet: Endpoint-Host wird als feste IP validiert
K3 UFW-Quelle any im Firewall-Formular ausgeschlossen beabsichtigte Admin-Funktion mit Warnung, Vorschau und Bestaetigung unveraendert, weiter als kontextuell unkritisch bewertet
K4 Vorhersagbarer ClamAV-Temp-Pfad ausgeschlossen Audit sah keinen sinnvollen Code-Execution-Pfad ueber signierte ClamAV-Daten zusaetzlich gehaertet: symlink-sichere Verzeichniserstellung
K5 Dateipfad in image_to_data_url() ausgeschlossen bewusster Upload-Fluss, Bildtypen-Restriktion, Dateidialog zusaetzlich gehaertet: Pfad auf Benutzer-Home begrenzt
K6 WireGuard-Import via nmcli ausgeschlossen nmcli/NetworkManager fuehrt wg-quick-Hooks nicht aus unveraendert, weiter als unkritisch bewertet
K7 WireGuard-Import via wg-quick ausgeschlossen manueller Admin-Import, kein automatischer wg-quick up-Pfad unveraendert, weiter als unkritisch bewertet
K8 Shell-Snippet-Generierung im Repository-Guard ausgeschlossen Snippet wird nur angezeigt bzw. kopiert, nicht automatisch ausgefuehrt zusaetzlich gehaertet: shlex.quote() fuer Shell-Werte
K9 Symlink-Bypass im Roots-Baseline-Guard ausgeschlossen Audit bewertete den praktischen Mehrwert des Bypasses als gering zusaetzlich gehaertet: os.path.realpath() vor Guard-Match

Kurz gesagt: K1 bis K9 sind keine bestaetigten Sicherheitsbefunde aus dem Audit. Teile davon wurden spaeter trotzdem als Defense-in-Depth-Massnahmen technisch gehaertet.

Bestaetigte Findings nach dem Audit

Radio-Station-URLs aus externem API

Radio-Stationen aus externen Quellen wie radio-browser.info wurden zuvor ohne Schema-Validierung weiterverarbeitet. Dadurch konnten praepartierte URLs bis an mpv und an urllib.request.urlopen() gelangen.

Der aktuelle Codestand haertet diesen Pfad zentral in normalize_station_entry():

Ziel der Aenderung ist, unnoetige SSRF- oder lokale Protokollpfade aus externen Stationslisten gar nicht erst in nachgelagerte Playback- oder Metadaten-Funktionen zu uebernehmen.

rkhunter WEB_CMD und PATH-Hijacking

Der Rueckgabewert von shutil.which() durfte nicht ungeprueft in WEB_CMD=... fuer rkhunter.conf uebernommen werden, weil rkhunter --update diesen Pfad spaeter mit Root-Rechten ausfuehrt.

Der aktuelle Codestand begrenzt _preferred_web_cmd() auf vertrauenswuerdige Pfade:

Ziel der Aenderung ist, PATH-Hijacking und moegliche Privilege Escalation ueber manipulierte Benutzer-Binaries zu verhindern.

Agent-CLI und Repo-Pfad-Confinement

Der lokale Agent-Runner pruefte urspruenglich nur den Basisbefehl (black, ruff, pytest, ls), aber keine uebergebenen Pfadargumente. Dadurch konnten absolute Pfade ausserhalb des Repositories an Schreib- oder Lese-Tools weitergereicht werden.

Der aktuelle Codestand haertet run_command() zusaetzlich:

den Dateipfad reduziert und geprueft

Ziel der Aenderung ist, Dateikorruption und Information Disclosure ausserhalb des Repositories ueber Prompt-Injection oder untrusted CLI-Eingaben zu verhindern.

Fun-Launcher und Spielpfad-Begrenzung

Der Fun-Launcher startet Python-Dateien aus dem Code-the-Classics-Bereich ueber subprocess.Popen(["python3", path]). Der aktuelle Codestand begrenzt diesen Pfad jetzt zusaetzlich:

Ziel der Aenderung ist, das Starten beliebiger Python-Dateien ausserhalb des verwalteten Spielebereichs defensiv zu verhindern.

ARCHITECTURE

Quelle: docs/ARCHITECTURE.md

Architektur NetMon

Systemarchitektur

NetMon ist eine monolithische Tk-/ttk-Desktop-Anwendung mit einer grossen zentralen App-Klasse und ausgelagerter Fachlogik in Controllern, Services, Core-Helfern und UI-Tab-Builders.

Architekturueberblick

flowchart TD
    A[python -m netmon] --> B[netmon/__main__.py]
    B --> C[netmon/main.py]
    C --> D{CLI-Modus?}
    D -- headless --> E[run_headless_snapshot]
    D -- headless-smoke --> F[run_headless_smoke]
    D -- GUI --> G[Startup-Checks
tkinter / DISPLAY / Lock / Splash]
    G --> H[App in netmon/app.py]
    H --> I[Main Notebook]
    I --> J[System Notebook]
    I --> K[Tools Notebook]
    I --> L[Security Notebook]
    H --> M[Controller in netmon/features]
    H --> N[Services in netmon/services]
    H --> O[Core-Helfer in netmon/core]
    H --> P[Radio Core / Detached Radio]

GUI-Architektur

flowchart LR
    App[App]
    App --> MainNB[Hauptnotebook self.nb]
    MainNB --> Log[Log]
    MainNB --> Trace[Trace]
    MainNB --> Conn[Verbindungen]
    MainNB --> DNS[DNS]
    MainNB --> Chad[Chad]
    MainNB --> Download[Download Scan]
    MainNB --> Settings[Settings]
    MainNB --> SystemMain[System]
    MainNB --> ToolsMain[Tools]
    MainNB --> SecurityMain[Security]
    SystemMain --> SystemNB[system_nb]
    ToolsMain --> ToolsNB[tools_nb]
    SecurityMain --> SecurityNB[security_nb]

Backend-Architektur

flowchart TD
    App --> Features[features/*_controller.py]
    Features --> Services[services/*.py]
    Features --> Core[core/*.py]
    App --> Tabs[ui/tabs/*.py]
    Tabs --> App
    App --> RadioCore[netmon_radio_core.py]
    App --> SecurityParser[netmon_security_parser.py]
    App --> SecurityStore[netmon_security_store.py]
    Services --> State[state.py]
    Services --> Utils[utils.py]

Konfigurations- und Laufzeitdaten

flowchart LR
    Config[~/.config/netmon] --> AppCfg[config.json / ai_config.json]
    Config --> Slots[HDD/Link/VPN/Privacy/Radio JSON]
    Config --> LinuxHelp[linux_help_commands.json]
    Config --> RadioCfg[radio_stations.json / radio_favorites.json / radio_settings.json]
    Data[XDG_DATA_HOME/netmon] --> ClamDb[clamav-db / Benutzersignaturen]
    State[~/.local/state/netmon] --> Sec[security / startup / repository / roots baseline Dateien]
    State --> RadioState[radio_db.json / handover / attach / detached state]
    State --> Logs[startup_error.log / logs/speedtest_history.jsonl]
    State --> Capture[captures/]

GUI

Backend

Netzwerkmodule

Logging

Konfiguration

Moduldiagramm nach Codebereichen

flowchart TD
    subgraph Core
        C1[command.py]
        C2[state.py]
        C3[utils.py]
        C4[lock.py]
        C5[crash.py]
    end
    subgraph Services
        S1[dns_control_service.py]
        S2[ai_online_service.py]
        S3[repository_guard_service.py]
        S4[startup_guard_service.py]
        S5[path_guard_service.py]
        S6[process_guard_service.py]
        S7[rkhunter_analysis_service.py]
    end
    subgraph Features
        F1[dns_controller.py]
        F2[firewall_controller.py]
        F3[vpn_controller.py]
        F4[radio_controller.py]
        F5[security_monitoring_controller.py]
        F6[security_audit_controller.py]
        F7[repository_guard_controller.py]
        F8[clamav_controller.py]
    end
    subgraph UI
        U1[ui/tabs/*.py]
        U2[ui/widgets/*.py]
    end
    App[app.py] --> Core
    App --> Services
    App --> Features
    App --> UI
    Features --> Services
    Features --> Core
    UI --> App

Unklar / Nicht dokumentiert

DEB PACKAGING PLAN

Quelle: docs/DEB_PACKAGING_PLAN.md

Debian Packaging Plan

Diese Datei beschreibt die Soll-Struktur fuer netmon als .deb auf Basis des aktuellen Repository-Stands.

Aktueller dokumentierter Paketstand: 1.1.18.

Ziel

Die .deb soll die startfaehige NetMon-Anwendung enthalten, inklusive aller zur Laufzeit benoetigten Python-Module aus dem Repo, der Desktop-Integration und der statischen App-Daten. Entwicklungsdateien, Tests, Backups und Build-Artefakte gehoeren nicht ins Paket.

Vorgeschlagene Paketstruktur

Debian-Metadaten

Starter und Desktop-Integration

Applikationscode

Basisziel: /usr/lib/netmon/netmon/

Direkt unter /usr/lib/netmon/netmon/:

Unterverzeichnisse, die komplett mitgenommen werden sollen:

Statische Daten und Assets

Mitliefern

Optional mitliefern

Nicht in die .deb

Abhaengigkeiten

Die bisherige control-Datei im Build-Skript ist zu schmal und teilweise veraltet. Sie basiert noch auf einem kleineren Altpaket.

Depends

Diese Abhaengigkeiten sind fuer einen normalen GUI-Start plausibel und sollten als erste Zielmenge gelten:

Recommends

Diese Tools werden laut Code aktiv genutzt, sind aber eher Feature-bezogen als fuer den nackten Start zwingend:

Suggests

Diese Komponenten sind optional oder eher Zusatzfunktionen:

Hinweise zur Python-Laufzeit

Konsequenz fuer den Builder

Der aktuelle Builder in scripts/build_netmon_deb.sh sollte von einer Datei-fuer-Datei-Auswahl auf eine bewusst gepflegte Paketliste umgestellt werden.

Stand 1.1.18:

Empfohlene Richtung:

  1. Vollstaendige Laufzeit-Unterpakete config, core, features, lang, modules, services, ui uebernehmen.
  2. Die benoetigten Top-Level-Dateien aus netmon/ explizit kopieren.
  3. Assets getrennt unter /usr/share/netmon/assets/ ablegen.
  4. Depends, Recommends und Suggests aus der aktuellen Feature-Registry in netmon/app.py ableiten.
  5. Tests und Repo-Ballast explizit ausschliessen, statt implizit wegzulassen.

Festgelegte Entscheidungen

Deinstaller-Stand

Der aktuelle Paketstand liefert netmon-uninstall als eigenen Launcher und CLI-Weg mit aus.

Der Deinstaller fragt optional per y/n ab:

Hinweis:

netmon-dark

netmon-dark sollte nicht als separates Debian-Paket weitergefuehrt werden.

Begruendung:

Konsequenz:

CHANGELOG

Quelle: docs/CHANGELOG.md

Changelog

Automatisch aus der Git-Historie des Repositories erzeugt.

2026-07-18 - Version 1.1.19

2026-07-17 - Version 1.1.18

2026-07-11 - Version 1.1.17

2026-07-07 - Version 1.1.16

2026-07-05 - Version 1.1.16

2026-06-29 - Version 1.1.15

2026-06-28 - Version 1.1.14

2026-06-21 - Version 1.1.13

2026-06-14 - Version 1.1.10

sondern nur noch echte NM-wireguard-Connections.