Commit 5: Scanner-Engine (DNS, Portscan, Titel/Favicon, Softwareerkennung, FritzBox TR-064)

This commit is contained in:
2026-07-19 02:22:54 +02:00
parent 129b4253b5
commit 28bccb9d16
13 changed files with 744 additions and 18 deletions

View File

@@ -65,14 +65,37 @@ Dieser erste Commit liefert ein lauffähiges Grundgerüst:
- ✅ Kategorien-API (`/api/categories`), inkl. Umbenennen, Löschen (Dienste behalten
ihre Zuordnung nicht, werden aber nicht gelöscht) und Bulk-Reorder für Drag & Drop
- ✅ Favoriten-Toggle direkt in der Trefferliste (Stern anklicken)
- ✅ Scanner-Engine + API (`POST /api/scan/devices/:id`, `POST /api/scan/fritzbox`):
DNS-Kandidaten (hostname/.home/.local), Portscan (80, 443 + typische Ports),
Titel-/Favicon-Auslesen, Softwareerkennung, FritzBox-Geräteliste per TR-064
(HTTP-Digest-Auth). Läuft ausschließlich manuell per API-Aufruf nie automatisch.
Benutzeränderungen an Diensten (Name, Kategorie, Favorit, Alias, Icon, Reihenfolge)
bleiben bei erneuten Scans garantiert erhalten.
Noch **nicht** enthalten (folgt in den nächsten Commits):
- Scanner (FritzBox, DNS, HTTP/HTTPS, Portscan, Softwareerkennung)
- Adminbereich mit Kategorien-Verwaltungsoberfläche (Erstellen, Umbenennen,
Drag & Drop) — Backend-API dafür existiert bereits
- Adminbereich mit "Jetzt scannen"-Button und Kategorien-Verwaltungsoberfläche
— beide Backend-APIs existieren bereits vollständig
- TanStack Router, Plugin-System, PWA-Manifest, shadcn/ui, RHF
### FritzBox-Scan konfigurieren
Der FritzBox-Scan benötigt drei Umgebungsvariablen (z. B. in `docker-compose.yml`
beim `backend`-Service oder lokal per `.env`):
```
FRITZBOX_HOST=192.168.1.1
FRITZBOX_USERNAME=<TR-064-Benutzername>
FRITZBOX_PASSWORD=<TR-064-Passwort>
FRITZBOX_PORT=49000 # optional, Default 49000
```
TR-064-Zugriff muss in der FritzBox unter *Heimnetz → Netzwerk → Netzwerkeinstellungen
→ „Zugriff für Anwendungen zulassen"* aktiviert sein. Getestet wurde der komplette
SOAP-/Digest-Auth-Ablauf gegen einen Mock-Server mit realistischer TR-064-Antwort
(korrektes und falsches Passwort); ein Test gegen eine echte FritzBox war in dieser
Entwicklungsumgebung nicht möglich (kein Netzwerkzugriff auf lokale Geräte).
Siehe [`docs/ROADMAP.md`](./docs/ROADMAP.md) für die geplante Reihenfolge.
## API-Endpunkte (Stand Commit 2)
@@ -97,6 +120,11 @@ PATCH /api/categories/reorder Body: [{ id, order }, ...]
PATCH /api/categories/:id Umbenennen
DELETE /api/categories/:id Dienste behalten ihre category nicht mehr (null),
werden aber nicht gelöscht
POST /api/scan/devices/:id Netzwerk-Scan für ein Gerät (DNS, Ports, Titel,
Favicon, Softwareerkennung); legt/aktualisiert Dienste
POST /api/scan/fritzbox Liest Geräteliste der FritzBox per TR-064
(erfordert FRITZBOX_HOST/USERNAME/PASSWORD)
```
## Deployment auf dem Server (xlc-launchpad)