==============================================================================
  WinPing 1.0.0 - Netzwerk-Monitoring für Windows
  (C) 2026 IT-Service M.Tichy
  Support: support@mt-computerservice.de
==============================================================================


BESCHREIBUNG
------------
WinPing überwacht die Erreichbarkeit und Latenz von Netzwerkzielen in
Echtzeit. Unterstützte Protokolle: Ping (ICMP), HTTP/HTTPS, DNS, TCP,
SNMP, SSL-Zertifikatsprüfung und Port-Scan.

Funktionen u.a.: Latenz-Graphen, Heatmap, Vergleichsansicht, SLA-Reports,
Throughput-Tests (ähnlich iperf3), Geo-Map, Alerting mit Eskalation,
Benachrichtigungen (Webhook, E-Mail, ntfy, Microsoft Graph),
Dashboard/Kiosk-Modus, Prometheus-Metriken.


VORAUSSETZUNGEN
---------------
- Windows 10/11 oder Windows Server 2016+
- Python 3.10 oder neuer (empfohlen: Python 3.13)
  Download: https://www.python.org/downloads/
  WICHTIG: Bei der Installation "Add Python to PATH" aktivieren!

- Für ICMP-Ping ggf. Administrator-Rechte (je nach Firewall-Konfiguration)
- Für die Geo-Map: Internetzugang (Kartenkacheln von OpenStreetMap)


SCHNELLSTART
------------
1. ZIP-Archiv entpacken, z.B. nach C:\WinPing\
2. install.bat ausführen (Doppelklick)
3. start.bat ausführen (Doppelklick)
4. Im Browser öffnen: http://localhost:7100


INSTALLATION (SCHRITT FÜR SCHRITT)
------------------------------------
1. ZIP-Archiv in einen beliebigen Ordner entpacken, z.B.:
   C:\WinPing\

2. install.bat ausführen (Doppelklick)
   - Prüft ob Python installiert ist
   - Installiert die benötigten Python-Pakete (flask, requests, msal)

   Alternativ manuell:
   pip install flask requests msal

3. config.json anpassen (optional, siehe KONFIGURATION)

4. start.bat ausführen (Doppelklick) oder: python app.py

5. Im Browser öffnen: http://localhost:7100
   Beenden mit Strg+C im Konsolenfenster


KONFIGURATION
-------------
Alle Einstellungen befinden sich in config.json. Diese Datei wird beim
ersten Start automatisch erzeugt falls nicht vorhanden.

Wichtige Einstellungen:

  "web_port": 7100              Port der Weboberfläche (Standard: 7100)
  "probe_interval": 60          Sekunden zwischen Probe-Durchläufen
  "pings_per_probe": 20         Anzahl Pings pro Prüfung
  "ping_timeout": 1000          Timeout in Millisekunden
  "data_retention_days": 400    Wie lange Messdaten gespeichert werden

  "auth": {
    "enabled": false,           Passwortschutz aktivieren
    "username": "admin",        Benutzername
    "password": "admin"         Passwort (unbedingt ändern!)
  }

Ziele, Alerts und Benachrichtigungen können über die Weboberfläche
konfiguriert werden (Einstellungen-Button oben rechts).


PORT ANPASSEN
-------------
Standard-Ports:
  - Weboberfläche:      7100  (TCP)
  - Throughput-Server:  7101  (TCP + UDP)

Port der Weboberfläche ändern:
  In config.json den Wert "web_port" anpassen:
  "web_port": 8080

Throughput-Port ändern:
  In config.json unter "agents" den Throughput-Port anpassen:
  "agents": {
    "throughput_port": 9001
  }

Achtung: Agents und Throughput-Clients müssen den gleichen Port verwenden!


FIREWALL EINRICHTEN
-------------------
Damit andere Rechner auf WinPing zugreifen können, müssen die Ports in
der Windows-Firewall freigegeben werden:

  1. Windows-Firewall mit erweiterter Sicherheit öffnen
  2. Eingehende Regel > Neue Regel > Port
  3. TCP, Port 7100 (bzw. den angepassten Port) freigeben
  4. Für Throughput-Tests: TCP + UDP Port 7101 freigeben

Oder per PowerShell (als Administrator):

  New-NetFirewallRule -DisplayName "WinPing Web" -Direction Inbound -Protocol TCP -LocalPort 7100 -Action Allow
  New-NetFirewallRule -DisplayName "WinPing Throughput TCP" -Direction Inbound -Protocol TCP -LocalPort 7101 -Action Allow
  New-NetFirewallRule -DisplayName "WinPing Throughput UDP" -Direction Inbound -Protocol UDP -LocalPort 7101 -Action Allow


PASSWORTSCHUTZ
--------------
Für den Zugriff von außerhalb sollte der Passwortschutz aktiviert werden:

1. In config.json:
   "auth": {
     "enabled": true,
     "username": "admin",
     "password": "EinSicheresPasswort"
   }

2. Oder über die Weboberfläche: Einstellungen > Authentifizierung


ZUGRIFF VON ANDEREN GERÄTEN
-----------------------------
Von einem anderen Rechner im Netzwerk:
  http://<IP-des-Servers>:7100

Beispiel:
  http://192.168.178.20:7100

