forked from kay/RouterOS
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:
+65
@@ -1204,6 +1204,71 @@ grün, wartet auf Test durch den Nutzer in Xcode):
|
||||
("das vierschieben funktioniert super, die Linien folgen auch" /
|
||||
"ok, der button ist da und funktioniert" / "funktioniert").
|
||||
|
||||
- ✅ M20: LAN-Scanner-Umbau — Umbenennung, Netzwerk-Tools, mehrere kleine
|
||||
UX-Nachbesserungen.
|
||||
- **Tab umbenannt**: "Geräte" → "LAN-Scanner" (Nutzerwunsch, "oder
|
||||
ähnliches"), Toolbar-Button "Aktualisieren" → "Neu scannen"
|
||||
(macht exakt dasselbe — DHCP-Leases/ARP/Bridge-Host neu abfragen —,
|
||||
Umbenennung passt nur besser zum "Scanner"-Namen).
|
||||
- **Netzwerk-Tools-Untermenü** beim Rechtsklick auf ein Gerät:
|
||||
Ping/Traceroute/DNS-Auflösung (nslookup) — alle drei vom Router aus
|
||||
über eine neue dedizierte SSH-Verbindung (`NetworkToolsService`,
|
||||
gleiches Muster wie `BackupService`/`InterfaceTrafficMonitor`, da
|
||||
`/ping`/`/tool traceroute`/`/resolve` reine CLI-Befehle ohne REST-
|
||||
Äquivalent sind). Ergebnis als Rohtext im Sheet gezeigt statt
|
||||
geparst — das genaue Ausgabeformat dieser Tools ist nicht gegen
|
||||
echte Hardware verifiziert, nach den Parser-Überraschungen bei M18
|
||||
bewusst vorsichtig. Sicherheitsmaßnahme: IP/Hostname eines Geräts
|
||||
stammen letztlich aus dessen eigener (potenziell manipulierbarer)
|
||||
DHCP-Anfrage — vor dem Einsetzen in den RouterOS-Befehlsstring auf
|
||||
ein sicheres Zeichen-Set geprüft (`NetworkToolsService.sanitized`),
|
||||
da RouterOS' Konsole ";" als Befehlstrenner behandelt und ein
|
||||
böswillig gesetzter Hostname sonst einen zweiten Befehl einschleusen
|
||||
könnte.
|
||||
- **Port-Scan** (Nutzerwunsch: "Offene Ports rot, geschlossene grün,
|
||||
nicht erreichbare grau") — läuft bewusst NICHT über den Router
|
||||
(RouterOS hat kein eingebautes Portscan-Tool), sondern direkt von
|
||||
diesem Mac per `Network.framework`/`NWConnection` gegen ~19 gängige
|
||||
TCP-Ports parallel. **Live-Bug gefunden und gefixt**: eine
|
||||
verweigerte Verbindung (Port zu, TCP RST) meldet sich bei
|
||||
`NWConnection` über den `.waiting`-Zustand, nicht über `.failed` —
|
||||
der ursprüngliche Code prüfte nur `.failed`, wartete bei einer
|
||||
Ablehnung also den vollen Timeout aus und meldete fälschlich
|
||||
"nicht erreichbar" statt "geschlossen". Test hat das direkt gegen
|
||||
einen echten (aber garantiert nicht belegten) Loopback-Port
|
||||
aufgedeckt, kein Rätselraten nötig.
|
||||
- **Warnhinweis "Feste IP-Adresse zuweisen?" erweitert** (Nutzerwunsch:
|
||||
"der Hinweis, wie die Adresse wieder in dynamisch gemacht werden
|
||||
kann") — nennt jetzt explizit den Rückweg (Rechtsklick → "Feste
|
||||
Zuweisung entfernen" im selben Tab) und dass das Gerät danach die
|
||||
Verbindung kurz trennen/neu aufbauen muss.
|
||||
- **"Neu scannen"-Button prominenter gemacht** (Nutzerwunsch: "wird
|
||||
übersehen") — `.buttonStyle(.borderedProminent)` statt eines reinen
|
||||
Icon-Buttons.
|
||||
- **DE/EN-Umschalter zeigt jetzt Landesflaggen** (🇬🇧/🇩🇪) statt
|
||||
"EN"/"DE"-Text — zeigt die Flagge der Sprache, zu der ein Klick
|
||||
wechselt, exakt dieselbe "switch to"-Logik wie vorher.
|
||||
- 92 Tests grün (6 neue `PortScannerTests`, 6 neue
|
||||
`NetworkToolsServiceTests` für die Zeichen-Validierung). **Alle
|
||||
Teile live bestätigt** ("funktioniert" / "sieht gut aus und
|
||||
funktioniert").
|
||||
- Nebenbei: großer `.alert`/`.confirmationDialog`/`.sheet`-Modifier-
|
||||
Stapel in `DevicesView.swift` löste erneut Bug 19 aus ("compiler is
|
||||
unable to type-check this expression in reasonable time") — nach
|
||||
demselben, bereits etablierten Muster in zwei `View`-Extension-
|
||||
Funktionen aufgeteilt (`withStaticAssignmentDialogs`/
|
||||
`withDeviceDetailSheets`).
|
||||
|
||||
**Nutzerfrage, keine Umsetzung** (2026-09-15): ob es Sinn macht, weitere
|
||||
Sprachen "per Plugin" zu importieren. Antwort: für 1-2 weitere feste
|
||||
Sprachen passt das bestehende `L10n.swift`-Dictionary-Muster gut; ein
|
||||
echtes ladbares Plugin-System wäre für dieses Nischen-Tool vermutlich
|
||||
Overkill ohne konkrete Nachfrage. Nutzer bleibt vorerst bei DE/EN, hat
|
||||
aber erwähnt, dass Spanisch (und evtl. Hindi/indischer Markt, unklar)
|
||||
später dazukommen könnte, da MikroTik-Router in ärmeren Ländern
|
||||
(Brasilien, spanischsprachige Länder) stark verbreitet sind — siehe
|
||||
Claude-Memory `future-language-support.md` für Details.
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. ~~M16: restliche `RouterOSSchemaCatalog.swift`-Sektionen übersetzen~~
|
||||
|
||||
Reference in New Issue
Block a user