diff --git a/corpus/README.md b/corpus/README.md index 875c15f..87b0aad 100644 --- a/corpus/README.md +++ b/corpus/README.md @@ -12,4 +12,5 @@ Projektdateien, an denen Lesen und Schreiben gemessen werden. Alle GPL. Swift-Leser aus jeder Datei macht. **Swift ist hier kein Schiedsrichter** — er verwirft den Java-Gateway unter der Beschriftung `Heimrouter` samt seinen Kabeln und Geräte, deren Position XMLEncoder über eine Rückverweis-Kette -schreibt (s. Plan §13, M2). Schiedsrichter für das Dateiformat ist Java. +schreibt (s. Plan §13, M2). Schiedsrichter für das Dateiformat ist Java: `corpus.java.json` schreibt das +Java-Orakel (`npm run oracle:java`). diff --git a/corpus/corpus.java.json b/corpus/corpus.java.json new file mode 100644 index 0000000..5d1457e --- /dev/null +++ b/corpus/corpus.java.json @@ -0,0 +1,9299 @@ +{ + "ipad-fixtures/Public_and_Private_Networks_2_EN.fls": { + "success": true, + "nodes": [ + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 79, + 124, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.12", + "mask": "255.255.255.0", + "mac": "FB:07:94:E4:05:06", + "gateway": "192.168.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Gateway", + "name": "Gateway", + "label": "Heimrouter", + "bounds": [ + 367, + 91, + 84, + 19 + ], + "ports": [ + { + "ip": "42.0.0.10", + "mask": "255.0.0.0", + "mac": "18:C4:B3:33:AB:BD", + "gateway": "42.0.0.1", + "dns": "" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "28:62:32:5B:5C:90", + "gateway": "42.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 521, + 364, + 167, + 19 + ], + "ports": [ + { + "ip": "42.0.0.1", + "mask": "255.255.255.0", + "mac": "A7:1D:A9:4C:C4:A7", + "gateway": "", + "dns": "" + }, + { + "ip": "160.10.20.1", + "mask": "255.255.255.0", + "mac": "D1:3E:5F:E6:BA:F9", + "gateway": "", + "dns": "" + }, + { + "ip": "8.8.8.1", + "mask": "255.255.255.0", + "mac": "03:3C:DF:0A:44:1E", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "mywebserver.de (160.10.20.10)", + "label": "Rechner", + "bounds": [ + 656, + 419, + 240, + 19 + ], + "ports": [ + { + "ip": "160.10.20.10", + "mask": "255.255.255.0", + "mac": "71:6A:B4:64:00:4E", + "gateway": "160.10.20.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 383, + 422, + 68, + 19 + ], + "ports": [ + { + "ip": "8.8.8.8", + "mask": "255.255.255.0", + "mac": "48:76:39:9B:AC:29", + "gateway": "8.8.8.1", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 168, + 29, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": "45:06:FC:3E:2B:59", + "gateway": "192.168.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Switch", + "name": "Wifi Switch", + "label": "Switch / WLAN", + "bounds": [ + 255, + 167, + 99, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 2 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 1 + ], + [ + 1, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 0 + ], + [ + 6, + 0 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 0, + 0 + ], + [ + 6, + 2 + ] + ], + "wireless": true + } + ], + "documentation": [ + { + "type": 2, + "text": "8.8.8.1\n", + "bounds": [ + 508, + 390, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "42.0.0.1", + "bounds": [ + 587, + 345, + 100, + 24 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "42.0.0.10", + "bounds": [ + 453, + 124, + 100, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "192.168.0.1", + "bounds": [ + 308, + 123, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "160.10.20.1", + "bounds": [ + 631, + 391, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "DNS \nNameserver\n", + "bounds": [ + 373, + 519, + 88, + 41 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License", + "bounds": [ + 37, + 615, + 275, + 59 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 56, + 9, + 459, + 243 + ], + "color": [ + 209, + 232, + 255, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Private Local Area Network (LAN)", + "bounds": [ + 281, + 20, + 175, + 54 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 277, + 260, + 602, + 314 + ], + "color": [ + 255, + 201, + 201, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Public Network (WAN)", + "bounds": [ + 297, + 283, + 215, + 35 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 2, + "text": "[Gateway and Switch are often integrated into one device especially at home.]", + "bounds": [ + 352, + 179, + 153, + 54 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + } + ] + }, + "ipad-fixtures/dns_server.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 250, + 181, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (lokal)", + "label": "Rechner", + "bounds": [ + 213, + 16, + 149, + 19 + ], + "ports": [ + { + "ip": "141.99.5.12", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Rechner", + "name": "Webserver", + "label": "Rechner", + "bounds": [ + 63, + 83, + 98, + 19 + ], + "ports": [ + { + "ip": "141.99.5.10", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 289, + 313, + 90, + 19 + ], + "ports": [ + { + "ip": "141.99.5.11", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (.)", + "label": "Rechner", + "bounds": [ + 735, + 25, + 120, + 19 + ], + "ports": [ + { + "ip": "141.99.5.13", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 483, + 185, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (de.)", + "label": "Rechner", + "bounds": [ + 726, + 145, + 138, + 19 + ], + "ports": [ + { + "ip": "141.99.5.14", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (filius.de.)", + "label": "Rechner", + "bounds": [ + 709, + 276, + 177, + 19 + ], + "ports": [ + { + "ip": "141.99.5.15", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 0, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 3 + ], + [ + 7, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "ipad-fixtures/zwei_rechnernetze_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 164, + 178, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch 2", + "label": "Switch / WLAN", + "bounds": [ + 612, + 104, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server 2.10", + "label": "Rechner", + "bounds": [ + 694, + 19, + 134, + 19 + ], + "ports": [ + { + "ip": "141.99.2.10", + "mask": "255.255.255.0", + "mac": "55:69:1F:18:4C:96", + "gateway": "141.99.2.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 53, + 100, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.10", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "141.99.1.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.11", + "label": "Notebook", + "bounds": [ + 70, + 235, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.11", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 373, + 106, + 167, + 19 + ], + "ports": [ + { + "ip": "141.99.1.1", + "mask": "255.255.255.0", + "mac": "A4:F4:2A:89:9F:E8", + "gateway": "", + "dns": "" + }, + { + "ip": "141.99.2.1", + "mask": "255.255.255.0", + "mac": "6D:B4:5B:F1:70:FC", + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 3, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/Internet_Complete_with_e-Mail_Webserver_Intranet_Portforwarding_Firewall_DHCP_EN.fls": { + "success": true, + "nodes": [ + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 5, + 169, + 100, + 19 + ], + "ports": [ + { + "ip": "10.10.20.11", + "mask": "255.0.0.0", + "mac": "A8:BD:04:A6:63:AD", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 233, + 173, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 2, + 274, + 100, + 19 + ], + "ports": [ + { + "ip": "10.10.20.12", + "mask": "255.0.0.0", + "mac": "3D:67:2A:01:2D:91", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Provider 1", + "label": "Vermittlungsrechner", + "bounds": [ + 419, + 434, + 92, + 19 + ], + "ports": [ + { + "ip": "42.0.0.1", + "mask": "255.255.255.0", + "mac": "2E:E7:53:65:17:0F", + "gateway": "", + "dns": "" + }, + { + "ip": "6.0.0.2", + "mask": "255.255.255.0", + "mac": "1E:27:AE:8E:77:14", + "gateway": "", + "dns": "" + }, + { + "ip": "2.0.0.1", + "mask": "255.255.255.0", + "mac": "4B:A0:59:16:7C:2C", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 548, + 490, + 21, + 19 + ], + "ports": [ + { + "ip": "6.0.0.1", + "mask": "255.255.255.0", + "mac": "C5:AD:0D:4F:97:06", + "gateway": "", + "dns": "" + }, + { + "ip": "11.0.0.1", + "mask": "255.255.255.0", + "mac": "E0:3F:89:38:E3:2C", + "gateway": "", + "dns": "" + }, + { + "ip": "130.100.200.1", + "mask": "255.255.255.0", + "mac": "3C:84:27:63:5A:E3", + "gateway": "", + "dns": "" + }, + { + "ip": "12.0.0.1", + "mask": "255.255.255.0", + "mac": "F5:FB:71:A8:11:59", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 294, + 518, + 21, + 19 + ], + "ports": [ + { + "ip": "2.0.0.2", + "mask": "255.255.255.0", + "mac": "3A:DC:16:7C:AA:78", + "gateway": "", + "dns": "" + }, + { + "ip": "11.0.0.2", + "mask": "255.255.255.0", + "mac": "91:D6:EC:3F:56:B0", + "gateway": "", + "dns": "" + }, + { + "ip": "3.0.0.1", + "mask": "255.255.255.0", + "mac": "16:F2:4D:40:AA:56", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 427, + 583, + 21, + 19 + ], + "ports": [ + { + "ip": "12.0.0.2", + "mask": "255.255.255.0", + "mac": "A2:55:52:6B:6F:27", + "gateway": "", + "dns": "" + }, + { + "ip": "3.0.0.2", + "mask": "255.255.255.0", + "mac": "27:17:86:69:32:C9", + "gateway": "", + "dns": "" + }, + { + "ip": "4.0.0.1", + "mask": "255.255.255.0", + "mac": "B3:22:50:EC:11:FB", + "gateway": "", + "dns": "" + }, + { + "ip": "8.0.0.1", + "mask": "255.0.0.0", + "mac": "63:D5:E4:BB:37:E6", + "gateway": "", + "dns": "" + }, + { + "ip": "15.0.0.1", + "mask": "255.255.255.0", + "mac": "15:DA:6A:2F:5F:3A", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 632, + 643, + 21, + 19 + ], + "ports": [ + { + "ip": "4.0.0.2", + "mask": "255.255.255.0", + "mac": "80:6D:2A:57:59:B2", + "gateway": "", + "dns": "" + }, + { + "ip": "5.0.0.1", + "mask": "255.255.255.0", + "mac": "69:EB:EB:6E:F6:82", + "gateway": "", + "dns": "" + }, + { + "ip": "120.130.140.1", + "mask": "255.255.255.0", + "mac": "C9:5D:41:10:67:82", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 781, + 574, + 21, + 19 + ], + "ports": [ + { + "ip": "5.0.0.2", + "mask": "255.255.255.0", + "mac": "A0:D8:AE:E8:2A:E1", + "gateway": "", + "dns": "" + }, + { + "ip": "140.100.200.1", + "mask": "255.255.255.0", + "mac": "A2:3C:B4:FB:9D:D1", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS (8.8.8.8)", + "label": "Rechner", + "bounds": [ + 208, + 606, + 111, + 19 + ], + "ports": [ + { + "ip": "8.8.8.8", + "mask": "255.0.0.0", + "mac": "17:66:19:C9:9E:29", + "gateway": "8.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "webserver.com (120.130.140.80)", + "label": "Rechner", + "bounds": [ + 675, + 793, + 246, + 19 + ], + "ports": [ + { + "ip": "120.130.140.80", + "mask": "255.255.255.0", + "mac": "4B:ED:F2:C7:AF:8C", + "gateway": "120.130.140.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "mail.gmx.com (130.100.200.25)", + "label": "Rechner", + "bounds": [ + 693, + 417, + 233, + 19 + ], + "ports": [ + { + "ip": "130.100.200.25", + "mask": "255.255.255.0", + "mac": "47:AF:A1:5F:0E:C7", + "gateway": "130.100.200.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "mail.webmail.com (140.100.200.25)", + "label": "Rechner", + "bounds": [ + 823, + 684, + 264, + 19 + ], + "ports": [ + { + "ip": "140.100.200.25", + "mask": "255.255.255.0", + "mac": "62:A4:B8:31:8D:33", + "gateway": "140.100.200.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "myschool.org (10.0.0.1)", + "label": "Rechner", + "bounds": [ + 139, + 268, + 185, + 19 + ], + "ports": [ + { + "ip": "10.0.0.1", + "mask": "255.0.0.0", + "mac": "C5:39:AE:55:77:F5", + "gateway": "10.0.0.2", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 184, + 781, + 101, + 19 + ], + "ports": [ + { + "ip": "43.0.0.11", + "mask": "255.255.255.0", + "mac": "E4:0B:71:77:E8:25", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + }, + { + "ip": "192.168.1.1", + "mask": "255.255.255.0", + "mac": "F6:F2:70:B5:92:97", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 73, + 840, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.1.11", + "mask": "255.255.255.0", + "mac": "68:3B:FB:D6:E1:D8", + "gateway": "192.168.1.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 1", + "label": "Notebook", + "bounds": [ + 139, + 4, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.13", + "mask": "255.0.0.0", + "mac": "EF:1A:35:6C:C2:DC", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 2", + "label": "Notebook", + "bounds": [ + 267, + 0, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.11", + "mask": "255.0.0.0", + "mac": "19:06:AC:C7:9D:0E", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 3", + "label": "Notebook", + "bounds": [ + 372, + 5, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.14", + "mask": "255.0.0.0", + "mac": "D3:51:75:D6:71:EA", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 4", + "label": "Notebook", + "bounds": [ + 462, + 38, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.12", + "mask": "255.0.0.0", + "mac": "E2:AC:66:8B:39:9F", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Switch", + "name": "Access Point", + "label": "Switch / WLAN", + "bounds": [ + 11, + 76, + 110, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Gateway", + "name": "Firewall", + "label": "Heimrouter", + "bounds": [ + 359, + 319, + 77, + 19 + ], + "ports": [ + { + "ip": "42.0.0.10", + "mask": "255.0.0.0", + "mac": "95:C1:83:23:BB:4C", + "gateway": "42.0.0.1", + "dns": "" + }, + { + "ip": "10.0.0.2", + "mask": "255.0.0.0", + "mac": "D6:AF:B6:8B:75:85", + "gateway": "42.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Provider 2", + "label": "Vermittlungsrechner", + "bounds": [ + 433, + 699, + 92, + 19 + ], + "ports": [ + { + "ip": "43.0.0.1", + "mask": "255.255.255.0", + "mac": "11:EE:8E:9F:31:18", + "gateway": "", + "dns": "" + }, + { + "ip": "15.0.0.2", + "mask": "255.255.255.0", + "mac": "B7:E7:AB:01:FE:F6", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Provider 2 DHCP- Server", + "label": "Rechner", + "bounds": [ + 446, + 791, + 189, + 19 + ], + "ports": [ + { + "ip": "43.0.0.2", + "mask": "255.255.255.0", + "mac": "8B:54:A9:28:2D:18", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Switch", + "name": "Provider 2 Switch", + "label": "Switch / WLAN", + "bounds": [ + 333, + 760, + 143, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 1 + ], + [ + 5, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 3 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 6, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 2 + ], + [ + 7, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 7, + 1 + ], + [ + 8, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 8, + 1 + ], + [ + 12, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 6, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 10, + 0 + ], + [ + 7, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 13, + 0 + ], + [ + 1, + 4 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 16, + 0 + ], + [ + 20, + 1 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 17, + 0 + ], + [ + 20, + 2 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 18, + 0 + ], + [ + 20, + 3 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 19, + 0 + ], + [ + 20, + 4 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 20, + 0 + ], + [ + 1, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 21, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 21, + 1 + ], + [ + 1, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 22, + 1 + ], + [ + 6, + 4 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 2 + ], + [ + 11, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 24, + 0 + ], + [ + 23, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 14, + 0 + ], + [ + 24, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 24, + 1 + ], + [ + 22, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 15, + 0 + ], + [ + 14, + 1 + ] + ], + "wireless": false + } + ], + "documentation": [ + { + "type": 2, + "text": "INTERNET", + "bounds": [ + 570, + 583, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 2, + "text": "Large Intranet with subnets, firewall & portforwarding to Webserver behind Firewall.\n\nLAN-Devices have full internet connectivity. Each has a configured email client.\n\nWiFi-Devices only have HTTP access to the internal Server but can name resolve and ping external internet servers.\n\n", + "bounds": [ + 402, + 164, + 249, + 153 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 62, + 755, + 255, + 193 + ], + "color": [ + 255, + 255, + 227, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Home\n", + "bounds": [ + 209, + 907, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 4, + -4, + 567, + 164 + ], + "color": [ + 255, + 201, + 201, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Wifi-Devices\nSubnet", + "bounds": [ + 242, + 115, + 88, + 36 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 3, + 163, + 121, + 254 + ], + "color": [ + 191, + 255, + 219, + 255 + ], + "font": null + }, + { + "type": 1, + "text": null, + "bounds": [ + -1, + -7, + 661, + 427 + ], + "color": [ + 209, + 232, + 255, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "LAN-Devices\nSubnet", + "bounds": [ + 25, + 378, + 88, + 34 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 2, + "text": "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License", + "bounds": [ + 21, + 429, + 272, + 59 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 331, + 684, + 292, + 263 + ], + "color": [ + 252, + 201, + 163, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Provider Network", + "bounds": [ + 420, + 920, + 110, + 25 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 2, + "text": "42.0.0.0\t", + "bounds": [ + 458, + 383, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "10.0.0.0", + "bounds": [ + 298, + 268, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + } + ] + }, + "java-examples/Internet_Komplett_mit_eMail_Webserver_Intranet_Portforwarding_Firewall_DHCP_DE.fls": { + "success": true, + "nodes": [ + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 5, + 165, + 100, + 19 + ], + "ports": [ + { + "ip": "10.10.20.11", + "mask": "255.0.0.0", + "mac": "A8:BD:04:A6:63:AD", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 233, + 173, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 0, + 269, + 100, + 19 + ], + "ports": [ + { + "ip": "10.10.20.12", + "mask": "255.0.0.0", + "mac": "3D:67:2A:01:2D:91", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Provider 1", + "label": "Vermittlungsrechner", + "bounds": [ + 419, + 434, + 92, + 19 + ], + "ports": [ + { + "ip": "42.0.0.1", + "mask": "255.255.255.0", + "mac": "2E:E7:53:65:17:0F", + "gateway": "", + "dns": "" + }, + { + "ip": "6.0.0.2", + "mask": "255.255.255.0", + "mac": "1E:27:AE:8E:77:14", + "gateway": "", + "dns": "" + }, + { + "ip": "2.0.0.1", + "mask": "255.255.255.0", + "mac": "4B:A0:59:16:7C:2C", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 548, + 490, + 21, + 19 + ], + "ports": [ + { + "ip": "6.0.0.1", + "mask": "255.255.255.0", + "mac": "C5:AD:0D:4F:97:06", + "gateway": "", + "dns": "" + }, + { + "ip": "11.0.0.1", + "mask": "255.255.255.0", + "mac": "E0:3F:89:38:E3:2C", + "gateway": "", + "dns": "" + }, + { + "ip": "130.100.200.1", + "mask": "255.255.255.0", + "mac": "3C:84:27:63:5A:E3", + "gateway": "", + "dns": "" + }, + { + "ip": "12.0.0.1", + "mask": "255.255.255.0", + "mac": "F5:FB:71:A8:11:59", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 294, + 518, + 21, + 19 + ], + "ports": [ + { + "ip": "2.0.0.2", + "mask": "255.255.255.0", + "mac": "3A:DC:16:7C:AA:78", + "gateway": "", + "dns": "" + }, + { + "ip": "11.0.0.2", + "mask": "255.255.255.0", + "mac": "91:D6:EC:3F:56:B0", + "gateway": "", + "dns": "" + }, + { + "ip": "3.0.0.1", + "mask": "255.255.255.0", + "mac": "16:F2:4D:40:AA:56", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 427, + 583, + 21, + 19 + ], + "ports": [ + { + "ip": "12.0.0.2", + "mask": "255.255.255.0", + "mac": "A2:55:52:6B:6F:27", + "gateway": "", + "dns": "" + }, + { + "ip": "3.0.0.2", + "mask": "255.255.255.0", + "mac": "27:17:86:69:32:C9", + "gateway": "", + "dns": "" + }, + { + "ip": "4.0.0.1", + "mask": "255.255.255.0", + "mac": "B3:22:50:EC:11:FB", + "gateway": "", + "dns": "" + }, + { + "ip": "8.0.0.1", + "mask": "255.0.0.0", + "mac": "63:D5:E4:BB:37:E6", + "gateway": "", + "dns": "" + }, + { + "ip": "15.0.0.1", + "mask": "255.255.255.0", + "mac": "15:DA:6A:2F:5F:3A", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 606, + 629, + 21, + 19 + ], + "ports": [ + { + "ip": "4.0.0.2", + "mask": "255.255.255.0", + "mac": "80:6D:2A:57:59:B2", + "gateway": "", + "dns": "" + }, + { + "ip": "5.0.0.1", + "mask": "255.255.255.0", + "mac": "69:EB:EB:6E:F6:82", + "gateway": "", + "dns": "" + }, + { + "ip": "120.130.140.1", + "mask": "255.255.255.0", + "mac": "C9:5D:41:10:67:82", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "", + "label": "Vermittlungsrechner", + "bounds": [ + 746, + 561, + 21, + 19 + ], + "ports": [ + { + "ip": "5.0.0.2", + "mask": "255.255.255.0", + "mac": "A0:D8:AE:E8:2A:E1", + "gateway": "", + "dns": "" + }, + { + "ip": "140.100.200.1", + "mask": "255.255.255.0", + "mac": "A2:3C:B4:FB:9D:D1", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS (8.8.8.8)", + "label": "Rechner", + "bounds": [ + 208, + 606, + 111, + 19 + ], + "ports": [ + { + "ip": "8.8.8.8", + "mask": "255.0.0.0", + "mac": "17:66:19:C9:9E:29", + "gateway": "8.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "webserver.de (120.130.140.80)", + "label": "Rechner", + "bounds": [ + 666, + 777, + 236, + 19 + ], + "ports": [ + { + "ip": "120.130.140.80", + "mask": "255.255.255.0", + "mac": "4B:ED:F2:C7:AF:8C", + "gateway": "120.130.140.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "mail.gmx.de (130.100.200.25)", + "label": "Rechner", + "bounds": [ + 699, + 417, + 223, + 19 + ], + "ports": [ + { + "ip": "130.100.200.25", + "mask": "255.255.255.0", + "mac": "47:AF:A1:5F:0E:C7", + "gateway": "130.100.200.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "mail.webmail.de (140.100.200.25)", + "label": "Rechner", + "bounds": [ + 799, + 649, + 254, + 19 + ], + "ports": [ + { + "ip": "140.100.200.25", + "mask": "255.255.255.0", + "mac": "62:A4:B8:31:8D:33", + "gateway": "140.100.200.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Rechner", + "name": "meine-schule.de (10.0.0.1)", + "label": "Rechner", + "bounds": [ + 130, + 268, + 207, + 19 + ], + "ports": [ + { + "ip": "10.0.0.1", + "mask": "255.0.0.0", + "mac": "C5:39:AE:55:77:F5", + "gateway": "10.0.0.2", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 229, + 784, + 101, + 19 + ], + "ports": [ + { + "ip": "43.0.0.11", + "mask": "255.255.255.0", + "mac": "E4:0B:71:77:E8:25", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + }, + { + "ip": "192.168.1.1", + "mask": "255.255.255.0", + "mac": "F6:F2:70:B5:92:97", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 124, + 826, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.1.11", + "mask": "255.255.255.0", + "mac": "68:3B:FB:D6:E1:D8", + "gateway": "192.168.1.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 1", + "label": "Notebook", + "bounds": [ + 139, + 4, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.11", + "mask": "255.0.0.0", + "mac": "EF:1A:35:6C:C2:DC", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 2", + "label": "Notebook", + "bounds": [ + 267, + 0, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.14", + "mask": "255.0.0.0", + "mac": "19:06:AC:C7:9D:0E", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 3", + "label": "Notebook", + "bounds": [ + 372, + 5, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.13", + "mask": "255.0.0.0", + "mac": "D3:51:75:D6:71:EA", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "iPad 4", + "label": "Notebook", + "bounds": [ + 462, + 38, + 100, + 19 + ], + "ports": [ + { + "ip": "10.50.50.12", + "mask": "255.0.0.0", + "mac": "E2:AC:66:8B:39:9F", + "gateway": "10.0.0.1", + "dns": "10.0.0.1" + } + ] + }, + { + "class": "Switch", + "name": "Access Point", + "label": "Switch / WLAN", + "bounds": [ + 11, + 76, + 110, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Gateway", + "name": "Firewall", + "label": "Heimrouter", + "bounds": [ + 359, + 319, + 77, + 19 + ], + "ports": [ + { + "ip": "42.0.0.10", + "mask": "255.0.0.0", + "mac": "95:C1:83:23:BB:4C", + "gateway": "42.0.0.1", + "dns": "" + }, + { + "ip": "10.0.0.2", + "mask": "255.0.0.0", + "mac": "D6:AF:B6:8B:75:85", + "gateway": "42.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Provider 2", + "label": "Vermittlungsrechner", + "bounds": [ + 461, + 710, + 92, + 19 + ], + "ports": [ + { + "ip": "43.0.0.1", + "mask": "255.255.255.0", + "mac": "11:EE:8E:9F:31:18", + "gateway": "", + "dns": "" + }, + { + "ip": "15.0.0.2", + "mask": "255.255.255.0", + "mac": "B7:E7:AB:01:FE:F6", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Provider 2 DCHP Server", + "label": "Rechner", + "bounds": [ + 473, + 782, + 184, + 19 + ], + "ports": [ + { + "ip": "43.0.0.2", + "mask": "255.255.255.0", + "mac": "55:E4:24:B2:2F:7B", + "gateway": "43.0.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Switch", + "name": "Provider 2 Switch", + "label": "Switch / WLAN", + "bounds": [ + 367, + 775, + 143, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 1 + ], + [ + 5, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 3 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 6, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 2 + ], + [ + 7, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 7, + 1 + ], + [ + 8, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 8, + 1 + ], + [ + 12, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 6, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 10, + 0 + ], + [ + 7, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 13, + 0 + ], + [ + 1, + 4 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 15, + 0 + ], + [ + 14, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 16, + 0 + ], + [ + 20, + 1 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 17, + 0 + ], + [ + 20, + 2 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 18, + 0 + ], + [ + 20, + 3 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 19, + 0 + ], + [ + 20, + 4 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 20, + 0 + ], + [ + 1, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 21, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 21, + 1 + ], + [ + 1, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 22, + 1 + ], + [ + 6, + 4 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 2 + ], + [ + 11, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 23, + 0 + ], + [ + 24, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 22, + 0 + ], + [ + 24, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 24, + 2 + ], + [ + 14, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [ + { + "type": 2, + "text": "INTERNET", + "bounds": [ + 570, + 583, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 2, + "text": "Intranetz mit Subnetzen, Firewall und Portforwarding an Webserver hinter Firewall.\n\nLAN-Geräte haben vollen Internet-Zugriff. Jedes hat einen konfigurierten eMail-Client.\n\nWLAN-Geräte haben HTTP-Zugriff nur auf den internen Server, können aber externe Server auflösen und anpingen. \n\n\n", + "bounds": [ + 399, + 170, + 249, + 153 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 107, + 757, + 245, + 181 + ], + "color": [ + 255, + 255, + 227, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Zu Hause\n", + "bounds": [ + 255, + 897, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 4, + -4, + 567, + 164 + ], + "color": [ + 255, + 201, + 201, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "WLAN-Geräte\nSubnetz", + "bounds": [ + 227, + 117, + 88, + 37 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 3, + 161, + 121, + 253 + ], + "color": [ + 191, + 255, + 219, + 255 + ], + "font": null + }, + { + "type": 1, + "text": null, + "bounds": [ + -1, + -7, + 661, + 425 + ], + "color": [ + 209, + 232, + 255, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "LAN-Geräte\nSubnetz", + "bounds": [ + 20, + 376, + 88, + 39 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + }, + { + "type": 2, + "text": "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License", + "bounds": [ + 21, + 429, + 272, + 59 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 372, + 697, + 246, + 243 + ], + "color": [ + 252, + 201, + 163, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Provider Netzwerk", + "bounds": [ + 440, + 907, + 108, + 23 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 1 + ] + } + ] + }, + "java-examples/Public_and_Private_Networks_2_EN.fls": { + "success": true, + "nodes": [ + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 79, + 124, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.12", + "mask": "255.255.255.0", + "mac": "FB:07:94:E4:05:06", + "gateway": "192.168.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Gateway", + "name": "Gateway", + "label": "Heimrouter", + "bounds": [ + 367, + 91, + 84, + 19 + ], + "ports": [ + { + "ip": "42.0.0.10", + "mask": "255.0.0.0", + "mac": "18:C4:B3:33:AB:BD", + "gateway": "42.0.0.1", + "dns": "" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "28:62:32:5B:5C:90", + "gateway": "42.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 521, + 364, + 167, + 19 + ], + "ports": [ + { + "ip": "42.0.0.1", + "mask": "255.255.255.0", + "mac": "A7:1D:A9:4C:C4:A7", + "gateway": "", + "dns": "" + }, + { + "ip": "160.10.20.1", + "mask": "255.255.255.0", + "mac": "D1:3E:5F:E6:BA:F9", + "gateway": "", + "dns": "" + }, + { + "ip": "8.8.8.1", + "mask": "255.255.255.0", + "mac": "03:3C:DF:0A:44:1E", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "mywebserver.de (160.10.20.10)", + "label": "Rechner", + "bounds": [ + 656, + 419, + 240, + 19 + ], + "ports": [ + { + "ip": "160.10.20.10", + "mask": "255.255.255.0", + "mac": "71:6A:B4:64:00:4E", + "gateway": "160.10.20.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 383, + 422, + 68, + 19 + ], + "ports": [ + { + "ip": "8.8.8.8", + "mask": "255.255.255.0", + "mac": "48:76:39:9B:AC:29", + "gateway": "8.8.8.1", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 168, + 29, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": "45:06:FC:3E:2B:59", + "gateway": "192.168.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Switch", + "name": "Wifi Switch", + "label": "Switch / WLAN", + "bounds": [ + 255, + 167, + 99, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 2 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 1 + ], + [ + 1, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 0 + ], + [ + 6, + 0 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 0, + 0 + ], + [ + 6, + 2 + ] + ], + "wireless": true + } + ], + "documentation": [ + { + "type": 2, + "text": "8.8.8.1\n", + "bounds": [ + 508, + 390, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "42.0.0.1", + "bounds": [ + 587, + 345, + 100, + 24 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "42.0.0.10", + "bounds": [ + 453, + 124, + 100, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "192.168.0.1", + "bounds": [ + 308, + 123, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "160.10.20.1", + "bounds": [ + 631, + 391, + 88, + 20 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "DNS \nNameserver\n", + "bounds": [ + 373, + 519, + 88, + 41 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "This model is copyright © 2026 Josh Buhl and is freely distributable under the creative commons CC BY-NC-SA 4.0CC BY-NC-SA 4.0 License", + "bounds": [ + 37, + 615, + 275, + 59 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 56, + 9, + 459, + 243 + ], + "color": [ + 209, + 232, + 255, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Private Local Area Network (LAN)", + "bounds": [ + 281, + 20, + 175, + 54 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 277, + 260, + 602, + 314 + ], + "color": [ + 255, + 201, + 201, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Public Network (WAN)", + "bounds": [ + 297, + 283, + 215, + 35 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 2, + "text": "[Gateway and Switch are often integrated into one device especially at home.]", + "bounds": [ + 352, + 179, + 153, + 54 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + } + ] + }, + "java-examples/anwendung_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Server 10", + "label": "Rechner", + "bounds": [ + 355, + 77, + 87, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "4B:82:31:A8:4D:54", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1", + "label": "Notebook", + "bounds": [ + 44, + 31, + 102, + 19 + ], + "ports": [ + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "43:F8:45:DC:FC:53", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 212, + 115, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 2", + "label": "Notebook", + "bounds": [ + 45, + 180, + 102, + 19 + ], + "ports": [ + { + "ip": "192.168.0.2", + "mask": "255.255.255.0", + "mac": "66:38:EB:F5:F4:3B", + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 2, + 2 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/dhcp_test_scenario.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 507, + 96, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "91:E4:54:FA:C9:7D", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 112, + 49, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.101", + "mask": "255.255.255.0", + "mac": "B6:F7:8C:F6:CC:0F", + "gateway": "0.0.0.0", + "dns": "0.0.0.0" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 97, + 164, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": "54:71:65:D0:3A:4B", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 307, + 128, + 121, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 94, + 320, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": "30:B7:97:00:00:FD", + "gateway": "192.168.0.10", + "dns": "0.0.0.0" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 363, + 312, + 101, + 19 + ], + "ports": [ + { + "ip": "42.0.0.10", + "mask": "255.0.0.0", + "mac": "9F:CF:0A:89:4E:32", + "gateway": "", + "dns": "" + }, + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "AB:53:E6:9C:D9:87", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 580, + 293, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "24:C4:CA:44:77:A4", + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 2 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 5, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 0 + ], + [ + 5, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/dns_server.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 250, + 181, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (lokal)", + "label": "Rechner", + "bounds": [ + 213, + 16, + 149, + 19 + ], + "ports": [ + { + "ip": "141.99.5.12", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Rechner", + "name": "Webserver", + "label": "Rechner", + "bounds": [ + 63, + 83, + 98, + 19 + ], + "ports": [ + { + "ip": "141.99.5.10", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 289, + 313, + 90, + 19 + ], + "ports": [ + { + "ip": "141.99.5.11", + "mask": "255.255.255.0", + "mac": null, + "gateway": "141.99.5.1", + "dns": "141.99.5.12" + } + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (.)", + "label": "Rechner", + "bounds": [ + 735, + 25, + 120, + 19 + ], + "ports": [ + { + "ip": "141.99.5.13", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 483, + 185, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (de.)", + "label": "Rechner", + "bounds": [ + 726, + 145, + 138, + 19 + ], + "ports": [ + { + "ip": "141.99.5.14", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS-Server (filius.de.)", + "label": "Rechner", + "bounds": [ + 709, + 276, + 177, + 19 + ], + "ports": [ + { + "ip": "141.99.5.15", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 0, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 3 + ], + [ + 7, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/einfaches_rechnernetz_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Rechner 1", + "label": "Rechner", + "bounds": [ + 32, + 97, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 2", + "label": "Rechner", + "bounds": [ + 30, + 226, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.12", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 3", + "label": "Rechner", + "bounds": [ + 31, + 364, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.13", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 4", + "label": "Rechner", + "bounds": [ + 36, + 503, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.14", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Server", + "label": "Rechner", + "bounds": [ + 564, + 39, + 67, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Switch", + "name": "Switch 3", + "label": "Switch / WLAN", + "bounds": [ + 449, + 180, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 1", + "label": "Notebook", + "bounds": [ + 348, + 512, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.59.98", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 2", + "label": "Notebook", + "bounds": [ + 498, + 513, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.149.102", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 3", + "label": "Notebook", + "bounds": [ + 634, + 510, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.43.216", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 4", + "label": "Notebook", + "bounds": [ + 768, + 509, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.19.11", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Switch", + "name": "Switch 2", + "label": "Switch / WLAN", + "bounds": [ + 601, + 368, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 224, + 300, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 0 + ], + [ + 11, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 11, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 11, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 11, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 11, + 4 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 10, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 0 + ], + [ + 10, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 7, + 0 + ], + [ + 10, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 8, + 0 + ], + [ + 10, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 10, + 4 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/email_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Web-Server", + "label": "Rechner", + "bounds": [ + 460, + 147, + 104, + 19 + ], + "ports": [ + { + "ip": "141.99.50.231", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Notebook", + "name": "Rechner 3", + "label": "Notebook", + "bounds": [ + 81, + 266, + 91, + 19 + ], + "ports": [ + { + "ip": "141.99.50.183", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Notebook", + "name": "Rechner 4", + "label": "Notebook", + "bounds": [ + 83, + 375, + 91, + 19 + ], + "ports": [ + { + "ip": "141.99.50.184", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Notebook", + "name": "Rechner 1", + "label": "Notebook", + "bounds": [ + 82, + 59, + 91, + 19 + ], + "ports": [ + { + "ip": "141.99.50.181", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Notebook", + "name": "Rechner 2", + "label": "Notebook", + "bounds": [ + 82, + 161, + 91, + 19 + ], + "ports": [ + { + "ip": "141.99.50.182", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 284, + 238, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server", + "label": "Rechner", + "bounds": [ + 469, + 30, + 101, + 19 + ], + "ports": [ + { + "ip": "141.99.50.230", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Mail-Server (filius.de)", + "label": "Rechner", + "bounds": [ + 432, + 285, + 172, + 19 + ], + "ports": [ + { + "ip": "141.99.50.232", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Rechner", + "name": "Mail-Server (senior.de)", + "label": "Rechner", + "bounds": [ + 430, + 414, + 183, + 19 + ], + "ports": [ + { + "ip": "141.99.50.233", + "mask": "255.255.255.128", + "mac": null, + "gateway": "", + "dns": "141.99.50.230" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 3, + 0 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 5, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 5, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 5, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 4 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 5 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 6 + ], + [ + 7, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 7 + ], + [ + 8, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/internetwork_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 164, + 178, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch 2", + "label": "Switch / WLAN", + "bounds": [ + 612, + 104, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 395, + 47, + 69, + 19 + ], + "ports": [ + { + "ip": "141.99.1.1", + "mask": "255.255.255.0", + "mac": "C1:60:0A:E1:76:C5", + "gateway": "141.99.2.2", + "dns": "" + }, + { + "ip": "141.99.2.1", + "mask": "255.255.255.0", + "mac": "5A:54:FE:11:5D:6C", + "gateway": "141.99.2.2", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 602, + 263, + 69, + 19 + ], + "ports": [ + { + "ip": "141.99.2.2", + "mask": "255.255.255.0", + "mac": "6E:1E:CD:78:BE:78", + "gateway": "141.99.4.2", + "dns": "" + }, + { + "ip": "141.99.4.1", + "mask": "255.255.255.0", + "mac": "28:09:56:2D:27:6F", + "gateway": "141.99.4.2", + "dns": "" + }, + { + "ip": "141.99.3.1", + "mask": "255.255.255.0", + "mac": "F6:A4:32:18:E5:05", + "gateway": "141.99.4.2", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 497, + 493, + 69, + 19 + ], + "ports": [ + { + "ip": "141.99.4.2", + "mask": "255.255.255.0", + "mac": "63:D3:1F:5D:56:02", + "gateway": "141.99.4.1", + "dns": "" + }, + { + "ip": "141.99.5.1", + "mask": "255.255.255.0", + "mac": "28:1D:80:BE:38:62", + "gateway": "141.99.4.1", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch 4", + "label": "Switch / WLAN", + "bounds": [ + 641, + 392, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server 2.10", + "label": "Rechner", + "bounds": [ + 694, + 19, + 134, + 19 + ], + "ports": [ + { + "ip": "141.99.2.10", + "mask": "255.255.255.0", + "mac": "55:69:1F:18:4C:96", + "gateway": "141.99.2.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 53, + 100, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.10", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "141.99.1.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.11", + "label": "Notebook", + "bounds": [ + 70, + 235, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.11", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 3.10", + "label": "Rechner", + "bounds": [ + 759, + 196, + 112, + 19 + ], + "ports": [ + { + "ip": "141.99.3.10", + "mask": "255.255.255.0", + "mac": "E3:F7:EF:12:BC:94", + "gateway": "141.99.3.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Rechner", + "name": "Webserver 5.10", + "label": "Rechner", + "bounds": [ + 169, + 366, + 131, + 19 + ], + "ports": [ + { + "ip": "141.99.5.10", + "mask": "255.255.255.0", + "mac": "6D:C7:88:09:72:A8", + "gateway": "141.99.5.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 4.10", + "label": "Notebook", + "bounds": [ + 735, + 387, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.4.10", + "mask": "255.255.255.0", + "mac": "3F:34:B7:E1:52:67", + "gateway": "141.99.4.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Switch", + "name": "Switch 5", + "label": "Switch / WLAN", + "bounds": [ + 302, + 408, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 5.11", + "label": "Notebook", + "bounds": [ + 198, + 489, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.5.11", + "mask": "255.255.255.0", + "mac": "58:5D:D7:F0:C5:89", + "gateway": "141.99.5.1", + "dns": "141.99.2.10" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 7, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 8, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 6, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 2 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 2 + ], + [ + 9, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 11, + 0 + ], + [ + 5, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 5, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 1 + ], + [ + 12, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 10, + 0 + ], + [ + 12, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 13, + 0 + ], + [ + 12, + 2 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/man-in-the-middle.fls": { + "success": true, + "nodes": [ + { + "class": "Notebook", + "name": "Alice", + "label": "Notebook", + "bounds": [ + 53, + 264, + 54, + 19 + ], + "ports": [ + { + "ip": "141.99.50.183", + "mask": "255.255.255.128", + "mac": "EA:B6:32:93:26:33", + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Notebook", + "name": "Eve (Man-in-the-middle 141.99.50.184)", + "label": "Notebook", + "bounds": [ + 547, + 169, + 287, + 19 + ], + "ports": [ + { + "ip": "141.99.50.184", + "mask": "255.255.255.128", + "mac": "FA:17:C7:84:81:6E", + "gateway": "", + "dns": "127.0.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "Bob", + "label": "Notebook", + "bounds": [ + 116, + 120, + 48, + 19 + ], + "ports": [ + { + "ip": "141.99.50.181", + "mask": "255.255.255.128", + "mac": "13:84:F1:E6:16:2A", + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Switch", + "name": "Internet", + "label": "Switch / WLAN", + "bounds": [ + 269, + 237, + 79, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "Manipulierter DNS-Server", + "label": "Rechner", + "bounds": [ + 408, + 49, + 201, + 19 + ], + "ports": [ + { + "ip": "141.99.50.230", + "mask": "255.255.255.128", + "mac": "F2:BF:5A:E0:17:CB", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Mail-Server (filius.de 141.99.50.232)", + "label": "Rechner", + "bounds": [ + 519, + 382, + 271, + 19 + ], + "ports": [ + { + "ip": "141.99.50.232", + "mask": "255.255.255.128", + "mac": "16:F4:6C:5F:0C:9C", + "gateway": "", + "dns": "141.99.50.230" + } + ] + }, + { + "class": "Rechner", + "name": "Mail-Server (senior.de 141.99.50.233)", + "label": "Rechner", + "bounds": [ + 278, + 405, + 282, + 19 + ], + "ports": [ + { + "ip": "141.99.50.233", + "mask": "255.255.255.128", + "mac": "D4:7A:40:9D:1B:91", + "gateway": "", + "dns": "141.99.50.230" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 2, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 0 + ], + [ + 3, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 3, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 5 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 6 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 7 + ], + [ + 6, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [ + { + "type": 2, + "text": "The manipulated DNS-Server points to Eve, the \"man in the middle\", for both mail-servers. \n\nEve has her own Mail-Server and her own DNS-Server that points to the correct mail-servers. She receives Alice's and Bob's e-Mails and forwards them on to the correct servers. \n\nAlice and Bob have no way of knowing that Eve is interecepting all of their email. \n\nWatch the logs on all the email servers simultaneously while sending emails from Alice to Bob and back!", + "bounds": [ + 815, + 20, + 349, + 203 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Der manipulierte DNS-Server gibt für beide Mail-Server Eves IP-Adresse an.\n\nEve hat ihren eigenen DNS-Server, der die richtigen Server-Adressen hat, und einen eigenen Mail-Server, der Alices und Bobs Mails an die jeweils richtigen Server weiterleitet.\n\nAlice und Bob merken nicht, dass Eve alles auf ihrem Mail-Server mitlesen kann.\n\nVerfolge den Verlauf in den Logs aller email-Server gleichzeitig, während Alice eine Mail an Bob sendet!", + "bounds": [ + 816, + 258, + 352, + 239 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 794, + 8, + 397, + 492 + ], + "color": [ + 191, + 255, + 219, + 255 + ], + "font": null + } + ] + }, + "java-examples/modem_beispiel.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Rechner 0.11", + "label": "Rechner", + "bounds": [ + 586, + 46, + 112, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 0.10", + "label": "Notebook", + "bounds": [ + 42, + 182, + 123, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Modem", + "name": "Modem (Zugreifend)", + "label": "Modem", + "bounds": [ + 237, + 212, + 165, + 19 + ], + "ports": [ + {} + ] + }, + { + "class": "Modem", + "name": "Modem (Zugangspunkt)", + "label": "Modem", + "bounds": [ + 396, + 79, + 190, + 19 + ], + "ports": [ + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/multicast_server.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 731, + 164, + 100, + 19 + ], + "ports": [ + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "25:9B:C0:C4:32:17", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 213, + 175, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "54:84:0B:8A:58:0C", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 192, + 317, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.20", + "mask": "255.255.255.0", + "mac": "03:42:BB:88:50:95", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 475, + 318, + 121, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 3, + 1 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 3, + 2 + ] + ], + "wireless": true + } + ], + "documentation": [] + }, + "java-examples/nat.fls": { + "success": true, + "nodes": [ + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 382, + 181, + 101, + 19 + ], + "ports": [ + { + "ip": "10.0.0.1", + "mask": "255.0.0.0", + "mac": "49:71:D3:3F:F0:3E", + "gateway": "", + "dns": "" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "F8:24:0B:58:BD:87", + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 169, + 135, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": "1E:A0:9E:34:FA:24", + "gateway": "192.168.0.1", + "dns": "192.168.0.1" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 850, + 148, + 92, + 19 + ], + "ports": [ + { + "ip": "10.0.0.100", + "mask": "255.255.255.0", + "mac": "23:2E:63:7C:81:B7", + "gateway": "192.168.0.1", + "dns": "192.168.0.1" + } + ] + }, + { + "class": "Switch", + "name": "Internet", + "label": "Switch / WLAN", + "bounds": [ + 633, + 190, + 79, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 2, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/nat_with_mapped_port.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 300, + 131, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 676, + 161, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 551, + 90, + 167, + 19 + ], + "ports": [ + { + "ip": "141.99.1.1", + "mask": "255.255.255.0", + "mac": "C1:60:0A:E1:76:C5", + "gateway": "141.99.2.2", + "dns": "" + }, + { + "ip": "141.99.2.1", + "mask": "255.255.255.0", + "mac": "5A:54:FE:11:5D:6C", + "gateway": "141.99.2.2", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 559, + 263, + 167, + 19 + ], + "ports": [ + { + "ip": "141.99.2.2", + "mask": "255.255.255.0", + "mac": "6E:1E:CD:78:BE:78", + "gateway": "141.99.4.2", + "dns": "" + }, + { + "ip": "141.99.4.1", + "mask": "255.255.255.0", + "mac": "28:09:56:2D:27:6F", + "gateway": "141.99.4.2", + "dns": "" + }, + { + "ip": "141.99.3.1", + "mask": "255.255.255.0", + "mac": "F6:A4:32:18:E5:05", + "gateway": "141.99.4.2", + "dns": "" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 562, + 426, + 167, + 19 + ], + "ports": [ + { + "ip": "141.99.4.2", + "mask": "255.255.255.0", + "mac": "63:D3:1F:5D:56:02", + "gateway": "141.99.4.1", + "dns": "" + }, + { + "ip": "141.99.5.1", + "mask": "255.255.255.0", + "mac": "28:1D:80:BE:38:62", + "gateway": "141.99.4.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS-Server", + "label": "Rechner", + "bounds": [ + 837, + 119, + 101, + 19 + ], + "ports": [ + { + "ip": "141.99.2.10", + "mask": "255.255.255.0", + "mac": "55:69:1F:18:4C:96", + "gateway": "141.99.2.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 152, + 54, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "192.168.0.101", + "label": "Notebook", + "bounds": [ + 157, + 202, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.101", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Rechner", + "name": "Webserver www.jupiter.de", + "label": "Rechner", + "bounds": [ + 804, + 307, + 213, + 19 + ], + "ports": [ + { + "ip": "141.99.4.10", + "mask": "255.255.255.0", + "mac": "E3:F7:EF:12:BC:94", + "gateway": "141.99.4.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Rechner", + "name": "Webserver - 192.168.0.10", + "label": "Rechner", + "bounds": [ + 99, + 363, + 198, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "6D:C7:88:09:72:A8", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 313, + 444, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 5.11", + "label": "Notebook", + "bounds": [ + 260, + 538, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": "58:5D:D7:F0:C5:89", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter Vincent", + "label": "Heimrouter", + "bounds": [ + 384, + 438, + 158, + 19 + ], + "ports": [ + { + "ip": "141.99.5.10", + "mask": "255.255.255.0", + "mac": "2F:1F:C3:B1:68:1A", + "gateway": "141.99.5.1", + "dns": "" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "FD:7A:10:01:33:82", + "gateway": "141.99.5.1", + "dns": "" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter Paul", + "label": "Heimrouter", + "bounds": [ + 375, + 122, + 136, + 19 + ], + "ports": [ + { + "ip": "141.99.1.10", + "mask": "255.255.255.0", + "mac": "25:13:13:0E:49:9D", + "gateway": "141.99.1.1", + "dns": "" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "B9:64:F2:59:30:D6", + "gateway": "141.99.1.1", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 694, + 342, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 6, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 7, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 2 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 10, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 11, + 0 + ], + [ + 10, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 13, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 13, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 10, + 0 + ], + [ + 12, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 12, + 0 + ], + [ + 4, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 1 + ], + [ + 14, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 14, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 14, + 2 + ], + [ + 8, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [ + { + "type": 1, + "text": null, + "bounds": [ + 94, + 34, + 428, + 292 + ], + "color": [ + 204, + 204, + 204, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Pauls Home Network", + "bounds": [ + 316, + 42, + 142, + 26 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 95, + 349, + 428, + 296 + ], + "color": [ + 204, + 204, + 204, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Vincents Home Network", + "bounds": [ + 322, + 358, + 169, + 27 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 0 + ] + }, + { + "type": 2, + "text": "The home router is configured to forward traffic on port 80 to the webserver.", + "bounds": [ + 388, + 523, + 129, + 73 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Traffic to the Webserver is forwarded by the home router. But the Echo Server on this host is only reachable from the local network.", + "bounds": [ + 113, + 483, + 167, + 108 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 792, + 52, + 224, + 489 + ], + "color": [ + 204, + 204, + 204, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "All services on this host are publicly available.", + "bounds": [ + 828, + 430, + 148, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Hosts with public IP addresses", + "bounds": [ + 802, + 57, + 187, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + } + ] + }, + "java-examples/private_and_public_network.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 373, + 185, + 121, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 62, + 100, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.11", + "label": "Notebook", + "bounds": [ + 73, + 235, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "192.168.0.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 488, + 179, + 101, + 19 + ], + "ports": [ + { + "ip": "141.99.2.100", + "mask": "255.255.255.0", + "mac": "D6:32:D9:8F:3C:C3", + "gateway": "", + "dns": "0.0.0.0" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "55:DA:E5:38:11:16", + "gateway": "", + "dns": "0.0.0.0" + } + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 726, + 196, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "Rechner", + "label": "Rechner", + "bounds": [ + 978, + 234, + 100, + 19 + ], + "ports": [ + { + "ip": "141.99.2.10", + "mask": "255.255.255.0", + "mac": "7B:2B:66:48:19:16", + "gateway": "141.99.2.1", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 2 + ], + [ + 3, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 1 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": true + } + ], + "documentation": [ + { + "type": 1, + "text": null, + "bounds": [ + 37, + 24, + 586, + 390 + ], + "color": [ + 204, + 222, + 173, + 255 + ], + "font": null + }, + { + "type": 1, + "text": null, + "bounds": [ + 663, + 25, + 619, + 390 + ], + "color": [ + 204, + 204, + 204, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Heimnetz mit einem Switch bzw. WLAN Access Point und Heimrouter, die häufig in einem Gerät kombiniert sind.", + "bounds": [ + 257, + 33, + 343, + 49 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Vereinfachtes Netz des Dienstanbieters mit nur einem Switch und angeschlossenem DNS- und Webserver.", + "bounds": [ + 702, + 35, + 244, + 74 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Der Heimrouter verfügt über einen LAN- und einen WAN-Anschluss und unterstützt Network Address Translation (NAT). Dammit sind lokale IP-Adressen im öffentlichen Netz nicht sichtbar.", + "bounds": [ + 361, + 297, + 252, + 108 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Heimnetz", + "bounds": [ + 47, + 31, + 100, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 2, + "text": "Öffentliches Netz", + "bounds": [ + 1061, + 31, + 204, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + } + ] + }, + "java-examples/private_und_public_networks_mit_provider_DE.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "WLAN Access Point", + "label": "Switch / WLAN", + "bounds": [ + 358, + 185, + 155, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 148, + 100, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "192.168.0.1", + "dns": "42.0.0.2" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.11", + "label": "Notebook", + "bounds": [ + 78, + 227, + 108, + 19 + ], + "ports": [ + { + "ip": "192.168.0.12", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "192.168.0.1", + "dns": "42.0.0.2" + } + ] + }, + { + "class": "Gateway", + "name": "Heimrouter", + "label": "Heimrouter", + "bounds": [ + 502, + 146, + 101, + 19 + ], + "ports": [ + { + "ip": "42.0.0.11", + "mask": "255.255.255.0", + "mac": "D6:32:D9:8F:3C:C3", + "gateway": "42.0.0.1", + "dns": "0.0.0.0" + }, + { + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "55:DA:E5:38:11:16", + "gateway": "42.0.0.1", + "dns": "0.0.0.0" + } + ] + }, + { + "class": "Switch", + "name": "Switch", + "label": "Switch / WLAN", + "bounds": [ + 651, + 83, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "Provider Server www.filius.de (42.0.0.2)", + "label": "Rechner", + "bounds": [ + 633, + 178, + 301, + 19 + ], + "ports": [ + { + "ip": "42.0.0.2", + "mask": "255.255.255.0", + "mac": "7B:2B:66:48:19:16", + "gateway": "42.0.0.1", + "dns": "8.8.8.8" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 740, + 84, + 167, + 19 + ], + "ports": [ + { + "ip": "42.0.0.1", + "mask": "255.255.255.0", + "mac": "49:E7:F2:39:E5:58", + "gateway": "1.0.0.1", + "dns": "" + }, + { + "ip": "1.0.0.2", + "mask": "255.255.255.0", + "mac": "C1:20:94:DC:20:AC", + "gateway": "1.0.0.1", + "dns": "" + }, + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": "02:0F:87:E5:B6:52", + "gateway": "1.0.0.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "webserver.de (120.130.140.10)", + "label": "Rechner", + "bounds": [ + 1026, + 255, + 236, + 19 + ], + "ports": [ + { + "ip": "120.130.140.10", + "mask": "255.255.255.0", + "mac": "41:8E:FC:A1:C1:CD", + "gateway": "120.130.140.1", + "dns": "" + } + ] + }, + { + "class": "Rechner", + "name": "DNS (8.8.8.8)", + "label": "Rechner", + "bounds": [ + 1098, + 72, + 111, + 19 + ], + "ports": [ + { + "ip": "8.8.8.8", + "mask": "255.255.255.0", + "mac": "6E:31:51:DD:9E:45", + "gateway": "8.8.8.1", + "dns": "127.0.0.1" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 934, + 181, + 167, + 19 + ], + "ports": [ + { + "ip": "8.8.8.1", + "mask": "255.255.255.0", + "mac": "B5:EB:CB:68:70:48", + "gateway": "", + "dns": "" + }, + { + "ip": "120.130.140.1", + "mask": "255.255.255.0", + "mac": "D6:6E:0A:7C:2A:E9", + "gateway": "", + "dns": "" + }, + { + "ip": "1.0.0.1", + "mask": "255.255.255.0", + "mac": "7B:48:CA:D9:EC:DD", + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 2 + ], + [ + 3, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 1 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": true + }, + { + "ends": [ + [ + 6, + 0 + ], + [ + 4, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 8, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 1 + ], + [ + 7, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 2 + ], + [ + 6, + 1 + ] + ], + "wireless": false + } + ], + "documentation": [ + { + "type": 1, + "text": null, + "bounds": [ + 37, + 24, + 586, + 390 + ], + "color": [ + 204, + 222, + 173, + 255 + ], + "font": null + }, + { + "type": 1, + "text": null, + "bounds": [ + 884, + 25, + 400, + 390 + ], + "color": [ + 252, + 201, + 163, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Heimnetz mit einem WLAN-Access-Point und Heimrouter, die häufig in einem Gerät kombiniert sind.", + "bounds": [ + 257, + 33, + 343, + 49 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Vereinfachtes Netz des Dienstanbieters mit lokalem DNS- und Webserver für Kunden.", + "bounds": [ + 644, + 316, + 224, + 48 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Der Heimrouter verfügt über einen LAN- und einen WAN-Anschluss und unterstützt Network Address Translation (NAT). Damit sind lokale IP-Adressen im öffentlichen Netz nicht sichtbar.", + "bounds": [ + 361, + 297, + 252, + 108 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 12, + 0 + ] + }, + { + "type": 2, + "text": "Heimnetz", + "bounds": [ + 47, + 31, + 100, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 2, + "text": "Öffentliches Netz", + "bounds": [ + 1061, + 31, + 204, + 50 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + }, + { + "type": 1, + "text": null, + "bounds": [ + 635, + 25, + 239, + 391 + ], + "color": [ + 222, + 212, + 255, + 255 + ], + "font": null + }, + { + "type": 1, + "text": null, + "bounds": [ + -89, + 467, + 100, + 50 + ], + "color": [ + 204, + 204, + 204, + 255 + ], + "font": null + }, + { + "type": 2, + "text": "Provider Netz", + "bounds": [ + 688, + 36, + 131, + 31 + ], + "color": [ + 0, + 0, + 0, + 255 + ], + "font": [ + "Dialog", + 18, + 1 + ] + } + ] + }, + "java-examples/webserver.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Webserver", + "label": "Rechner", + "bounds": [ + 501, + 93, + 116, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook", + "label": "Notebook", + "bounds": [ + 102, + 151, + 90, + 19 + ], + "ports": [ + { + "ip": "192.168.0.10", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "" + } + ] + }, + { + "class": "Switch", + "name": "Switch / WLAN", + "label": "Switch / WLAN", + "bounds": [ + 329, + 146, + 68, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 1 + ], + [ + 0, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-examples/zwei_rechnernetze_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 164, + 178, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch 2", + "label": "Switch / WLAN", + "bounds": [ + 612, + 104, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Rechner", + "name": "DNS-Server 2.10", + "label": "Rechner", + "bounds": [ + 694, + 19, + 134, + 19 + ], + "ports": [ + { + "ip": "141.99.2.10", + "mask": "255.255.255.0", + "mac": "55:69:1F:18:4C:96", + "gateway": "141.99.2.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.10", + "label": "Notebook", + "bounds": [ + 53, + 100, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.10", + "mask": "255.255.255.0", + "mac": "95:11:22:49:65:CB", + "gateway": "141.99.1.1", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 1.11", + "label": "Notebook", + "bounds": [ + 70, + 235, + 123, + 19 + ], + "ports": [ + { + "ip": "141.99.1.11", + "mask": "255.255.255.0", + "mac": "AE:F4:7A:63:81:B9", + "gateway": "", + "dns": "141.99.2.10" + } + ] + }, + { + "class": "Vermittlungsrechner", + "name": "Vermittlungsrechner", + "label": "Vermittlungsrechner", + "bounds": [ + 373, + 106, + 167, + 19 + ], + "ports": [ + { + "ip": "141.99.1.1", + "mask": "255.255.255.0", + "mac": "A4:F4:2A:89:9F:E8", + "gateway": "", + "dns": "" + }, + { + "ip": "141.99.2.1", + "mask": "255.255.255.0", + "mac": "6D:B4:5B:F1:70:FC", + "gateway": "", + "dns": "" + } + ] + } + ], + "cables": [ + { + "ends": [ + [ + 3, + 0 + ], + [ + 0, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 4, + 0 + ], + [ + 0, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 1 + ], + [ + 2, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 0, + 2 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 1, + 0 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-tests/einfaches_rechnernetz_komplett.fls": { + "success": true, + "nodes": [ + { + "class": "Rechner", + "name": "Rechner 1", + "label": "Rechner", + "bounds": [ + 32, + 97, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.11", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 2", + "label": "Rechner", + "bounds": [ + 30, + 226, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.12", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 3", + "label": "Rechner", + "bounds": [ + 31, + 364, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.13", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Rechner 4", + "label": "Rechner", + "bounds": [ + 36, + 503, + 91, + 19 + ], + "ports": [ + { + "ip": "192.168.0.14", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Rechner", + "name": "Server", + "label": "Rechner", + "bounds": [ + 564, + 39, + 67, + 19 + ], + "ports": [ + { + "ip": "192.168.0.100", + "mask": "255.255.255.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Switch", + "name": "Switch 3", + "label": "Switch / WLAN", + "bounds": [ + 449, + 180, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Notebook", + "name": "Notebook 1", + "label": "Notebook", + "bounds": [ + 348, + 512, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.59.98", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 2", + "label": "Notebook", + "bounds": [ + 498, + 513, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.149.102", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 3", + "label": "Notebook", + "bounds": [ + 634, + 510, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.43.216", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Notebook", + "name": "Notebook 4", + "label": "Notebook", + "bounds": [ + 768, + 509, + 102, + 19 + ], + "ports": [ + { + "ip": "169.254.19.11", + "mask": "0.0.0.0", + "mac": null, + "gateway": "", + "dns": "192.168.0.100" + } + ] + }, + { + "class": "Switch", + "name": "Switch 2", + "label": "Switch / WLAN", + "bounds": [ + 601, + 368, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + }, + { + "class": "Switch", + "name": "Switch 1", + "label": "Switch / WLAN", + "bounds": [ + 224, + 300, + 80, + 19 + ], + "ports": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] + } + ], + "cables": [ + { + "ends": [ + [ + 0, + 0 + ], + [ + 11, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 1, + 0 + ], + [ + 11, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 2, + 0 + ], + [ + 11, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 3, + 0 + ], + [ + 11, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 11, + 4 + ], + [ + 5, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 1 + ], + [ + 4, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 5, + 2 + ], + [ + 10, + 0 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 6, + 0 + ], + [ + 10, + 1 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 7, + 0 + ], + [ + 10, + 2 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 8, + 0 + ], + [ + 10, + 3 + ] + ], + "wireless": false + }, + { + "ends": [ + [ + 9, + 0 + ], + [ + 10, + 4 + ] + ], + "wireless": false + } + ], + "documentation": [] + }, + "java-tests/empty.fls": { + "success": true, + "nodes": [], + "cables": [], + "documentation": [] + } +} diff --git a/package.json b/package.json index 11a336e..eebaf12 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "typecheck": "tsc -b && tsc -p packages/core/test", "check": "npm run typecheck && npm run test", "hooks": "git config core.hooksPath scripts/hooks", - "oracle": "tools/swift-oracle/run.sh" + "oracle": "tools/swift-oracle/run.sh", + "oracle:java": "tools/java-oracle/run.sh" }, "devDependencies": { "@types/node": "^20.19.0", diff --git a/tools/java-oracle/.gitignore b/tools/java-oracle/.gitignore new file mode 100644 index 0000000..6e2ece7 --- /dev/null +++ b/tools/java-oracle/.gitignore @@ -0,0 +1,2 @@ +.upstream/ +.build/ diff --git a/tools/java-oracle/README.md b/tools/java-oracle/README.md new file mode 100644 index 0000000..6491ce4 --- /dev/null +++ b/tools/java-oracle/README.md @@ -0,0 +1,24 @@ +# Java-Orakel + +Java-Filius selbst liest den Korpus (`corpus/`) und schreibt, was es gefunden +hat, nach `corpus/corpus.java.json`. **Java ist der Schiedsrichter für das +Dateiformat** — der Swift-Leser verliert in 10 von 23 Dateien Geräte (Plan +§13, M2). + +```bash +npm run oracle:java # = tools/java-oracle/run.sh +``` + +Braucht JDK 17+, Maven und `xvfb-run`. Filius öffnet beim Laden sein +Hauptfenster (`Information.reset` → `JMainFrame`), deshalb läuft es an einem +virtuellen Bildschirm statt „headless". + +* Gelesen wird über Filius' eigene, private Lademethode + `SzenarioVerwaltung.netzwerkLaden` (per Reflection) — Javas Weg, kein Nachbau. +* Stand: `gitlab.com/filius1/filius` @ `6640354` (2.14.0), wird beim ersten + Lauf nach `.upstream/` geholt und gebaut. +* **MAC-Adressen**, die nicht in der Datei stehen, würfelt Filius beim Anlegen + der Netzwerkkarte. Sie erscheinen als `null`; zwei Läufe sind byte-gleich. +* Bisher ausgelesen: Geräte (Klasse, Name, Beschriftung, Position, + Schnittstellen), Kabel (Enden als Gerät/Schnittstelle), Doku-Elemente. + Systemsoftware, Dateisysteme und Anwendungen folgen schrittweise. diff --git a/tools/java-oracle/run.sh b/tools/java-oracle/run.sh new file mode 100755 index 0000000..24e8fa4 --- /dev/null +++ b/tools/java-oracle/run.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# Reads every .fls under corpus/ with Java FILIUS itself and writes +# corpus/corpus.java.json. Java is the arbiter for the file format (plan §13, M2). +# Needs a JDK (17+), Maven and xvfb-run: FILIUS opens its main window while +# loading (Information.reset → JMainFrame), so it needs a display, not headless. +set -eu +here="$(cd "$(dirname "$0")" && pwd)" +root="$(cd "$here/../.." && pwd)" +commit=6640354 +upstream="$here/.upstream" +if [ ! -d "$upstream/.git" ]; then + git clone -q https://gitlab.com/filius1/filius.git "$upstream" +fi +if [ "$(git -C "$upstream" rev-parse --short=7 HEAD)" != "$commit" ]; then + git -C "$upstream" fetch -q origin + git -C "$upstream" checkout -q "$commit" + rm -rf "$upstream/target" +fi +if [ ! -f "$upstream/target/filius.jar" ]; then + (cd "$upstream" && mvn -q -DskipTests package dependency:copy-dependencies -DoutputDirectory=target/lib) +fi +classpath="$upstream/target/filius.jar:$upstream/target/lib/*" +mkdir -p "$here/.build" +javac -d "$here/.build" -cp "$classpath" "$here/src/FlsOracle.java" +# FILIUS writes its settings below $HOME; keep them out of the real one. +mkdir -p "$here/.build/home" +# Removed first: a crashed run must not leave the previous result standing. +rm -f "$root/corpus/corpus.java.json" +HOME="$here/.build/home" xvfb-run -a java -cp "$classpath:$here/.build" FlsOracle \ + "$root/corpus" "$root/corpus/corpus.java.json" 2>&1 | grep -v 'logback\|^$' || true +test -s "$root/corpus/corpus.java.json" diff --git a/tools/java-oracle/src/FlsOracle.java b/tools/java-oracle/src/FlsOracle.java new file mode 100644 index 0000000..97322e4 --- /dev/null +++ b/tools/java-oracle/src/FlsOracle.java @@ -0,0 +1,231 @@ +// Reads .fls files the way Java FILIUS does and writes what it found. +// Uses FILIUS's own private loader (SzenarioVerwaltung.netzwerkLaden) by +// reflection, so the result is Java's view, not a re-implementation of it. +// +// Usage: java -Djava.awt.headless=true -cp filius.jar:lib/*:classes FlsOracle + +import filius.gui.netzwerksicht.GUIDocuItem; +import filius.gui.netzwerksicht.GUIKabelItem; +import filius.gui.netzwerksicht.GUIKnotenItem; +import filius.hardware.Kabel; +import filius.hardware.NetzwerkInterface; +import filius.hardware.Port; +import filius.hardware.knoten.InternetKnoten; +import filius.hardware.knoten.Knoten; +import filius.hardware.knoten.LokalerKnoten; +import filius.rahmenprogramm.SzenarioVerwaltung; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Rectangle; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.IdentityHashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Stream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +public class FlsOracle { + + public static void main(String[] args) throws Exception { + Path root = Path.of(args[0]); + List files; + try (Stream walk = Files.walk(root)) { + files = walk.filter(p -> p.toString().endsWith(".fls")).sorted().toList(); + } + Map result = new TreeMap<>(); + for (Path file : files) { + String name = root.relativize(file).toString(); + try { + result.put(name, read(file)); + } catch (Throwable error) { + Throwable cause = error instanceof java.lang.reflect.InvocationTargetException && error.getCause() != null + ? error.getCause() + : error; + Map failure = new LinkedHashMap<>(); + failure.put("error", cause.toString()); + List frames = new ArrayList<>(); + for (StackTraceElement frame : cause.getStackTrace()) { + if (frames.size() == 8) break; + frames.add(frame.toString()); + } + failure.put("at", frames); + result.put(name, failure); + } + } + try (FileOutputStream out = new FileOutputStream(args[1])) { + out.write((Json.write(result, "") + "\n").getBytes(StandardCharsets.UTF_8)); + } + System.out.println("corpus: " + result.size() + " files"); + // FILIUS leaves non-daemon threads behind; the JVM would never end. + System.exit(0); + } + + @SuppressWarnings("unchecked") + static Map read(Path file) throws Exception { + Path xml = Files.createTempFile("konfiguration", ".xml"); + try { + extractConfiguration(file, xml); + List nodes = new ArrayList<>(); + List cables = new ArrayList<>(); + List docs = new ArrayList<>(); + Method load = SzenarioVerwaltung.class.getDeclaredMethod("netzwerkLaden", String.class, List.class, + List.class, List.class); + load.setAccessible(true); + boolean success = (Boolean) load.invoke(null, xml.toString(), nodes, cables, docs); + return describe(success, nodes, cables, docs, Files.readString(xml, StandardCharsets.UTF_8)); + } finally { + Files.deleteIfExists(xml); + } + } + + static void extractConfiguration(Path archive, Path target) throws Exception { + try (ZipInputStream zip = new ZipInputStream(Files.newInputStream(archive))) { + for (ZipEntry entry; (entry = zip.getNextEntry()) != null;) { + if (entry.getName().equals("projekt/konfiguration.xml")) { + Files.copy(zip, target, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + return; + } + } + } + throw new IllegalStateException("no projekt/konfiguration.xml"); + } + + static Map describe(boolean success, List nodes, List cables, + List docs, String xmlText) { + Map portOwners = new IdentityHashMap<>(); + List nodeList = new ArrayList<>(); + for (int nodeIndex = 0; nodeIndex < nodes.size(); nodeIndex++) { + GUIKnotenItem item = nodes.get(nodeIndex); + Knoten node = item.getKnoten(); + Map json = new LinkedHashMap<>(); + json.put("class", node.getClass().getSimpleName()); + json.put("name", node.getName()); + json.put("label", item.getImageLabel() == null ? null : item.getImageLabel().getTyp()); + Rectangle bounds = item.getImageLabel() == null ? null : item.getImageLabel().getBounds(); + json.put("bounds", bounds == null ? null : List.of(bounds.x, bounds.y, bounds.width, bounds.height)); + List ports = new ArrayList<>(); + if (node instanceof InternetKnoten internet) { + List nics = internet.getNetzwerkInterfaces(); + for (int index = 0; index < nics.size(); index++) { + NetzwerkInterface nic = nics.get(index); + Map port = new LinkedHashMap<>(); + port.put("ip", nic.getIp()); + port.put("mask", nic.getSubnetzMaske()); + // Without a MAC address in the file, FILIUS rolls a random one when it + // creates the interface; only a MAC that stands in the file is stable. + String mac = nic.getMac(); + port.put("mac", mac != null && xmlText.contains(">" + mac + "<") ? mac : null); + port.put("gateway", nic.getGateway()); + port.put("dns", nic.getDns()); + ports.add(port); + if (nic.getPort() != null) portOwners.put(nic.getPort(), new int[] { nodeIndex, index }); + } + } else if (node instanceof LokalerKnoten local) { + List anschluesse = local.getAnschluesse(); + for (int index = 0; index < anschluesse.size(); index++) { + ports.add(Map.of()); + portOwners.put(anschluesse.get(index), new int[] { nodeIndex, index }); + } + } + json.put("ports", ports); + nodeList.add(json); + } + + List cableList = new ArrayList<>(); + for (GUIKabelItem item : cables) { + Kabel cable = item.getDasKabel(); + Map json = new LinkedHashMap<>(); + List ends = new ArrayList<>(); + Port[] anschluesse = cable == null ? null : cable.getAnschluesse(); + if (anschluesse != null) { + for (Port port : anschluesse) { + int[] owner = port == null ? null : portOwners.get(port); + ends.add(owner == null ? null : List.of(owner[0], owner[1])); + } + } + json.put("ends", ends); + json.put("wireless", cable != null && cable.getWireless()); + cableList.add(json); + } + + List docList = new ArrayList<>(); + for (GUIDocuItem item : docs) { + Map json = new LinkedHashMap<>(); + json.put("type", item.getType()); + json.put("text", item.getText()); + json.put("bounds", List.of(item.getX(), item.getY(), item.getWidth(), item.getHeight())); + Color color = item.getColor(); + json.put("color", color == null ? null : List.of(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); + Font font = item.getFont(); + json.put("font", font == null ? null : List.of(font.getName(), font.getSize(), font.getStyle())); + docList.add(json); + } + + Map result = new LinkedHashMap<>(); + result.put("success", success); + result.put("nodes", nodeList); + result.put("cables", cableList); + result.put("documentation", docList); + return result; + } + + /** Just enough JSON: maps, lists, strings, numbers, booleans, null. */ + static final class Json { + static String write(Object value, String indent) { + if (value == null) return "null"; + if (value instanceof String text) return quote(text); + if (value instanceof Number || value instanceof Boolean) return value.toString(); + String inner = indent + " "; + if (value instanceof Map map) { + if (map.isEmpty()) return "{}"; + StringBuilder out = new StringBuilder("{\n"); + int count = 0; + for (Map.Entry entry : map.entrySet()) { + out.append(inner).append(quote(entry.getKey().toString())).append(": ") + .append(write(entry.getValue(), inner)); + out.append(++count < map.size() ? ",\n" : "\n"); + } + return out.append(indent).append("}").toString(); + } + if (value instanceof List list) { + if (list.isEmpty()) return "[]"; + StringBuilder out = new StringBuilder("[\n"); + for (int index = 0; index < list.size(); index++) { + out.append(inner).append(write(list.get(index), inner)); + out.append(index + 1 < list.size() ? ",\n" : "\n"); + } + return out.append(indent).append("]").toString(); + } + throw new IllegalArgumentException("not JSON: " + value.getClass()); + } + + static String quote(String text) { + StringBuilder out = new StringBuilder("\""); + for (char c : text.toCharArray()) { + switch (c) { + case '"' -> out.append("\\\""); + case '\\' -> out.append("\\\\"); + case '\n' -> out.append("\\n"); + case '\r' -> out.append("\\r"); + case '\t' -> out.append("\\t"); + default -> { + if (c < 0x20) out.append(String.format("\\u%04x", (int) c)); + else out.append(c); + } + } + } + return out.append('"').toString(); + } + } +}