Für externen Zugriff (Internet) wird ein Reverse Proxy mit HTTPS empfohlen
(z.B. nginx, Caddy, IIS ARR).


REMOTE AGENTS
-------------
WinPing kann von entfernten Standorten aus überwachen. Dazu wird auf dem
entfernten System ein Agent gestartet, der sich automatisch beim Server
registriert und auf Anfrage Probes ausführt.

Agent starten (als EXE, kein Python nötig):

  WinPingAgent.exe http://<server>:7100 --name "Standort Berlin"

Alle Parameter:
  WinPingAgent.exe <server-url> [Optionen]

  --name NAME         Name des Agents (z.B. "Büro Berlin")
  --location ORT      Standort für die Geo-Map (z.B. "Berlin")
  --lat BREITENGRAD   GPS-Breitengrad (z.B. 52.52)
  --lon LÄNGENGRAD    GPS-Längengrad (z.B. 13.405)
  --interval SEK      Heartbeat-Intervall in Sekunden (Standard: 30)

Beispiele:
  WinPingAgent.exe http://192.168.178.20:7100 --name "Berlin" --location "Berlin"
  WinPingAgent.exe http://server.firma.de:7100 --name "München" --lat 48.14 --lon 11.58

Wenn auth aktiviert ist, muss der Agent sich authentifizieren — er nutzt
automatisch die gleichen Credentials wie der Server.


THROUGHPUT-TESTS
----------------
WinPing enthält einen eingebauten Throughput-Testserver (ähnlich iperf3)
für Geschwindigkeitsmessungen zwischen zwei Systemen.

Auf dem entfernten System starten (als EXE, kein Python nötig):

  Server-Modus:
  WinPingTP.exe -s

  Client-Modus (misst und sendet Ergebnis an WinPing):
  WinPingTP.exe -c <server-ip> --report http://<winping-server>:7100

Alle Parameter:
  -s, --server        Als Server starten (Port 7101)
  -c, --client HOST   Als Client verbinden
  -p, --port PORT     Port (Standard: 7101)
  -t, --time SEK      Testdauer in Sekunden (Standard: 10)
  -P, --parallel N    Parallele Streams (Standard: 1)
  -R, --reverse       Reverse-Modus (Server sendet)
  --bidir             Bidirektionaler Test
  -u, --udp           UDP statt TCP verwenden
  --report URL        Ergebnis an WinPing-Server melden
  --name NAME         Name dieses Systems im Ergebnis

Beispiele:
  WinPingTP.exe -s
  WinPingTP.exe -c 192.168.178.30 -t 30
  WinPingTP.exe -c 192.168.178.30 --bidir --report http://192.168.178.20:7100
  WinPingTP.exe -c 10.0.0.5 -t 60 -P 4 --report http://server:7100 --name "PC-Berlin"

Ergebnisse erscheinen im Bereich "Throughput" in der Weboberfläche.
Einzelne Ergebnisse können per CSV exportiert werden.


ALS WINDOWS-DIENST INSTALLIEREN
--------------------------------
Damit WinPing im Hintergrund läuft (auch ohne angemeldeten Benutzer):

1. Zusätzliches Paket installieren:
   pip install pywin32
   python -m pywin32_postinstall -install

2. Dienst installieren (als Administrator):
   python service.py install

3. Dienst starten:
   python service.py start

Weitere Befehle:
   python service.py stop      - Dienst stoppen
   python service.py restart   - Dienst neu starten
   python service.py remove    - Dienst entfernen

Alternativ mit NSSM (https://nssm.cc/):
   nssm install WinPing python.exe app.py


OPTIONALE PAKETE
----------------
pip install msal          - Microsoft Graph E-Mail-Versand
pip install pywin32       - Windows-Dienst-Unterstützung
pip install pysnmp        - SNMP-Monitoring
pip install pyinstaller   - Agent/Throughput-Tool als EXE bauen


BACKUP
------
- Manuell: Einstellungen > Datenbank > Backup erstellen
- Automatisch: Einstellungen > Datenbank > Auto-Backup aktivieren
- Für ein vollständiges Backup genügt es, config.json und winping.db
  zu sichern


HILFE
-----
- Im Browser: http://localhost:7100/help (oder "Hilfe"-Button oben rechts)
- API-Dokumentation: http://localhost:7100/api/docs
- Support: support@mt-computerservice.de


DATEIEN
-------
app.py              - Hauptanwendung (Flask-Webserver)
pinger.py           - Probe-Scheduler und Ping/HTTP/DNS/TCP-Parser
database.py         - SQLite-Datenbankzugriff
alerting.py         - Alerting und Benachrichtigungen
anomaly.py          - Anomalie-Erkennung
reports.py          - SLA-Reports und geplante Berichte
throughput.py       - Eingebauter Throughput-Testserver und -Client
agent.py            - Remote Agent (Python-Skript)
build_agent.py      - Build-Skript für standalone Agent/Throughput-EXE
service.py          - Windows-Dienst-Wrapper
config.json         - Konfiguration (Ziele, Alerts, Einstellungen)
requirements.txt    - Python-Abhängigkeiten
install.bat         - Installations-Skript
start.bat           - Start-Skript
static/app.js       - Frontend-Logik
static/style.css    - Frontend-Styling
templates/*.html    - HTML-Templates
