feat(core): home router NAT after Java, measured with Java FILIUS

The core translates before the IP thread, as Java's NAT threads sit
between card and Ethernet: out, the WAN address and the entry's port (ICMP
keeps its identifier); in, by remote end, port and protocol, else by the
port forwarding, which then makes a dynamic entry; a ping at the WAN
address is answered by the router, packets from outside for the LAN are
dropped, both sides pass the router's firewall, TTL 1 going out gets time
exceeded. Dynamic entries expire at Java's check each second, 300 s times
the delay factor old (55 minutes at 90 %), refreshed only by what comes in.
The home router forwards as a router does.

Measured and not taken: when a LAN endpoint sends to a second remote end,
Java gives it the entry's WAN port but no entry, and the answer stays at
the router; the core adds an entry for each new remote end on that port.

The oracle now records every card of a node (the second card of routers
was missing); the ARP and RIP runs are recorded anew and still match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 20:06:04 +00:00
co-authored by Claude Opus 5.5
parent 5505e8e8af
commit 7a77bc1b43
23 changed files with 2915 additions and 748 deletions
@@ -24,36 +24,36 @@
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.20",
"protocol": 17,
"sourcePort": 53169,
"sourcePort": 51562,
"destinationPort": 7,
"payload": "one"
},
{
"time": 1612,
"time": 1615,
"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": 17,
"sourcePort": 7,
"destinationPort": 53169,
"destinationPort": 51562,
"payload": "pong one"
},
{
"time": 1613,
"time": 1616,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.30",
"protocol": 17,
"sourcePort": 53169,
"sourcePort": 51562,
"destinationPort": 7,
"payload": "two"
}
],
"00000000-0000-0000-0000-000000000502": [
{
"time": 1105,
"time": 1106,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -61,7 +61,7 @@
"targetIp": "42.0.0.20"
},
{
"time": 1331,
"time": 1334,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -69,29 +69,29 @@
"targetIp": "42.0.0.10"
},
{
"time": 1331,
"time": 1334,
"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": 17,
"sourcePort": 58343,
"sourcePort": 60310,
"destinationPort": 7,
"payload": "one"
},
{
"time": 1556,
"time": 1559,
"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": 17,
"sourcePort": 7,
"destinationPort": 58343,
"destinationPort": 60310,
"payload": "pong one"
},
{
"time": 1669,
"time": 1672,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -99,7 +99,7 @@
"targetIp": "42.0.0.30"
},
{
"time": 1892,
"time": 1895,
"source": "02:00:00:00:05:51",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -107,31 +107,82 @@
"targetIp": "42.0.0.10"
},
{
"time": 1892,
"time": 1896,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:51",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.30",
"protocol": 17,
"sourcePort": 58343,
"sourcePort": 60310,
"destinationPort": 7,
"payload": "two"
},
{
"time": 2115,
"time": 2119,
"source": "02:00:00:00:05:51",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.30",
"destinationIp": "42.0.0.10",
"protocol": 17,
"sourcePort": 7,
"destinationPort": 58343,
"destinationPort": 60310,
"payload": "pong two"
}
],
"00000000-0000-0000-0000-000000000502#1": [
{
"time": 984,
"source": "02:00:00:00:05:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.10",
"targetIp": "192.168.0.1"
},
{
"time": 985,
"source": "02:00:00:00:05:22",
"destination": "02:00:00:00:05:11",
"arp": 2,
"senderIp": "192.168.0.1",
"targetIp": "192.168.0.10"
},
{
"time": 1101,
"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": 17,
"sourcePort": 51562,
"destinationPort": 7,
"payload": "one"
},
{
"time": 1560,
"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": 17,
"sourcePort": 7,
"destinationPort": 51562,
"payload": "pong one"
},
{
"time": 1672,
"source": "02:00:00:00:05:11",
"destination": "02:00:00:00:05:22",
"sourceIp": "192.168.0.10",
"destinationIp": "42.0.0.30",
"protocol": 17,
"sourcePort": 51562,
"destinationPort": 7,
"payload": "two"
}
],
"00000000-0000-0000-0000-000000000504": [
{
"time": 1220,
"time": 1222,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -139,7 +190,7 @@
"targetIp": "42.0.0.20"
},
{
"time": 1220,
"time": 1222,
"source": "02:00:00:00:05:41",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -147,29 +198,29 @@
"targetIp": "42.0.0.10"
},
{
"time": 1443,
"time": 1446,
"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": 17,
"sourcePort": 58343,
"sourcePort": 60310,
"destinationPort": 7,
"payload": "one"
},
{
"time": 1445,
"time": 1448,
"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": 17,
"sourcePort": 7,
"destinationPort": 58343,
"destinationPort": 60310,
"payload": "pong one"
},
{
"time": 1780,
"time": 1784,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -179,7 +230,7 @@
],
"00000000-0000-0000-0000-000000000505": [
{
"time": 1220,
"time": 1222,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -187,7 +238,7 @@
"targetIp": "42.0.0.20"
},
{
"time": 1780,
"time": 1784,
"source": "02:00:00:00:05:21",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -195,7 +246,7 @@
"targetIp": "42.0.0.30"
},
{
"time": 1781,
"time": 1784,
"source": "02:00:00:00:05:51",
"destination": "02:00:00:00:05:21",
"arp": 2,
@@ -203,72 +254,72 @@
"targetIp": "42.0.0.10"
},
{
"time": 2003,
"time": 2007,
"source": "02:00:00:00:05:21",
"destination": "02:00:00:00:05:51",
"sourceIp": "42.0.0.10",
"destinationIp": "42.0.0.30",
"protocol": 17,
"sourcePort": 58343,
"sourcePort": 60310,
"destinationPort": 7,
"payload": "two"
},
{
"time": 2003,
"time": 2007,
"source": "02:00:00:00:05:51",
"destination": "02:00:00:00:05:21",
"sourceIp": "42.0.0.30",
"destinationIp": "42.0.0.10",
"protocol": 17,
"sourcePort": 7,
"destinationPort": 58343,
"destinationPort": 60310,
"payload": "pong two"
}
]
},
"events": [
[
916,
915,
"senden 42.0.0.20 called"
],
[
918,
917,
"senden 42.0.0.20 returned "
],
[
918,
917,
"empfangen called"
],
[
1445,
1448,
"server received one"
],
[
1613,
1616,
"empfangen returned pong one"
],
[
1613,
1616,
"senden 42.0.0.30 called"
],
[
1613,
1616,
"senden 42.0.0.30 returned "
],
[
1613,
1616,
"empfangen called"
],
[
2003,
2007,
"other server received two"
],
[
15363,
15366,
"empfangen returned null"
]
],
"nat": [
"17 42.0.0.20:58343 -> 192.168.0.10:53169 DynamicEntry"
"17 42.0.0.20:60310 -> 192.168.0.10:51562 DynamicEntry"
]
}