M20: LAN-Scanner umbenannt + Netzwerk-Tools (Ping/Traceroute/DNS/Port-Scan)

Tab "Geräte" -> "LAN-Scanner", Refresh-Button "Neu scannen" + prominenter
Stil. Neues Netzwerk-Tools-Menü: Ping/Traceroute/DNS-Auflösung über
NetworkToolsService (eigene SSH-Verbindung, wie Backup/InterfaceTraffic-
Monitor), mit Zeichen-Validierung gegen Command-Injection ueber einen
boeswilligen DHCP-Hostnamen. Port-Scan laeuft direkt von diesem Mac ueber
Network.framework (RouterOS hat kein eingebautes Portscan-Tool) - dabei
einen echten NWConnection-Bug gefunden (verweigerte Verbindung meldet sich
ueber .waiting, nicht .failed) und per Unit-Test gegen einen Loopback-Port
aufgedeckt und gefixt.

Zusaetzlich: Warnhinweis bei "Feste IP zuweisen" erklaert jetzt den
Rueckweg. DE/EN-Umschalter zeigt Landesflaggen statt Text.

92 Tests gruen. HANDOFF.md/README.md (inkl. Mermaid-Diagramm)/Manual.md/
CHATLOG.md aktualisiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
This commit is contained in:
Kay
2026-09-15 22:41:23 +02:00
co-authored by Claude Sonnet 5
parent b5933fa44b
commit 04325e3bbd
15 changed files with 801 additions and 64 deletions
+48
View File
@@ -946,3 +946,51 @@ Test, WLAN/Bonding/PPPoE-Live-Tests).
CHATLOG.md aktualisiert, Commit + Push (inkl. der noch nicht live
getesteten Port-Konflikt-Prüfung + Fertig-Button, auf ausdrücklichen
Nutzerwunsch mitgespeichert).
- "ergänze die Mermaid-Grafik um die neuen Features" → README.md-
Architekturdiagramm um `InterfaceTrafficMonitor`s eigene SSH-Verbindung
und den lokalen `SavedRoutersStore`→`UserDefaults`-Pfad ergänzt. Commit
+ Push.
- "der Tab 'Geräte' muss umbenannt werden in Lan-Scanner ... zusätzlich
einen Button 'neu scannen'" → M20 gestartet: Tab umbenannt, "Aktuali-
sieren"-Button zu "Neu scannen" (identische Aktion, nur klarerer
Name). "sieht gut aus" → bestätigt.
- "den Lan-scanner bohren wir noch ein wenig auf... Netzwerk-Tools
liste... nslookup, ping etc." → `NetworkToolsService` (eigene SSH-
Verbindung, `/ping`/`/tool traceroute`/`/resolve`), Rohausgabe im
Sheet statt geparst (Format nicht live verifiziert). Sicherheits-
maßnahme: Zeichen-Validierung gegen Command-Injection über einen
böswilligen DHCP-Hostnamen (RouterOS-Konsole trennt Befehle mit ";").
Live bestätigt.
- "die Warnung zum zuweisen einer festen IP-Adresse... muss erweitert
werden. der Hinweis, wie die Adresse wieder in dynamisch gemacht
werden kann" → Warnhinweis um Rückweg-Erklärung ergänzt (Rechtsklick
→ "Feste Zuweisung entfernen", Gerät danach kurz trennen/neu
verbinden). Live bestätigt.
- "der refresh-button muss prominenter werden" → `.buttonStyle(.
borderedProminent)` auf "Neu scannen". Live bestätigt.
- "ersetze DE und EN mit den jeweiligen Landesflaggen" → 🇬🇧/🇩🇪 statt
Text, zeigt weiter die Sprache, zu der ein Klick wechselt. Live
bestätigt.
- "macht es sinn andere Sprachen per Plugin zu importieren?" (nur Frage,
keine Umsetzung) → Empfehlung: für 1-2 feste Sprachen reicht das
bestehende `L10n.swift`-Muster, ein echtes Plugin-System wäre Overkill
ohne konkrete Nachfrage. "lass uns bei DE/EN bleiben" → bestätigt.
"eventuell kommt spanisch indisch noch dazu... MikroTik-Router günstig,
daher oft in ärmeren Ländern wie Brasilien" → als Claude-Memory
(`future-language-support.md`) für Folgesessions festgehalten, keine
Code-Änderung.
- "können wir die Netzwerk-tools noch erweitern? ein Portscanner...
(Offene Ports rot, geschlossene grün, nicht erreichbare grau)" →
`PortScanner` (Network.framework, TCP-Connect direkt von diesem Mac,
NICHT über den Router — RouterOS hat kein eingebautes Portscan-Tool).
Live-Bug beim ersten Testlauf-Versuch bereits im eigenen Unit-Test
gefunden: `NWConnection` meldet eine verweigerte Verbindung über
`.waiting`, nicht `.failed` — der ursprüngliche Code prüfte nur
`.failed` und wartete den vollen Timeout aus statt sofort "geschlossen"
zu melden. Gefixt, Test bestätigt es gegen einen echten (aber
garantiert freien) Loopback-Port. 92 Tests grün. "sieht gut aus und
funktioniert, alles speichern committen und pushen, denk an die
Mermaid-Grafik" → README.md/HANDOFF.md/Manual.md/CHATLOG.md
aktualisiert (inkl. Mermaid-Diagramm um `NetworkToolsService`-SSH-
Verbindung und `PortScanner`s direkten Mac→Gerät-Pfad ergänzt),
Commit + Push.