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
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000301": [
{
"time": 717,
"time": 718,
"source": "02:00:00:00:03:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "10.0.0.1"
},
{
"time": 951,
"time": 954,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"arp": 2,
@@ -18,7 +18,7 @@
"targetIp": "10.0.0.2"
},
{
"time": 955,
"time": 958,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
@@ -28,7 +28,7 @@
"sequence": 1
},
{
"time": 1402,
"time": 1406,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
@@ -38,18 +38,18 @@
"sequence": 1
},
{
"time": 1408,
"time": 1412,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.9",
"protocol": 17,
"sourcePort": 59998,
"sourcePort": 55220,
"destinationPort": 9,
"payload": "verloren"
},
{
"time": 1507,
"time": 1511,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
@@ -59,7 +59,7 @@
"sequence": 2
},
{
"time": 1842,
"time": 1846,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
@@ -69,7 +69,7 @@
"sequence": 2
},
{
"time": 7133,
"time": 7137,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 3,
@@ -81,7 +81,7 @@
],
"00000000-0000-0000-0000-000000000302": [
{
"time": 837,
"time": 840,
"source": "02:00:00:00:03:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -89,7 +89,7 @@
"targetIp": "10.0.0.1"
},
{
"time": 839,
"time": 842,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"arp": 2,
@@ -97,7 +97,7 @@
"targetIp": "10.0.0.2"
},
{
"time": 1068,
"time": 1071,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
@@ -107,7 +107,7 @@
"sequence": 1
},
{
"time": 1291,
"time": 1295,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
@@ -117,18 +117,18 @@
"sequence": 1
},
{
"time": 1521,
"time": 1525,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.9",
"protocol": 17,
"sourcePort": 59998,
"sourcePort": 55220,
"destinationPort": 9,
"payload": "verloren"
},
{
"time": 1618,
"time": 1623,
"source": "02:00:00:00:03:11",
"destination": "02:00:00:00:03:21",
"icmp": 8,
@@ -138,7 +138,7 @@
"sequence": 2
},
{
"time": 1731,
"time": 1735,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 0,
@@ -148,7 +148,7 @@
"sequence": 2
},
{
"time": 7022,
"time": 7026,
"source": "02:00:00:00:03:21",
"destination": "02:00:00:00:03:11",
"icmp": 3,
@@ -158,9 +158,9 @@
"sequence": 0
}
],
"00000000-0000-0000-0000-000000000303": [
"00000000-0000-0000-0000-000000000302#1": [
{
"time": 1123,
"time": 1071,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -168,7 +168,7 @@
"targetIp": "20.0.0.2"
},
{
"time": 1124,
"time": 1183,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"arp": 2,
@@ -176,7 +176,7 @@
"targetIp": "20.0.0.1"
},
{
"time": 1235,
"time": 1183,
"source": "02:00:00:00:03:22",
"destination": "02:00:00:00:03:13",
"icmp": 8,
@@ -186,7 +186,7 @@
"sequence": 1
},
{
"time": 1235,
"time": 1295,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"icmp": 0,
@@ -196,7 +196,7 @@
"sequence": 1
},
{
"time": 1576,
"time": 1525,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -204,7 +204,7 @@
"targetIp": "20.0.0.9"
},
{
"time": 1675,
"time": 1623,
"source": "02:00:00:00:03:22",
"destination": "02:00:00:00:03:13",
"icmp": 8,
@@ -214,7 +214,7 @@
"sequence": 2
},
{
"time": 1675,
"time": 1735,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"icmp": 0,
@@ -224,7 +224,81 @@
"sequence": 2
},
{
"time": 4327,
"time": 4275,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.9"
}
],
"00000000-0000-0000-0000-000000000303": [
{
"time": 1127,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.2"
},
{
"time": 1127,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"arp": 2,
"senderIp": "20.0.0.2",
"targetIp": "20.0.0.1"
},
{
"time": 1239,
"source": "02:00:00:00:03:22",
"destination": "02:00:00:00:03:13",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.2",
"sequence": 1
},
{
"time": 1239,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "20.0.0.2",
"destinationIp": "10.0.0.2",
"sequence": 1
},
{
"time": 1580,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "20.0.0.1",
"targetIp": "20.0.0.9"
},
{
"time": 1679,
"source": "02:00:00:00:03:22",
"destination": "02:00:00:00:03:13",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.0.2",
"destinationIp": "20.0.0.2",
"sequence": 2
},
{
"time": 1679,
"source": "02:00:00:00:03:13",
"destination": "02:00:00:00:03:22",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "20.0.0.2",
"destinationIp": "10.0.0.2",
"sequence": 2
},
{
"time": 4331,
"source": "02:00:00:00:03:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -235,27 +309,27 @@
},
"events": [
[
712,
713,
"sendProbe 20.0.0.2 called"
],
[
1404,
1408,
"sendProbe 20.0.0.2 returned ICMP 0/0 from 20.0.0.2"
],
[
1404,
1408,
"senden verloren called"
],
[
1407,
1411,
"senden verloren returned "
],
[
1507,
1511,
"sendProbe 20.0.0.2 called"
],
[
1842,
1846,
"sendProbe 20.0.0.2 returned ICMP 0/0 from 20.0.0.2"
]
]