feat(core): traceroute and tcpdump after Java, measured against Java

TerminalRun adds nine stories: traceroute in the LAN, through the router,
unreachable, without a route, to no one, to the host itself, errors and
Ctrl+C; tcpdump on two hosts. traceroute counts failures across hops as
Java does and takes an error that carries its probe; tcpdump tells each
frame's highest capture row with its time of day, at once.

Departures from Java: traceroute tells its summary before the end mark
(Java after it, where its window shows no text) and calls a host at the
20th hop reached. arpsend is not built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 10:46:18 +00:00
co-authored by Claude Opus 5.5
parent 495c449ef2
commit a867c33d64
16 changed files with 11983 additions and 16 deletions
@@ -0,0 +1,543 @@
{
"frames": {
"00000000-0000-0000-0000-000000000401": [
{
"time": 506,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.31"
},
{
"time": 743,
"source": "02:00:00:00:04:14",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "192.168.0.31",
"targetIp": "192.168.0.20"
},
{
"time": 746,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:14",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.31",
"sequence": 967
},
{
"time": 973,
"source": "02:00:00:00:04:14",
"destination": "02:00:00:00:04:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "192.168.0.31",
"destinationIp": "192.168.0.20",
"sequence": 967
}
],
"00000000-0000-0000-0000-000000000402": [
{
"time": 629,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.31"
}
],
"00000000-0000-0000-0000-000000000403": [
{
"time": 629,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.31"
}
],
"00000000-0000-0000-0000-000000000404": [
{
"time": 629,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.31"
},
{
"time": 631,
"source": "02:00:00:00:04:14",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "192.168.0.31",
"targetIp": "192.168.0.20"
},
{
"time": 860,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:14",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.31",
"sequence": 967
},
{
"time": 860,
"source": "02:00:00:00:04:14",
"destination": "02:00:00:00:04:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "192.168.0.31",
"destinationIp": "192.168.0.20",
"sequence": 967
}
],
"00000000-0000-0000-0000-000000000405": [
{
"time": 629,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.31"
}
],
"00000000-0000-0000-0000-000000000405#1": [],
"00000000-0000-0000-0000-000000000406": []
},
"rows": {
"00000000-0000-0000-0000-000000000401": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
],
[
"2",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x806"
],
[
"2",
"192.168.0.31",
"192.168.0.20",
"ARP",
"Vermittlung",
"MAC ist 02:00:00:00:04:14 [op=REPLY, sender=02:00:00:00:04:14|192.168.0.31, target=02:00:00:00:04:11|192.168.0.20]"
],
[
"3",
"02:00:00:00:04:11",
"02:00:00:00:04:14",
"",
"Netzzugang",
"0x800"
],
[
"3",
"192.168.0.20",
"192.168.0.31",
"ICMP",
"Vermittlung",
"ICMP Echo Request (ping), TTL: 1, Identifier: 782, Seq.-No.: 967"
],
[
"4",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x800"
],
[
"4",
"192.168.0.31",
"192.168.0.20",
"ICMP",
"Vermittlung",
"ICMP Echo Reply (pong), TTL: 64, Identifier: 782, Seq.-No.: 967"
]
],
"00000000-0000-0000-0000-000000000402": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000403": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000404": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
],
[
"2",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x806"
],
[
"2",
"192.168.0.31",
"192.168.0.20",
"ARP",
"Vermittlung",
"MAC ist 02:00:00:00:04:14 [op=REPLY, sender=02:00:00:00:04:14|192.168.0.31, target=02:00:00:00:04:11|192.168.0.20]"
],
[
"3",
"02:00:00:00:04:11",
"02:00:00:00:04:14",
"",
"Netzzugang",
"0x800"
],
[
"3",
"192.168.0.20",
"192.168.0.31",
"ICMP",
"Vermittlung",
"ICMP Echo Request (ping), TTL: 1, Identifier: 782, Seq.-No.: 967"
],
[
"4",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x800"
],
[
"4",
"192.168.0.31",
"192.168.0.20",
"ICMP",
"Vermittlung",
"ICMP Echo Reply (pong), TTL: 64, Identifier: 782, Seq.-No.: 967"
]
],
"00000000-0000-0000-0000-000000000405": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000405#1": [],
"00000000-0000-0000-0000-000000000406": []
},
"layeredRows": {
"00000000-0000-0000-0000-000000000401": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
],
[
"2",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x806"
],
[
"2",
"192.168.0.31",
"192.168.0.20",
"ARP",
"Vermittlung",
"MAC ist 02:00:00:00:04:14 [op=REPLY, sender=02:00:00:00:04:14|192.168.0.31, target=02:00:00:00:04:11|192.168.0.20]"
],
[
"3",
"02:00:00:00:04:11",
"02:00:00:00:04:14",
"",
"Netzzugang",
"0x800"
],
[
"3",
"192.168.0.20",
"192.168.0.31",
"ICMP",
"Vermittlung",
"ICMP Echo Request (ping), TTL: 1, Identifier: 782, Seq.-No.: 967"
],
[
"4",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x800"
],
[
"4",
"192.168.0.31",
"192.168.0.20",
"ICMP",
"Vermittlung",
"ICMP Echo Reply (pong), TTL: 64, Identifier: 782, Seq.-No.: 967"
]
],
"00000000-0000-0000-0000-000000000402": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000403": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000404": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
],
[
"2",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x806"
],
[
"2",
"192.168.0.31",
"192.168.0.20",
"ARP",
"Vermittlung",
"MAC ist 02:00:00:00:04:14 [op=REPLY, sender=02:00:00:00:04:14|192.168.0.31, target=02:00:00:00:04:11|192.168.0.20]"
],
[
"3",
"02:00:00:00:04:11",
"02:00:00:00:04:14",
"",
"Netzzugang",
"0x800"
],
[
"3",
"192.168.0.20",
"192.168.0.31",
"ICMP",
"Vermittlung",
"ICMP Echo Request (ping), TTL: 1, Identifier: 782, Seq.-No.: 967"
],
[
"4",
"02:00:00:00:04:14",
"02:00:00:00:04:11",
"",
"Netzzugang",
"0x800"
],
[
"4",
"192.168.0.31",
"192.168.0.20",
"ICMP",
"Vermittlung",
"ICMP Echo Reply (pong), TTL: 64, Identifier: 782, Seq.-No.: 967"
]
],
"00000000-0000-0000-0000-000000000405": [
[
"1",
"02:00:00:00:04:11",
"FF:FF:FF:FF:FF:FF",
"",
"Netzzugang",
"0x806"
],
[
"1",
"192.168.0.20",
"192.168.0.31",
"ARP",
"Vermittlung",
"Suche nach MAC für 192.168.0.31 [op=REQUEST, sender=02:00:00:00:04:11|192.168.0.20, target=FF:FF:FF:FF:FF:FF|192.168.0.31]"
]
],
"00000000-0000-0000-0000-000000000405#1": [],
"00000000-0000-0000-0000-000000000406": []
},
"acts": [
[
500,
"00000000-0000-0000-0000-000000000401",
"traceroute 192.168.0.31"
]
],
"events": [
[
501,
"00000000-0000-0000-0000-000000000401",
"call",
"traceroute 192.168.0.31"
],
[
502,
"00000000-0000-0000-0000-000000000401",
"busy",
"true"
],
[
502,
"00000000-0000-0000-0000-000000000401",
"text",
"Verbindung nach 192.168.0.31 wird bestimmt (max. 20 Stationen).\n"
],
[
502,
"00000000-0000-0000-0000-000000000401",
"text",
" 1 "
],
[
973,
"00000000-0000-0000-0000-000000000401",
"text",
"192.168.0.31"
],
[
973,
"00000000-0000-0000-0000-000000000401",
"busy",
"false"
],
[
973,
"00000000-0000-0000-0000-000000000401",
"text",
"\n\n192.168.0.31 wurde nach einem Sprung (hop) erreicht."
]
]
}