feat(core): the firewall settings page of routers after Java, measured against Java

The page konfig changes the firewall at run time (into the snapshot, back
into the project through projectWithSimulationChanges). KonfigCases feeds
Java's plug-in directly (25 cases, de and en); RouterWebRun plays two
stories over the network. Ten Java bugs named, not adopted. The web server
answers a method not written GET or POST with 501, as Java does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 18:13:31 +00:00
co-authored by Claude Opus 5.5
parent 7dac57cbbe
commit 8438b42018
23 changed files with 13229 additions and 24 deletions
+38
View File
@@ -646,3 +646,41 @@ Gemessen (01.10.2026):
* Java zählt TCP-Sequenznummern und Segmente in Zeichen seiner Strings: Ein
„ä“ auf der Routen-Seite ist eine Stelle, nicht zwei Bytes.
## Firewall-Einstellungen der Router (F3.2c)
`KonfigCases` füttert Javas Seite `konfig` (`FirewallWebKonfig`) direkt mit
den Schritten aus `packages/core/test/firewall-settings.cases.txt` (eine
Anfrage ohne Daten oder die Daten eines Formulars) und schreibt je Schritt
die Seite und die Firewall danach, auf Deutsch und auf Englisch
(`firewall-settings.{de,en}.java.json`; das Gebietsschema wird vor dem
ersten Lesen des Nachrichtenbündels gesetzt). Jeder Fall beginnt mit einem
neuen Router, ohne Regeln, mit drei oder mit der einen Regel, die ein Fall
anlegt (die Seite, die Java zeigen würde, hätte es sie angenommen).
`RouterWebRun` spielt dazu auf `router-web` `konfigIcmp` und `konfigBlock`
über das Netz.
Gemessen (01.10.2026):
* Javas Browserfenster (Swing, `FormSubmitEvent.getData`) schickt jedes Feld
des Formulars in seiner Reihenfolge, UTF-8-kodiert, angehakte Kästchen und
die gewählte Option, dazu nur den gedrückten Knopf.
* Java prüft die Felder beim Lesen: die Quell-IP gegen die Maske, die noch
nicht gelesen ist (also leer), die Maske gegen die IP, ebenso. Eine Regel
mit Quell- oder Zieladresse nimmt die Seite deshalb nie an, in keiner
Reihenfolge der Felder.
* Ein Fehler bleibt im Plug-in stehen und erscheint auf jeder späteren Seite,
auch ohne Daten. Mit zwei Knöpfen zugleich (Speichern und Hinzufügen)
speichert Java und schreibt die Fehler als nackte Liste.
* Java dekodiert die Daten, bevor es sie an `&` und `=` zerlegt: Ein
getipptes `&` zerreißt das Formular. Eine kaputte Kodierung (`%zz`, `%` am
Ende) wirft im Dekodierer, Regel 0 nach unten wirft
(`ArrayIndexOutOfBoundsException`), ein `$` im wieder gefüllten Formular
lässt `replaceAll` scheitern (die Seite ist `null`, also 500).
* Die Maske prüft `isValidSubnetmask`: vier Zahlen (eine leere am Ende fällt
bei Javas `split` weg), `parseInt` mit Vorzeichen, die Bits Einsen, dann
Nullen, mindestens eine Eins (0.0.0.0 ist keine Maske).
* Über das Netz: „ICMP filtern“ aus, und der nächste Ping kommt durch; eine
Regel „TCP 80 verwerfen“ über die erlaubende geschoben, und das SYN des
Browsers bleibt an der Firewall hängen. Javas Router-Server lauschte auch
hier in einem Lauf nie (`run.sh` wiederholt).