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:
@@ -47,9 +47,15 @@ Befehl, der ausgeführt wird — nichts passiert unangekündigt.
|
||||
zurückschreiben. Verbindungslinien laufen animiert in Flussrichtung
|
||||
("von → nach"); Kästchen lassen sich frei verschieben (Linien folgen
|
||||
live mit), ein Button setzt die Anordnung zurück.
|
||||
- **Geräte** — LAN-Scanner (DHCP-Leases + ARP + Bridge-Host-Tabelle),
|
||||
eine Tabelle pro physischem Port. Rechtsklick weist einem Gerät eine
|
||||
feste IP-Adresse zu (RouterOS' "Make Static") oder entfernt sie wieder.
|
||||
- **LAN-Scanner** (vormals "Geräte") — DHCP-Leases + ARP + Bridge-Host-
|
||||
Tabelle, eine Tabelle pro physischem Port. Rechtsklick weist einem Gerät
|
||||
eine feste IP-Adresse zu (RouterOS' "Make Static") oder entfernt sie
|
||||
wieder — der Warnhinweis dazu erklärt auch den Rückweg (Rechtsklick →
|
||||
"Feste Zuweisung entfernen", danach Gerät kurz trennen/neu verbinden).
|
||||
**Netzwerk-Tools** (Rechtsklick auf ein Gerät): Ping/Traceroute/DNS-
|
||||
Auflösung vom Router aus, sowie ein **Port-Scan** direkt von diesem Mac
|
||||
(TCP-Verbindungsversuch auf ~19 gängige Ports, farbig: rot=offen,
|
||||
grün=geschlossen, grau=keine Antwort).
|
||||
- **Experte** — kuratierte Formulare (mit Tooltips/Warnhinweisen) für
|
||||
die wichtigsten RouterOS-Bereiche (Firewall/NAT/Mangle/Raw komplett,
|
||||
plus Interfaces/IP/VPN/WLAN/Queues/System/Werkzeuge), plus ein
|
||||
@@ -72,7 +78,7 @@ flowchart TD
|
||||
Connect["Verbinden"]
|
||||
Setup["Einrichten-Wizard"]
|
||||
Overview["Übersicht"]
|
||||
Devices["Geräte"]
|
||||
Devices["LAN-Scanner"]
|
||||
Expert["Experte"]
|
||||
Backup["Sicherungen"]
|
||||
end
|
||||
@@ -89,6 +95,8 @@ flowchart TD
|
||||
|
||||
Backup -. "eigene SSH-Verbindung<br/>(Backup/Restore/Werksreset/Update)" .-> SSH2["SSHTransport"]
|
||||
Connect -. "eigene SSH-Verbindung<br/>(InterfaceTrafficMonitor, 3s-Polling)" .-> SSH3["SSHTransport"]
|
||||
Devices -. "eigene SSH-Verbindung<br/>(NetworkToolsService: Ping/Traceroute/DNS)" .-> SSH4["SSHTransport"]
|
||||
Devices -. "direkte TCP-Verbindung<br/>(PortScanner, nicht über den Router)" .-> LANDevice[("Gerät im LAN")]
|
||||
|
||||
Connect --> Saved["SavedRoutersStore<br/>(Bekannte Router)"]
|
||||
Saved --> Defaults[("UserDefaults<br/>(lokal, kein Router-Zugriff)")]
|
||||
@@ -97,18 +105,25 @@ flowchart TD
|
||||
SSH --> Router
|
||||
SSH2 --> Router
|
||||
SSH3 --> Router
|
||||
SSH4 --> Router
|
||||
```
|
||||
|
||||
`ConnectionService` ist der einzige zwischen den Tabs geteilte State
|
||||
(REST-zuerst, SSH-Fallback). Einmalige System-Aktionen (Backup,
|
||||
Wiederherstellung, Werksreset, Updates) laufen bewusst über eine jeweils
|
||||
eigene, dedizierte SSH-Verbindung statt über den aktiven Live-Transport —
|
||||
`InterfaceTrafficMonitor` folgt demselben Muster für sein 3-Sekunden-
|
||||
Polling der Live-Interface-Durchsätze (`/interface monitor-traffic` ist
|
||||
ein reiner CLI-Befehl ohne REST-Äquivalent). Ein generischer Menü-Engine
|
||||
(`fetchMenuItems`/`fetchFieldValues`) macht praktisch jedes RouterOS-Menü
|
||||
lesbar, auch ohne kuratiertes Schema — darauf bauen Übersicht-, Geräte-
|
||||
und Experte-Tab gemeinsam auf, ebenso `ConnectionService.
|
||||
`InterfaceTrafficMonitor` (3-Sekunden-Polling der Live-Interface-
|
||||
Durchsätze) und `NetworkToolsService` (Ping/Traceroute/DNS-Auflösung im
|
||||
LAN-Scanner-Tab) folgen demselben Muster, da die zugrundeliegenden
|
||||
RouterOS-Befehle (`/interface monitor-traffic`, `/ping`,
|
||||
`/tool traceroute`, `/resolve`) reine CLI-Befehle ohne REST-Äquivalent
|
||||
sind. `PortScanner` (ebenfalls LAN-Scanner-Tab) geht dagegen gar nicht
|
||||
über den Router — ein reiner TCP-Verbindungsversuch direkt von diesem Mac
|
||||
zum jeweiligen LAN-Gerät, da RouterOS selbst keinen Portscanner anbietet.
|
||||
Ein generischer Menü-Engine (`fetchMenuItems`/`fetchFieldValues`) macht
|
||||
praktisch jedes RouterOS-Menü lesbar, auch ohne kuratiertes Schema —
|
||||
darauf bauen Übersicht-, LAN-Scanner- und Experte-Tab gemeinsam auf,
|
||||
ebenso `ConnectionService.
|
||||
checkPortConflict(interfaceName:)` für die LAN-Port-Konflikt-Prüfung im
|
||||
Einrichten-Assistenten. `SavedRoutersStore` (Bekannte Router) ist bewusst
|
||||
komplett lokal — ein JSON-Array in `UserDefaults`, kein Router-Zugriff;
|
||||
@@ -134,6 +149,7 @@ nur die zugehörigen Passwörter liegen weiterhin im macOS-Schlüsselbund.
|
||||
| M17 | Bekannte Router (Verbinden-Tab), Standort-Feld, Scroll-Cap | ✅ live verifiziert |
|
||||
| M18 | Live-Traffic-Anzeige an Interfaces (Verbinden-Tab) | ✅ live verifiziert |
|
||||
| M19 | Übersicht-Tab: Flussanimation + verschiebbare Knoten | ✅ live verifiziert |
|
||||
| M20 | LAN-Scanner: Umbenennung, Netzwerk-Tools (Ping/Traceroute/DNS/Port-Scan) | ✅ live verifiziert |
|
||||
| — | LAN-Port-Konflikt-Prüfung + "Fertig"-Button (Einrichten) | 🔶 gebaut, Live-Test offen |
|
||||
|
||||
Ausführlicher Stand inkl. aller gefundenen Bugs, offener Punkte und
|
||||
@@ -154,10 +170,12 @@ RouterOS/
|
||||
│ │ │ ├── RouterOSMenuItem.swift — generisches Item für jeden RouterOS-Menüpfad
|
||||
│ │ │ ├── RouterOSSchema.swift / RouterOSSchemaCatalog.swift — kuratierte Formular-Schemas (Experte-Tab)
|
||||
│ │ │ ├── OverviewGraph.swift — Knoten/Kanten-Modell fürs Übersicht-Diagramm
|
||||
│ │ │ ├── LanDevice.swift — ein Gerät im Geräte-Tab (Lease+ARP+Bridge-Host verschmolzen)
|
||||
│ │ │ ├── LanDevice.swift — ein Gerät im LAN-Scanner-Tab (Lease+ARP+Bridge-Host verschmolzen)
|
||||
│ │ │ ├── SavedRouter.swift — ein Eintrag in "Bekannte Router" (Host/Name/Standort)
|
||||
│ │ │ ├── PortConflict.swift — LAN-Port-Konflikt-Prüfung (Bridge/Adresse/DHCP-Client/PPPoE)
|
||||
│ │ │ ├── InterfaceTraffic.swift — ein Live-Durchsatz-Sample für die Traffic-Anzeige
|
||||
│ │ │ ├── NetworkToolResult.swift — Rohausgabe von Ping/Traceroute/DNS-Auflösung
|
||||
│ │ │ ├── PortScanResult.swift — Ergebnis eines Port-Scans, ein Eintrag pro Port
|
||||
│ │ │ └── RouterOSModels.swift — Credentials, DeviceInfo, RouterBoardInfo, PackageUpdateInfo, Fehler
|
||||
│ │ ├── Networking/
|
||||
│ │ │ ├── RouterOSTransport.swift — Protocol: connect/fetch.../apply/disconnect
|
||||
@@ -172,14 +190,16 @@ RouterOS/
|
||||
│ │ ├── UpdateService.swift — Software-/Firmware-Update, Neustart
|
||||
│ │ ├── KeychainService.swift — Passwort-Speicherung
|
||||
│ │ ├── SavedRoutersStore.swift — "Bekannte Router"-Liste (JSON in UserDefaults)
|
||||
│ │ └── InterfaceTrafficMonitor.swift — pollt Live-Durchsatz über eigene SSH-Verbindung
|
||||
│ │ ├── InterfaceTrafficMonitor.swift — pollt Live-Durchsatz über eigene SSH-Verbindung
|
||||
│ │ ├── NetworkToolsService.swift — Ping/Traceroute/DNS-Auflösung über eigene SSH-Verbindung
|
||||
│ │ └── PortScanner.swift — TCP-Port-Scan direkt von diesem Mac (Network.framework)
|
||||
│ ├── Core/Localization/
|
||||
│ │ └── L10n.swift — DE/EN-Übersetzungshelfer (Dictionary-Lookup, kein String Catalog)
|
||||
│ ├── Features/
|
||||
│ │ ├── Wizard/Steps/Connect/ — Verbinden-Tab
|
||||
│ │ ├── Wizard/Steps/Setup/ — Einrichten-Tab (Mode→Wan→Lan→Vlan→Wifi→Firewall→Review)
|
||||
│ │ ├── Overview/ — Übersicht-Tab
|
||||
│ │ ├── Devices/ — Geräte-Tab
|
||||
│ │ ├── Devices/ — LAN-Scanner-Tab
|
||||
│ │ ├── Expert/ — Experte-Tab
|
||||
│ │ └── Backup/ — Sicherungen-Tab
|
||||
│ └── Resources/Assets.xcassets/ — App-Icon
|
||||
|
||||
Reference in New Issue
Block a user