test(core): RIP measured with Java FILIUS

RipRun runs rip-chain's three routers in Java FILIUS, each router's random
set by reflection to the core's ripSeed, and writes the frames, every
change of each RIP table and the calls. converge: the tables fill, a ping
at 45 s. expire: R3 falls silent at 10 s; R2 marks its network 16 hops only
at its own next beacon, R1 passes it on at once, the ping gets ICMP 3/0.
Both match: per sending card the same messages at the same times, every
table through the same states. The first 5 s are compared by the state the
tables reach, since Java's routers start one after the other.

Measured on the JDK: Java's pause divides nextFloat() by 3 in float; the
core does too now (a millisecond off in one draw of about 10,000 before).
Scenarios name their RIP routers in the new field rip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 19:41:56 +00:00
co-authored by Claude Opus 5.5
parent a4036f12a3
commit 37f5d77477
12 changed files with 1695 additions and 6 deletions
+7 -3
View File
@@ -55,9 +55,13 @@ export class JavaCompatibleRandom {
return (this.next(26) * 2 ** 27 + this.next(27)) / 2 ** 53;
}
/** Java RIP: 30 s · (f/3 + 0.84), truncated — somewhere between 25.2 s and 35.2 s. */
/**
* Java RIP: 30 s · (f/3 + 0.84), truncated — somewhere between 25.2 s and
* 35.2 s. f/3 divides a float by an int, in float (JLS 5.6.2): one draw in
* about 10,000 comes out a millisecond apart from dividing in double
* (measured on OpenJDK 21).
*/
nextRipJitterMilliseconds(): number {
const javaFloat = this.nextFloat();
return Math.trunc(30_000.0 * (javaFloat / 3.0 + 0.84));
return Math.trunc(30_000 * (Math.fround(this.nextFloat() / 3) + 0.84));
}
}
+5 -1
View File
@@ -431,11 +431,15 @@ describe('UDP sockets', () => {
describe('Java-compatible randomness', () => {
it('draws the same RIP jitter as java.util.Random', () => {
// Measured on OpenJDK 21 (30.09.2026): (int) (1000 * 30 * (r.nextFloat() / 3 + 0.84)).
const random = new JavaCompatibleRandom(42);
expect(Array.from({ length: 5 }, () => random.nextRipJitterMilliseconds())).toEqual([
32_475, 25_746, 32_032, 25_679, 28_287,
]);
// new Random(7), the 530th draw: 28145 with Java's float division, 28144 in double.
const seven = new JavaCompatibleRandom(7);
for (let draw = 0; draw < 529; draw += 1) seven.nextFloat();
expect(seven.nextRipJitterMilliseconds()).toBe(28_145);
});
it('matches java.util.Random.nextInt for bounded and power-of-two ranges', () => {
+169
View File
@@ -0,0 +1,169 @@
// RIP as Java FILIUS runs it. tools/java-oracle's RipRun ran rip-chain's
// network in Java FILIUS, each router's pauses drawn from the random the core
// seeds (ripSeed), and wrote every frame each card saw, every change of each
// router's RIP table and the story's calls (rip-java-<story>.java.json). The
// engine plays the same story: the frames must come in the same order, with
// the same content, at about the same distance from each other (javaRun.ts);
// each table must go through the same states at about the same times; the
// calls must return the same.
//
// Java starts the routers some 200 ms after the network (ScenarioNetwork
// starts switches and servers first), one after the other; the engine starts
// all at once. The story's calls come at Java's times less that offset, taken
// from the first RIP message (a router's first beacon comes a second after
// its start). Frames that leave different cards within a few milliseconds
// come in Java in the order its threads happen to run, and its packet log
// misses a sender's own frame when several send at once (then the receiver's
// entry, a cable later, counts): the frames are compared per sending card, in
// order, each at about the same time. A table state Java's poll (every 2 ms)
// could not see — the engine's lasts less than STATE_UNSEEN_MILLISECONDS — is
// left out.
//
// The first seconds depend on the order Java's routers start in: one that
// hears a neighbour before its own first beacon sends the learned route with
// it, where the engine's routers, started together, send their own networks
// first and then at once what they learned. Up to STARTUP_MILLISECONDS
// (Java's time) the tables must reach the same state, and frames are not
// compared; after it, every frame and every change.
import { readFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import { RIP_FIRST_BEACON_DELAY_MILLISECONDS, type Id, type IPv4DeliveryResult, type NetworkRuntimeEngine } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import type { Scenario } from './scenario.js';
const scenarioDirectory = join(dirname(fileURLToPath(import.meta.url)), 'scenarios');
const PC_A = '00000000-0000-0000-0000-000000000401';
const R3 = '00000000-0000-0000-0000-000000000404';
const STATE_UNSEEN_MILLISECONDS = 5;
const STARTUP_MILLISECONDS = 5_000;
/** The frames by the card that sent them (the source MAC address), each list in order. */
function bySender(frames: readonly SeenFrame[], shift: number): Map<string, SeenFrame[]> {
const result = new Map<string, SeenFrame[]>();
for (const frame of frames) {
const sender = frame.text.slice(0, 17);
const list = result.get(sender) ?? [];
list.push({ time: frame.time - shift, text: frame.text });
result.set(sender, list);
}
return result;
}
interface JavaRun {
frames: Record<string, JavaFrame[]>;
events: [number, string][];
tables: [number, Id, string][];
}
/** A ping's result in Java's words: the answer's type and code, or null. */
function pingResult(result: IPv4DeliveryResult, engine: NetworkRuntimeEngine): string {
if (result.type === 'icmpError') return result.kind === 'destinationNetworkUnreachable' ? 'ICMP 3/0' : `ICMP ${result.kind}`;
const answered = (engine.state.icmpObservationsByNodeId.get(PC_A) ?? []).some((observation) => observation.message.kind === 'echoReply');
return answered ? 'ICMP 0/0' : 'null';
}
type Story = (engine: NetworkRuntimeEngine, at: (javaMilliseconds: number) => void, call: (label: string, run: () => string) => void) => void;
const STORIES: Record<string, Story> = {
converge: (engine, at, call) => {
at(45_000);
call('sendProbe 10.0.3.2', () => pingResult(engine.sendIcmpEcho(PC_A, '10.0.3.2'), engine));
},
expire: (engine, at, call) => {
at(10_000);
// RipRun sets R3's next beacon to never: it sends no more (unless a change sends at once).
engine.state.pendingEvents = engine.state.pendingEvents.filter((event) => !(event.kind.kind === 'ripBeacon' && event.kind.nodeId === R3));
at(125_000);
call('sendProbe 10.0.3.2', () => pingResult(engine.sendIcmpEcho(PC_A, '10.0.3.2'), engine));
},
};
/** The table as RipRun writes it: `network/mask gateway interface hops; …`. */
function tableText(engine: NetworkRuntimeEngine, nodeId: Id): string {
return (engine.state.ripTablesByNodeId.get(nodeId) ?? [])
.map((route) => `${route.destinationNetwork}/${route.subnetMask} ${route.nextHop} ${route.interfaceIPAddress} ${route.metric}`)
.join('; ');
}
describe('RIP as Java FILIUS runs it', () => {
const scenario = JSON.parse(readFileSync(join(scenarioDirectory, 'rip-chain.scenario.json'), 'utf8')) as Scenario;
for (const [name, story] of Object.entries(STORIES)) {
it(name, () => {
const java = JSON.parse(readFileSync(join(scenarioDirectory, `rip-java-${name}.java.json`), 'utf8')) as JavaRun;
const offset = Math.min(...javaFrames(java.frames).filter((frame) => frame.text.includes(':521 >')).map((frame) => frame.time)) - RIP_FIRST_BEACON_DELAY_MILLISECONDS;
const { engine, frames } = watchedEngine(scenario);
// Every change of a table, after each event.
const tables: [number, Id, string][] = [];
const routers = [...engine.state.ripTablesByNodeId.keys()];
const last = new Map<Id, string>();
const poll = () => {
for (const router of routers) {
const text = tableText(engine, router);
if (last.get(router) === text) continue;
last.set(router, text);
tables.push([engine.state.currentTimeMilliseconds, router, text]);
}
};
poll();
const target = engine as unknown as { processScheduledRuntimeEvent: (kind: unknown) => void };
const process = target.processScheduledRuntimeEvent.bind(engine);
target.processScheduledRuntimeEvent = (kind) => {
process(kind);
poll();
};
const events: [number, string][] = [];
story(
engine,
(javaMilliseconds) => engine.handle({ type: 'advance', toMilliseconds: javaMilliseconds - offset }),
(label, run) => {
events.push([engine.state.currentTimeMilliseconds, `${label} called`]);
const result = run();
events.push([engine.state.currentTimeMilliseconds, `${label} returned ${result}`]);
},
);
const end = Math.max(...Object.values(java.frames).flat().map((frame) => frame.time), ...java.tables.map(([time]) => time));
engine.handle({ type: 'advance', toMilliseconds: end - offset + 1_000 });
const startup = STARTUP_MILLISECONDS - offset;
const expected = bySender(javaFrames(java.frames).filter((frame) => frame.time >= STARTUP_MILLISECONDS), offset);
const actual = bySender(frames().filter((frame) => frame.time >= startup), 0);
expect([...actual.keys()].sort()).toEqual([...expected.keys()].sort());
for (const [sender, javaList] of expected) {
const engineList = actual.get(sender)!;
for (let index = 0; index < Math.max(javaList.length, engineList.length); index += 1) {
expect(engineList[index]?.text, `${sender} frame #${index + 1}`).toBe(javaList[index]?.text);
expect(Math.abs(engineList[index]!.time - javaList[index]!.time), `${sender} time of frame #${index + 1}`).toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
}
}
// Each router's table: the same state when the startup is over, then the same changes at about the same times.
for (const router of routers) {
const settled = <T extends [number, Id, string]>(states: T[], until: number): T[] => {
const before = states.filter(([time]) => time < until);
return [...before.slice(-1), ...states.filter(([time]) => time >= until)];
};
const javaStates = settled(java.tables.filter(([, node]) => node === router), STARTUP_MILLISECONDS);
const all = tables.filter(([, node]) => node === router);
const engineStates = settled(
all.filter(([time], index) => index === all.length - 1 || all[index + 1]![0] - time >= STATE_UNSEEN_MILLISECONDS),
startup,
);
expect(engineStates.map(([, , text]) => text), router).toEqual(javaStates.map(([, , text]) => text));
for (const [index, [time]] of engineStates.entries()) {
if (index === 0) continue;
expect(Math.abs(time - (javaStates[index]![0] - offset)), `${router} state #${index + 1}`).toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
}
}
const javaCalls = java.events.filter(([, event]) => event.startsWith('sendProbe'));
expect(events.map(([, event]) => event)).toEqual(javaCalls.map(([, event]) => event.replace(/ from .*$/, '')));
expect(Math.abs(events[1]![0] - events[0]![0] - (javaCalls[1]![0] - javaCalls[0]![0])), 'duration of the ping').toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
});
}
});
+3
View File
@@ -51,6 +51,8 @@ export interface Scenario {
{ active?: boolean; lower?: string; upper?: string; gateway?: string; dns?: string; own?: boolean; staticAssignments?: [string, string][] }
>;
dhcpClients?: string[];
/** Routers with RIP switched on. */
rip?: string[];
/** Records as `name TYPE target` (Java's hinzuRecord: TTL 3600). */
dnsServers?: Record<string, { records: string[]; recursive?: boolean }>;
steps: {
@@ -161,6 +163,7 @@ export function snapshotOf(scenario: Scenario): TopologySnapshot {
]),
),
dhcpClientConfigurationsByNodeId: new Map((scenario.dhcpClients ?? []).map((node) => [node, { isEnabled: true }])),
ripEnabledByNodeId: new Map((scenario.rip ?? []).map((node) => [node, true])),
switchConfigurationsByNodeId: new Map(
Object.entries(scenario.switches ?? {}).map(([node, config]) => [
node,
@@ -0,0 +1,165 @@
{
"seed": 71,
"nodes": [
{
"id": "00000000-0000-0000-0000-000000000401",
"kind": "pc",
"ports": [
{
"id": "00000000-0000-0000-0000-000000000411",
"label": "eth0"
}
]
},
{
"id": "00000000-0000-0000-0000-000000000402",
"kind": "router",
"ports": [
{
"id": "00000000-0000-0000-0000-000000000421",
"label": "eth0"
},
{
"id": "00000000-0000-0000-0000-000000000422",
"label": "eth1"
}
]
},
{
"id": "00000000-0000-0000-0000-000000000403",
"kind": "router",
"ports": [
{
"id": "00000000-0000-0000-0000-000000000431",
"label": "eth0"
},
{
"id": "00000000-0000-0000-0000-000000000432",
"label": "eth1"
}
]
},
{
"id": "00000000-0000-0000-0000-000000000404",
"kind": "router",
"ports": [
{
"id": "00000000-0000-0000-0000-000000000441",
"label": "eth0"
},
{
"id": "00000000-0000-0000-0000-000000000442",
"label": "eth1"
}
]
},
{
"id": "00000000-0000-0000-0000-000000000405",
"kind": "pc",
"ports": [
{
"id": "00000000-0000-0000-0000-000000000451",
"label": "eth0"
}
]
}
],
"links": [
{
"id": "00000000-0000-0000-0000-00000000F401",
"sourceNode": "00000000-0000-0000-0000-000000000401",
"sourcePort": "00000000-0000-0000-0000-000000000411",
"targetNode": "00000000-0000-0000-0000-000000000402",
"targetPort": "00000000-0000-0000-0000-000000000421"
},
{
"id": "00000000-0000-0000-0000-00000000F402",
"sourceNode": "00000000-0000-0000-0000-000000000402",
"sourcePort": "00000000-0000-0000-0000-000000000422",
"targetNode": "00000000-0000-0000-0000-000000000403",
"targetPort": "00000000-0000-0000-0000-000000000431"
},
{
"id": "00000000-0000-0000-0000-00000000F403",
"sourceNode": "00000000-0000-0000-0000-000000000403",
"sourcePort": "00000000-0000-0000-0000-000000000432",
"targetNode": "00000000-0000-0000-0000-000000000404",
"targetPort": "00000000-0000-0000-0000-000000000441"
},
{
"id": "00000000-0000-0000-0000-00000000F404",
"sourceNode": "00000000-0000-0000-0000-000000000404",
"sourcePort": "00000000-0000-0000-0000-000000000442",
"targetNode": "00000000-0000-0000-0000-000000000405",
"targetPort": "00000000-0000-0000-0000-000000000451"
}
],
"devices": {
"00000000-0000-0000-0000-000000000401": {
"ip": "10.0.1.2",
"mask": "255.255.255.0",
"gateway": "10.0.1.1"
},
"00000000-0000-0000-0000-000000000402": {
"ip": "10.0.1.1",
"mask": "255.255.255.0"
},
"00000000-0000-0000-0000-000000000403": {
"ip": "10.0.12.2",
"mask": "255.255.255.0"
},
"00000000-0000-0000-0000-000000000404": {
"ip": "10.0.23.3",
"mask": "255.255.255.0"
},
"00000000-0000-0000-0000-000000000405": {
"ip": "10.0.3.2",
"mask": "255.255.255.0",
"gateway": "10.0.3.1"
}
},
"interfaces": [
{
"node": "00000000-0000-0000-0000-000000000402",
"port": "00000000-0000-0000-0000-000000000421",
"ip": "10.0.1.1",
"mask": "255.255.255.0"
},
{
"node": "00000000-0000-0000-0000-000000000402",
"port": "00000000-0000-0000-0000-000000000422",
"ip": "10.0.12.1",
"mask": "255.255.255.0"
},
{
"node": "00000000-0000-0000-0000-000000000403",
"port": "00000000-0000-0000-0000-000000000431",
"ip": "10.0.12.2",
"mask": "255.255.255.0"
},
{
"node": "00000000-0000-0000-0000-000000000403",
"port": "00000000-0000-0000-0000-000000000432",
"ip": "10.0.23.2",
"mask": "255.255.255.0"
},
{
"node": "00000000-0000-0000-0000-000000000404",
"port": "00000000-0000-0000-0000-000000000441",
"ip": "10.0.23.3",
"mask": "255.255.255.0"
},
{
"node": "00000000-0000-0000-0000-000000000404",
"port": "00000000-0000-0000-0000-000000000442",
"ip": "10.0.3.1",
"mask": "255.255.255.0"
}
],
"rip": [
"00000000-0000-0000-0000-000000000402",
"00000000-0000-0000-0000-000000000403",
"00000000-0000-0000-0000-000000000404"
],
"steps": []
}
@@ -0,0 +1,569 @@
{
"frames": {
"00000000-0000-0000-0000-000000000401": [
{
"time": 1292,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1355,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1411,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27401,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 45001,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 45114,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 45116,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 45896,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "10.0.3.2",
"destinationIp": "10.0.1.2",
"sequence": 1
},
{
"time": 58186,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
}
],
"00000000-0000-0000-0000-000000000402": [
{
"time": 1296,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1355,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27345,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 45058,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 45059,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 45173,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 45840,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "10.0.3.2",
"destinationIp": "10.0.1.2",
"sequence": 1
},
{
"time": 58130,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
}
],
"00000000-0000-0000-0000-000000000403": [
{
"time": 1292,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1296,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 1355,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1411,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 27401,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 29222,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 45228,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.12.1",
"targetIp": "10.0.12.2"
},
{
"time": 45228,
"source": "02:00:00:00:04:31",
"destination": "02:00:00:00:04:22",
"arp": 2,
"senderIp": "10.0.12.2",
"targetIp": "10.0.12.1"
},
{
"time": 45339,
"source": "02:00:00:00:04:22",
"destination": "02:00:00:00:04:31",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 45785,
"source": "02:00:00:00:04:31",
"destination": "02:00:00:00:04:22",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "10.0.3.2",
"destinationIp": "10.0.1.2",
"sequence": 1
},
{
"time": 58186,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
}
],
"00000000-0000-0000-0000-000000000404": [
{
"time": 1217,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 1292,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1296,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 1355,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 1355,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 29277,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 31606,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 45395,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.23.2",
"targetIp": "10.0.23.3"
},
{
"time": 45395,
"source": "02:00:00:00:04:41",
"destination": "02:00:00:00:04:32",
"arp": 2,
"senderIp": "10.0.23.3",
"targetIp": "10.0.23.2"
},
{
"time": 45506,
"source": "02:00:00:00:04:32",
"destination": "02:00:00:00:04:41",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 45729,
"source": "02:00:00:00:04:41",
"destination": "02:00:00:00:04:32",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "10.0.3.2",
"destinationIp": "10.0.1.2",
"sequence": 1
},
{
"time": 57795,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
}
],
"00000000-0000-0000-0000-000000000405": [
{
"time": 1292,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0"
},
{
"time": 1352,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1"
},
{
"time": 1411,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1\n10.0.1.0 255.255.255.0 2"
},
{
"time": 31662,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1\n10.0.1.0 255.255.255.0 2"
},
{
"time": 45562,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.3.1",
"targetIp": "10.0.3.2"
},
{
"time": 45562,
"source": "02:00:00:00:04:51",
"destination": "02:00:00:00:04:42",
"arp": 2,
"senderIp": "10.0.3.2",
"targetIp": "10.0.3.1"
},
{
"time": 45673,
"source": "02:00:00:00:04:42",
"destination": "02:00:00:00:04:51",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 45673,
"source": "02:00:00:00:04:51",
"destination": "02:00:00:00:04:42",
"icmp": 0,
"icmpCode": 0,
"sourceIp": "10.0.3.2",
"destinationIp": "10.0.1.2",
"sequence": 1
},
{
"time": 57850,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1\n10.0.1.0 255.255.255.0 2"
}
]
},
"events": [
[
213,
"seeded"
],
[
45001,
"sendProbe 10.0.3.2 called"
],
[
45897,
"sendProbe 10.0.3.2 returned ICMP 0/0 from 10.0.3.2"
]
],
"tables": [
[
213,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0"
],
[
213,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0"
],
[
213,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0"
],
[
1297,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1"
],
[
1297,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0; 10.0.1.0/255.255.255.0 10.0.12.1 10.0.12.2 1; 10.0.3.0/255.255.255.0 10.0.23.3 10.0.23.2 1"
],
[
1297,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1"
],
[
1357,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1; 10.0.3.0/255.255.255.0 10.0.12.2 10.0.12.1 2"
],
[
1357,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1; 10.0.1.0/255.255.255.0 10.0.23.2 10.0.23.3 2"
]
]
}
@@ -0,0 +1,563 @@
{
"frames": {
"00000000-0000-0000-0000-000000000401": [
{
"time": 1293,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1409,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27398,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 58184,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 86804,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 113461,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 125001,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 125114,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 125116,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 125228,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 3,
"icmpCode": 0,
"sourceIp": "10.0.1.1",
"destinationIp": "10.0.1.2",
"sequence": 0
}
],
"00000000-0000-0000-0000-000000000402": [
{
"time": 1297,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1"
},
{
"time": 1353,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 27343,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 58129,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 2"
},
{
"time": 86749,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 113405,
"source": "02:00:00:00:04:21",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.1.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.1.1\n10.0.1.1\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.23.0 255.255.255.0 1\n10.0.3.0 255.255.255.0 16"
},
{
"time": 125058,
"source": "02:00:00:00:04:11",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "10.0.1.2",
"targetIp": "10.0.1.1"
},
{
"time": 125059,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"arp": 2,
"senderIp": "10.0.1.1",
"targetIp": "10.0.1.2"
},
{
"time": 125173,
"source": "02:00:00:00:04:11",
"destination": "02:00:00:00:04:21",
"icmp": 8,
"icmpCode": 0,
"sourceIp": "10.0.1.2",
"destinationIp": "10.0.3.2",
"sequence": 1
},
{
"time": 125173,
"source": "02:00:00:00:04:21",
"destination": "02:00:00:00:04:11",
"icmp": 3,
"icmpCode": 0,
"sourceIp": "10.0.1.1",
"destinationIp": "10.0.1.2",
"sequence": 0
}
],
"00000000-0000-0000-0000-000000000403": [
{
"time": 1218,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0"
},
{
"time": 1293,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1297,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 1353,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 1409,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 27398,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 29222,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 58184,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 61273,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 1"
},
{
"time": 86692,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 16"
},
{
"time": 86804,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 113461,
"source": "02:00:00:00:04:22",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.1\n10.0.1.1\n16\n75000\n10.0.1.0 255.255.255.0 0"
},
{
"time": 114340,
"source": "02:00:00:00:04:31",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.12.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.12.2\n10.0.12.2\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.3.0 255.255.255.0 16"
}
],
"00000000-0000-0000-0000-000000000404": [
{
"time": 1293,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0"
},
{
"time": 1297,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 1354,
"source": "02:00:00:00:04:41",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.3",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.3\n10.0.23.3\n16\n75000\n10.0.3.0 255.255.255.0 0"
},
{
"time": 29278,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 61329,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 86748,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
},
{
"time": 114396,
"source": "02:00:00:00:04:32",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.23.2",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.23.2\n10.0.12.2\n16\n75000\n10.0.12.0 255.255.255.0 0\n10.0.1.0 255.255.255.0 1"
}
],
"00000000-0000-0000-0000-000000000405": [
{
"time": 1293,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0"
},
{
"time": 1353,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1"
},
{
"time": 1409,
"source": "02:00:00:00:04:42",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "10.0.3.1",
"destinationIp": "255.255.255.255",
"protocol": 17,
"sourcePort": 521,
"destinationPort": 520,
"payload": "10.0.3.1\n10.0.23.3\n16\n75000\n10.0.23.0 255.255.255.0 0\n10.0.12.0 255.255.255.0 1\n10.0.1.0 255.255.255.0 2"
}
]
},
"events": [
[
216,
"seeded"
],
[
10000,
"R3 silent"
],
[
125000,
"sendProbe 10.0.3.2 called"
],
[
125233,
"sendProbe 10.0.3.2 returned ICMP 3/0 from 10.0.1.1"
]
],
"tables": [
[
218,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0"
],
[
218,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0"
],
[
218,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0"
],
[
1299,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1"
],
[
1299,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0; 10.0.1.0/255.255.255.0 10.0.12.1 10.0.12.2 1; 10.0.3.0/255.255.255.0 10.0.23.3 10.0.23.2 1"
],
[
1299,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1"
],
[
1354,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1; 10.0.3.0/255.255.255.0 10.0.12.2 10.0.12.1 2"
],
[
1354,
"00000000-0000-0000-0000-000000000404",
"10.0.23.0/255.255.255.0 10.0.23.3 10.0.23.3 0; 10.0.3.0/255.255.255.0 10.0.3.1 10.0.3.1 0; 10.0.12.0/255.255.255.0 10.0.23.2 10.0.23.3 1; 10.0.1.0/255.255.255.0 10.0.23.2 10.0.23.3 2"
],
[
86694,
"00000000-0000-0000-0000-000000000403",
"10.0.12.0/255.255.255.0 10.0.12.2 10.0.12.2 0; 10.0.23.0/255.255.255.0 10.0.23.2 10.0.23.2 0; 10.0.1.0/255.255.255.0 10.0.12.1 10.0.12.2 1; 10.0.3.0/255.255.255.0 10.0.23.3 10.0.23.2 16"
],
[
86749,
"00000000-0000-0000-0000-000000000402",
"10.0.1.0/255.255.255.0 10.0.1.1 10.0.1.1 0; 10.0.12.0/255.255.255.0 10.0.12.1 10.0.12.1 0; 10.0.23.0/255.255.255.0 10.0.12.2 10.0.12.1 1; 10.0.3.0/255.255.255.0 10.0.12.2 10.0.12.1 16"
]
]
}