test(java-oracle): NatRun records the home router's NAT as Java FILIUS runs it

ScenarioNetwork builds home routers (their first card the WAN port) and
their port forwarding (portForwarding, through GatewayFirmware.setStaticNAT).
NatRun plays six stories on nat-home's network and writes the frames, the
calls and the router's NAT table: a ping, a UDP exchange, the same socket
to a second server (whose answer never reaches the LAN: Java keeps one
entry per LAN endpoint, for the first remote only), a TCP connection out,
a forwarded one in, and pings at the WAN address and past it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 19:50:08 +00:00
co-authored by Claude Opus 5.5
parent 37f5d77477
commit 5505e8e8af
11 changed files with 2318 additions and 1 deletions
@@ -0,0 +1,591 @@
{
"frames": {
"00000000-0000-0000-0000-000000000501": [
{
"time": 1389,
"source": "02:00:00:00:05:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.1",
"targetIp": "192.168.0.10"
},
{
"time": 1389,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"arp": 2,
"senderIp": "192.168.0.10",
"targetIp": "192.168.0.1"
},
{
"time": 1501,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
"sequence": 2000000,
"acknowledgement": 0
},
{
"time": 1503,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1839,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
"sequence": 2000001,
"acknowledgement": 1000001
},
{
"time": 1913,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": "hello",
"tcpFlags": "P",
"sequence": 2000001,
"acknowledgement": 0
},
{
"time": 1914,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000006
},
{
"time": 1969,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61267,
"payload": "reply hello",
"tcpFlags": "P",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 2303,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
"sequence": 2000006,
"acknowledgement": 1000012
},
{
"time": 2359,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
"sequence": 2000006,
"acknowledgement": 0
},
{
"time": 2359,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000012,
"acknowledgement": 2000007
},
{
"time": 2415,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "F",
"sequence": 1000012,
"acknowledgement": 0
},
{
"time": 2749,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"sourceIp": "42.0.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
"sequence": 2000007,
"acknowledgement": 1000013
}
],
"00000000-0000-0000-0000-000000000502": [
{
"time": 1101,
"source": "02:00:00:00:05:41",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "42.0.0.20",
"targetIp": "42.0.0.10"
},
{
"time": 1104,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"arp": 2,
"senderIp": "42.0.0.10",
"targetIp": "42.0.0.20"
},
{
"time": 1333,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "S",
"sequence": 2000000,
"acknowledgement": 0
},
{
"time": 1560,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1783,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000001,
"acknowledgement": 1000001
},
{
"time": 1857,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": "hello",
"tcpFlags": "P",
"sequence": 2000001,
"acknowledgement": 0
},
{
"time": 1969,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000006
},
{
"time": 2025,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": "reply hello",
"tcpFlags": "P",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 2248,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000006,
"acknowledgement": 1000012
},
{
"time": 2303,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "F",
"sequence": 2000006,
"acknowledgement": 0
},
{
"time": 2415,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000012,
"acknowledgement": 2000007
},
{
"time": 2471,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "F",
"sequence": 1000012,
"acknowledgement": 0
},
{
"time": 2693,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000007,
"acknowledgement": 1000013
}
],
"00000000-0000-0000-0000-000000000504": [
{
"time": 965,
"source": "02:00:00:00:05:41",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "42.0.0.20",
"targetIp": "42.0.0.10"
},
{
"time": 1215,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"arp": 2,
"senderIp": "42.0.0.10",
"targetIp": "42.0.0.20"
},
{
"time": 1219,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "S",
"sequence": 2000000,
"acknowledgement": 0
},
{
"time": 1671,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1671,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000001,
"acknowledgement": 1000001
},
{
"time": 1746,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": "hello",
"tcpFlags": "P",
"sequence": 2000001,
"acknowledgement": 0
},
{
"time": 2081,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000006
},
{
"time": 2136,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": "reply hello",
"tcpFlags": "P",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 2136,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000006,
"acknowledgement": 1000012
},
{
"time": 2192,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "F",
"sequence": 2000006,
"acknowledgement": 0
},
{
"time": 2526,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "A",
"sequence": 1000012,
"acknowledgement": 2000007
},
{
"time": 2582,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:41",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.20",
"protocol": 6,
"sourcePort": 8080,
"destinationPort": 61267,
"payload": null,
"tcpFlags": "F",
"sequence": 1000012,
"acknowledgement": 0
},
{
"time": 2582,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.20",
"destinationIp": "42.0.0.10",
"protocol": 6,
"sourcePort": 61267,
"destinationPort": 8080,
"payload": null,
"tcpFlags": "A",
"sequence": 2000007,
"acknowledgement": 1000013
}
],
"00000000-0000-0000-0000-000000000505": [
{
"time": 1104,
"source": "02:00:00:00:05:41",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "42.0.0.20",
"targetIp": "42.0.0.10"
}
]
},
"events": [
[
745,
"server oeffnen called"
],
[
945,
"client verbinden called"
],
[
1746,
"client verbinden returned "
],
[
1746,
"client senden called"
],
[
1848,
"server oeffnen returned filius.software.transportschicht.TCPSocket@641fefcc"
],
[
1849,
"server empfangen called"
],
[
1913,
"server empfangen returned hello"
],
[
1914,
"server senden called"
],
[
2081,
"client senden returned "
],
[
2081,
"client empfangen called"
],
[
2136,
"client empfangen returned reply hello"
],
[
2136,
"client schliessen called"
],
[
2137,
"client schliessen returned "
],
[
2303,
"server senden returned "
]
],
"nat": [
"6 42.0.0.20:8080 -> 192.168.0.10:80 DynamicEnryFromStatic"
]
}