feat(core): packet capture per card after Java's Lauscher, measured card by card

The engine keeps Java's packet capture (capture.ts): per network card
every frame it sent (when it leaves on the cable) or received (also one
for another card), once, with time and number; switches log nothing;
frames the packet loss dropped are kept apart; the capture outlives a
stop and a new start, as in Java, until clearCapture. Per port instead
of per MAC, at most 10,000 frames a card.

expectSameCaptures compares each card's capture with Java's list of that
card in the ARP, WLAN, DNS, TCP, NAT, RIP and single-client DHCP runs.
It found that ScenarioNetwork ignored a switch's learning time (Java ran
300 s, the core the scenarios' 5 s); the oracle sets it now, and the TCP
and DHCP runs are recorded again. A core test found that a new start
numbers frames from 1 again and the capture took them as seen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 08:53:37 +00:00
co-authored by Claude Opus 5.5
parent 65ccd9ddd7
commit 088b62469f
24 changed files with 796 additions and 344 deletions
+2 -1
View File
@@ -10,7 +10,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import { icmpMessage, type NetworkRuntimeEngine } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame } from './javaRun.js';
import { expectSameCaptures, withClientPortText, GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame } from './javaRun.js';
import type { Scenario } from './scenario.js';
const scenarioDirectory = join(dirname(fileURLToPath(import.meta.url)), 'scenarios');
@@ -117,6 +117,7 @@ describe('ARP as Java FILIUS runs it', () => {
expect(actual[index]?.text, `frame #${index + 1}`).toBe(expected[index]?.text);
expect(Math.abs(actual[index]!.gap - expected[index]!.gap), `gap before frame #${index + 1}`).toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
}
expectSameCaptures(engine, scenario, java.frames, { text: withClientPortText });
});
}
});
+6 -2
View File
@@ -16,7 +16,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import { stableMacAddress } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import { expectSameCaptures, 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');
@@ -38,7 +38,7 @@ function runEngine(scenario: Scenario, milliseconds: number) {
[device.ipAddress, device.subnetMask, device.defaultGateway, device.dnsServer],
]),
);
return { frames: frames(), devices };
return { engine, frames: frames(), devices };
}
/** Consecutive frames without the other clients' own: the text, and the time since the one before. */
@@ -86,6 +86,10 @@ describe('DHCP as Java FILIUS runs it', () => {
);
}
}
// Each card's capture, with one client: of two that start together, Java's
// log loses the DISCOVER of the one that sends second, and which sends
// first varies (javaRun.ts).
if (clients.length === 1) expectSameCaptures(engine.engine, scenario, java.frames, { text: (text) => text.replace(LINK_LOCAL, '169.254.1.x') });
const linkLocal = (devices: Record<string, string[]>) =>
Object.fromEntries(Object.entries(devices).map(([node, device]) => [node, device.map((value) => value.replace(LINK_LOCAL, '169.254.1.x'))]));
expect(linkLocal(engine.devices)).toEqual(linkLocal(java.devices));
+2 -1
View File
@@ -16,7 +16,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import type { DnsAddressResolution, NetworkRuntimeEngine } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import { expectSameCaptures, GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import type { Scenario } from './scenario.js';
const scenarioDirectory = join(dirname(fileURLToPath(import.meta.url)), 'scenarios');
@@ -122,6 +122,7 @@ describe('DNS as Java FILIUS runs it', () => {
expect(actual[index]?.text, `frame #${index + 1}`).toBe(expected[index]?.text);
expect(Math.abs(actual[index]!.gap - expected[index]!.gap), `gap before frame #${index + 1}`).toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
}
expectSameCaptures(engine, scenario, java.frames, { text: (text) => normalized([{ time: 0, text }])[0]!.text, until });
});
}
}
+119
View File
@@ -26,6 +26,7 @@ import {
JavaCompatibleRandom,
ripSeed,
NetworkRuntimeEngine,
captureRetentionPolicy,
portSnapshot,
stableMacAddress,
switchConfiguration,
@@ -2385,3 +2386,121 @@ describe('Home router NAT', () => {
expect(engine.state.natTablesByNodeId.size).toBe(0);
});
});
describe("packet capture (Java's Lauscher)", () => {
const hostA = uuid(0x2e01);
const portA = uuid(0x2e11);
const hostB = uuid(0x2e02);
const portB = uuid(0x2e12);
const switchId = uuid(0x2e04);
const switchPorts = [1, 2].map((index) => portSnapshot(uuid(0x2e20 + index), `sw${index}`));
const network = {
nodes: [pc(hostA, portA), pc(hostB, portB), { id: switchId, kind: 'networkSwitch' as const, ports: switchPorts }],
links: [link(hostA, portA, switchId, switchPorts[0]!.id), link(hostB, portB, switchId, switchPorts[1]!.id)],
deviceConfigurations: new Map([
[hostA, device('10.0.0.1')],
[hostB, device('10.0.0.2')],
]),
};
const kinds = (engine: NetworkRuntimeEngine, portId: string) =>
engine.capture.frames(portId).map(({ number, frame }) => {
const what = frame.payload.kind === 'arp' ? `arp ${frame.payload.packet.operation}` : frame.payload.packet.payload.kind;
return `${number} ${frame.sourceMacAddress === stableMacAddress(portId) ? 'sent' : 'received'} ${what}`;
});
const arpRequest = (engine: NetworkRuntimeEngine): EthernetFrame => ({
identity: engine.allocateFrameIdentity(),
sourceMacAddress: stableMacAddress(portA),
destinationMacAddress: ETHERNET_BROADCAST_MAC_ADDRESS,
payload: {
kind: 'arp',
packet: { operation: 'request', senderMacAddress: stableMacAddress(portA), senderIPAddress: '10.0.0.1', targetMacAddress: UNSPECIFIED_MAC_ADDRESS, targetIPAddress: '10.0.0.9' },
},
});
it('logs every frame a card sends or receives, numbered, and nothing on a switch', () => {
const engine = startedEngine(network);
engine.sendIcmpEcho(hostA, '10.0.0.2');
letFramesArrive(engine);
expect(kinds(engine, portA)).toEqual(['1 sent arp request', '2 received arp reply', '3 sent icmp', '4 received icmp']);
expect(kinds(engine, portB)).toEqual(['1 received arp request', '2 sent arp reply', '3 received icmp', '4 sent icmp']);
expect(switchPorts.map((port) => engine.capture.frames(port.id))).toEqual([[], []]);
// When the card sent it, when the other card received it: two cables later.
const [sent] = engine.capture.frames(portA);
const [received] = engine.capture.frames(portB);
expect(received!.timeMilliseconds - sent!.timeMilliseconds).toBe(2 * engine.simulationSpeed.linkTransmissionDelayMilliseconds);
});
it('logs a frame on a card once, also a frame for another card', () => {
const engine = startedEngine(network);
const frame = { ...arpRequest(engine), destinationMacAddress: '02:00:00:00:00:FE' };
engine.sendEthernetFrame(hostA, portA, frame);
engine.sendEthernetFrame(hostA, portA, frame);
letFramesArrive(engine);
expect(kinds(engine, portA)).toEqual(['1 sent arp request']);
// The switch floods the unknown destination; B's card logs what is not addressed to it.
expect(kinds(engine, portB)).toEqual(['1 received arp request']);
});
it('keeps the frames the packet loss dropped apart; the sender logged them', () => {
const engine = startedEngine(network);
engine.setGlobalPacketLossEnabled(true);
engine.sendEthernetFrame(hostA, portA, arpRequest(engine));
letFramesArrive(engine);
expect(kinds(engine, portA)).toEqual(['1 sent arp request']);
expect(engine.capture.frames(portB)).toEqual([]);
expect(engine.capture.droppedFrames().map((each) => each.timeMilliseconds)).toEqual([engine.simulationSpeed.linkTransmissionDelayMilliseconds]);
});
it('logs a frame flooded onto two cables once for each cable that drops it', () => {
const hostC = uuid(0x2e03);
const portC = uuid(0x2e13);
const ports = [1, 2, 3].map((index) => portSnapshot(uuid(0x2e30 + index), `sw${index}`));
const engine = startedEngine({
nodes: [pc(hostA, portA), pc(hostB, portB), pc(hostC, portC), { id: switchId, kind: 'networkSwitch', ports }],
links: [link(hostA, portA, switchId, ports[0]!.id), link(hostB, portB, switchId, ports[1]!.id), link(hostC, portC, switchId, ports[2]!.id)],
});
engine.sendEthernetFrame(hostA, portA, arpRequest(engine));
// The switch has it and floods it; then the loss begins.
engine.handle({ type: 'advance', toMilliseconds: engine.simulationSpeed.linkTransmissionDelayMilliseconds });
engine.setGlobalPacketLossEnabled(true);
letFramesArrive(engine);
expect(engine.capture.droppedFrames()).toHaveLength(2);
expect([portB, portC].map((port) => engine.capture.frames(port))).toEqual([[], []]);
});
it('outlives a stop and a new start, as in Java, until it is cleared', () => {
const engine = startedEngine(network);
engine.sendEthernetFrame(hostA, portA, arpRequest(engine));
letFramesArrive(engine);
engine.handle({ type: 'stop' });
expect(kinds(engine, portA)).toEqual(['1 sent arp request']);
engine.handle({ type: 'start', snapshot: topologySnapshot(network), seed: 14, initialTimeMilliseconds: 1_000 });
engine.setGlobalPacketLossEnabled(true);
engine.sendEthernetFrame(hostA, portA, arpRequest(engine));
letFramesArrive(engine);
expect(engine.capture.frames(portA).map((each) => [each.number, each.timeMilliseconds])).toEqual([
[1, 0],
[2, 1_000],
]);
expect(engine.capture.droppedFrames()).toHaveLength(1);
engine.clearCapture();
expect(engine.capture.portIds()).toEqual([]);
expect(engine.capture.droppedFrames()).toEqual([]);
});
it('keeps at most the retention, dropping the oldest at once; a frame keeps its number', () => {
const engine = new NetworkRuntimeEngine(14, undefined, { captureRetention: captureRetentionPolicy(3, 2) });
engine.handle({ type: 'start', snapshot: topologySnapshot(network), seed: 14, initialTimeMilliseconds: 0 });
for (let count = 0; count < 4; count += 1) engine.sendEthernetFrame(hostA, portA, arpRequest(engine));
letFramesArrive(engine);
expect(engine.capture.frames(portA).map((each) => each.number)).toEqual([3, 4]);
expect(() => captureRetentionPolicy(2, 3)).toThrow(RangeError);
});
});
+60
View File
@@ -21,6 +21,7 @@
// time (250 ms) may not. A cable carries one frame after the other in both
// (engine.test.ts checks that: one cable's delay is below this tolerance).
import { expect } from 'vitest';
import { NetworkRuntimeEngine, TCP_FLAG, type EthernetFrame } from '../src/index.js';
import { snapshotOf, type Scenario } from './scenario.js';
@@ -154,3 +155,62 @@ export function javaFrames(framesByNode: Record<string, JavaFrame[]>): SeenFrame
export function gaps(frames: readonly SeenFrame[]) {
return frames.map((frame, index) => ({ text: frame.text, gap: index === 0 ? 0 : frame.time - frames[index - 1]!.time }));
}
/**
* Each card's packet capture against Java's (the Lauscher's list of the
* card, as the oracle wrote it: under the node's id for its first card,
* `id#index` for the others): the same frames in the same order, each at
* about the same time (both counted from the run's first frame, or from
* `starts`). `text`
* puts placeholders in a frame's text (ports, IDs a test cannot predict),
* `normalized` does so for a card's whole list; with `until` (Java's time),
* only the frames before it; with `from`, only those from it.
*/
export function expectSameCaptures(
engine: NetworkRuntimeEngine,
scenario: Scenario,
java: Record<string, JavaFrame[]>,
options: {
text?: (text: string) => string;
normalized?: (frames: SeenFrame[]) => SeenFrame[];
from?: number | undefined;
until?: number | undefined;
tolerance?: number;
starts?: { java: number; engine: number };
} = {},
): void {
const text = options.text ?? ((each: string) => each);
const engineByCard = new Map<string, SeenFrame[]>();
for (const node of scenario.nodes) {
if (node.kind === 'networkSwitch') continue;
node.ports.forEach((port, index) => {
const frames = engine.capture.frames(port.id).map((each) => ({ time: each.timeMilliseconds, text: text(engineText(each.frame)) }));
engineByCard.set(index === 0 ? node.id : `${node.id}#${index}`, frames);
});
}
const javaByCard = new Map(Object.entries(java).map(([card, frames]) => [card, frames.map((frame) => ({ time: frame.time, text: text(javaText(frame)) }))]));
expect([...engineByCard.keys()].sort()).toEqual([...javaByCard.keys()].sort());
const first = (byCard: Map<string, SeenFrame[]>) => Math.min(...[...byCard.values()].flat().map((frame) => frame.time));
const engineStart = options.starts?.engine ?? first(engineByCard);
const javaStart = options.starts?.java ?? first(javaByCard);
const from = (options.from ?? Number.NEGATIVE_INFINITY) - javaStart;
const until = (options.until ?? Number.POSITIVE_INFINITY) - javaStart;
const normalized = options.normalized ?? ((frames: SeenFrame[]) => frames);
const window = (frames: SeenFrame[], start: number) =>
frames.filter((frame) => frame.time - start >= from && frame.time - start < until).map((frame) => ({ time: frame.time - start, text: frame.text }));
for (const [card, javaList] of javaByCard) {
const expected = normalized(window(javaList, javaStart));
const actual = normalized(window(engineByCard.get(card)!, engineStart));
for (let index = 0; index < Math.max(expected.length, actual.length); index += 1) {
expect(actual[index]?.text, `${card} frame #${index + 1}`).toBe(expected[index]?.text);
expect(Math.abs(actual[index]!.time - expected[index]!.time), `${card} time of frame #${index + 1}`).toBeLessThanOrEqual(
options.tolerance ?? GAP_TOLERANCE_MILLISECONDS,
);
}
}
}
/** A client's free port as "client": Java draws it at random, the engine from its seed. */
export function withClientPortText(text: string): string {
return text.replace(/:(\d{5})\b/g, (whole, port: string) => (Number(port) >= 49_152 ? ':client' : whole));
}
+19 -5
View File
@@ -22,7 +22,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import type { Id, IPv4DeliveryResult, NetworkRuntimeEngine } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import { expectSameCaptures, 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');
@@ -144,6 +144,8 @@ const STORIES: Record<string, (engine: NetworkRuntimeEngine, call: Call) => void
* end; the second server gets the datagram from the entry's WAN port, but its
* answer finds no entry and stays at the router. The engine adds an entry for
* the second remote end: its answer goes on to the PC, a cable later.
* (`answer` is the frame on the home router's WAN card, the first list it
* shows in.)
*/
const JAVA_BUGS: Record<string, (java: JavaRun) => JavaRun> = {
udpTwoRemotes: (java) => {
@@ -162,7 +164,8 @@ const JAVA_BUGS: Record<string, (java: JavaRun) => JavaRun> = {
const wanPort = java.nat[0]!.match(/42\.0\.0\.20:(\d+)/)![1];
const received = java.events.find(([, event]) => event === 'other server received two')!;
return {
frames: { ...java.frames, [LAN_PC]: [...java.frames[LAN_PC]!, onLan] },
// The home router's LAN card sends it as it arrives on the WAN card; the PC's receives it a cable later.
frames: { ...java.frames, [`${GATEWAY}#1`]: [...java.frames[`${GATEWAY}#1`]!, { ...onLan, time: answer.time + 1 }], [LAN_PC]: [...java.frames[LAN_PC]!, onLan] },
events: java.events.map(([time, event], index) =>
index === java.events.length - 1 && event === 'empfangen returned null' ? [received[0] + 168, 'empfangen returned pong two'] : [time, event],
),
@@ -171,8 +174,8 @@ const JAVA_BUGS: Record<string, (java: JavaRun) => JavaRun> = {
},
};
/** Free ports as "port", initial sequence numbers by their order, ties sorted. */
function normalized(frames: readonly SeenFrame[]): SeenFrame[] {
/** Free ports as "port", initial sequence numbers by their order. */
function withPlaceholders(frames: readonly SeenFrame[]): SeenFrame[] {
const bases = new Map<number, number>();
const sequence = (value: string) => {
const number = Number(value);
@@ -180,10 +183,15 @@ function normalized(frames: readonly SeenFrame[]): SeenFrame[] {
if (!bases.has(base)) bases.set(base, bases.size + 1);
return `isn${bases.get(base)}+${number % 1_000_000}`;
};
const texts = frames.map((frame) => ({
return frames.map((frame) => ({
time: frame.time,
text: withPorts(frame.text).replace(/(seq|ack)=(\d+)/g, (whole, name: string, value: string) => (value === '0' ? whole : `${name}=${sequence(value)}`)),
}));
}
/** With placeholders, ties sorted: over all cards, Java's log writes frames that show together in any order. */
function normalized(frames: readonly SeenFrame[]): SeenFrame[] {
const texts = withPlaceholders(frames);
const result: SeenFrame[] = [];
for (let start = 0; start < texts.length; ) {
let end = start + 1;
@@ -248,6 +256,12 @@ describe('NAT as Java FILIUS runs it', () => {
}
}
// A card's own list keeps its order.
expectSameCaptures(engine, scenario, java.frames, {
normalized: withPlaceholders,
tolerance: TCP_STORIES.has(name) ? TCP_TOLERANCE_MILLISECONDS : GAP_TOLERANCE_MILLISECONDS,
});
// The client's calls: Java's server threads write events of their own, which the engine's story has not.
const javaCalls = java.events.filter(([, event]) => !event.startsWith('server') && !event.startsWith('other server'));
expect(events.map(([, event]) => event)).toEqual(javaCalls.map(([, event]) => event));
+4 -1
View File
@@ -31,7 +31,7 @@ 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 { expectSameCaptures, 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');
@@ -142,6 +142,9 @@ describe('RIP as Java FILIUS runs it', () => {
}
}
// Each card's capture, after the startup.
expectSameCaptures(engine, scenario, java.frames, { from: STARTUP_MILLISECONDS, starts: { java: offset, engine: 0 } });
// 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[] => {
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 459,
"time": 453,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -13,7 +13,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 464,
"time": 458,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -24,7 +24,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 688,
"time": 682,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -32,7 +32,7 @@
"targetIp": "192.168.0.100"
},
{
"time": 801,
"time": 794,
"source": "02:00:00:00:01:13",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
@@ -40,7 +40,7 @@
"targetIp": "255.255.255.255"
},
{
"time": 912,
"time": 905,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -51,7 +51,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 968,
"time": 961,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -62,7 +62,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3663,
"time": 3656,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -73,7 +73,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 6413,
"time": 6406,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -84,7 +84,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 9164,
"time": 9157,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -95,7 +95,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11914,
"time": 11907,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -106,7 +106,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11915,
"time": 11907,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -117,7 +117,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 12138,
"time": 12132,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -128,7 +128,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 12194,
"time": 12188,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -139,25 +139,25 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14889,
"time": 14881,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.191"
"targetIp": "169.254.1.107"
},
{
"time": 17640,
"time": 17632,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.191",
"senderIp": "169.254.1.107",
"targetIp": "255.255.255.255"
}
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 338,
"time": 331,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -168,7 +168,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 576,
"time": 569,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -179,7 +179,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 577,
"time": 570,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -187,7 +187,7 @@
"targetIp": "192.168.0.100"
},
{
"time": 801,
"time": 794,
"source": "02:00:00:00:01:13",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
@@ -195,7 +195,7 @@
"targetIp": "255.255.255.255"
},
{
"time": 801,
"time": 794,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -206,7 +206,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 857,
"time": 850,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -217,7 +217,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3552,
"time": 3545,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -228,7 +228,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 6302,
"time": 6295,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -239,7 +239,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 9052,
"time": 9045,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -250,7 +250,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11802,
"time": 11795,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -261,7 +261,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 12026,
"time": 12019,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -272,7 +272,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 12027,
"time": 12019,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -283,7 +283,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 12082,
"time": 12076,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -294,25 +294,25 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14778,
"time": 14770,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.191"
"targetIp": "169.254.1.107"
},
{
"time": 17528,
"time": 17521,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.191",
"senderIp": "169.254.1.107",
"targetIp": "255.255.255.255"
}
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 459,
"time": 453,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -323,7 +323,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 576,
"time": 569,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -334,7 +334,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 688,
"time": 682,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -342,7 +342,7 @@
"targetIp": "192.168.0.100"
},
{
"time": 690,
"time": 683,
"source": "02:00:00:00:01:13",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
@@ -350,7 +350,7 @@
"targetIp": "255.255.255.255"
},
{
"time": 912,
"time": 905,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -361,7 +361,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 968,
"time": 961,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -372,7 +372,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3663,
"time": 3656,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -383,7 +383,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 6413,
"time": 6406,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -394,7 +394,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 9164,
"time": 9157,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -405,7 +405,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11914,
"time": 11907,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -416,7 +416,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 12026,
"time": 12019,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -427,7 +427,7 @@
"payload": "DHCPOFFER\nyiaddr=192.168.0.100\nchaddr=02:00:00:00:01:12\nrouter=0.0.0.0\nsubnetmask=255.255.255.0\ndnsserver=0.0.0.0\nserverident=192.168.0.10"
},
{
"time": 12138,
"time": 12132,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -438,7 +438,7 @@
"payload": "DHCPDECLINE\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 12194,
"time": 12188,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -449,19 +449,19 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14889,
"time": 14881,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.191"
"targetIp": "169.254.1.107"
},
{
"time": 17640,
"time": 17632,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.191",
"senderIp": "169.254.1.107",
"targetIp": "255.255.255.255"
}
]
@@ -474,7 +474,7 @@
""
],
"00000000-0000-0000-0000-000000000102": [
"169.254.1.191",
"169.254.1.107",
"255.255.0.0",
"",
""
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 466,
"time": 457,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -13,7 +13,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3199,
"time": 3189,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -24,7 +24,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 5949,
"time": 5943,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -35,7 +35,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 8699,
"time": 8690,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -46,7 +46,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11450,
"time": 11440,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -57,25 +57,25 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14201,
"time": 14191,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.72"
"targetIp": "169.254.1.174"
},
{
"time": 16951,
"time": 16941,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.72",
"senderIp": "169.254.1.174",
"targetIp": "255.255.255.255"
}
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 342,
"time": 333,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -86,7 +86,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3087,
"time": 3078,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -97,7 +97,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 5838,
"time": 5828,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -108,7 +108,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 8588,
"time": 8578,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -119,7 +119,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11338,
"time": 11329,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -130,25 +130,25 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14089,
"time": 14080,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.72"
"targetIp": "169.254.1.174"
},
{
"time": 16840,
"time": 16830,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.72",
"senderIp": "169.254.1.174",
"targetIp": "255.255.255.255"
}
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 466,
"time": 457,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -159,7 +159,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 3199,
"time": 3189,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -170,7 +170,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 5949,
"time": 5943,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -181,7 +181,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 8699,
"time": 8690,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -192,7 +192,7 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 11450,
"time": 11440,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -203,19 +203,19 @@
"payload": "DHCPDISCOVER\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12"
},
{
"time": 14201,
"time": 14191,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "0.0.0.0",
"targetIp": "169.254.1.72"
"targetIp": "169.254.1.174"
},
{
"time": 16951,
"time": 16941,
"source": "02:00:00:00:01:12",
"destination": "ff:ff:ff:ff:ff:ff",
"arp": 2,
"senderIp": "169.254.1.72",
"senderIp": "169.254.1.174",
"targetIp": "255.255.255.255"
}
]
@@ -228,7 +228,7 @@
""
],
"00000000-0000-0000-0000-000000000102": [
"169.254.1.72",
"169.254.1.174",
"255.255.0.0",
"",
""
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 455,
"time": 454,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -67,7 +67,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 333,
"time": 332,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -97,7 +97,7 @@
"targetIp": "192.168.0.100"
},
{
"time": 627,
"time": 628,
"source": "02:00:00:00:01:13",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.30",
@@ -119,7 +119,7 @@
"payload": "DHCPREQUEST\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 3547,
"time": 3546,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -132,7 +132,7 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 455,
"time": 454,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "0.0.0.0",
@@ -184,7 +184,7 @@
"payload": "DHCPREQUEST\nyiaddr=0.0.0.0\nchaddr=02:00:00:00:01:12\nrequested=192.168.0.100\nserverident=192.168.0.10"
},
{
"time": 3547,
"time": 3546,
"source": "02:00:00:00:01:11",
"destination": "FF:FF:FF:FF:FF:FF",
"sourceIp": "192.168.0.10",
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 852,
"time": 853,
"source": "02:00:00:00:01:13",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -18,13 +18,13 @@
"targetIp": "192.168.0.30"
},
{
"time": 1081,
"time": 1083,
"source": "02:00:00:00:01:13",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.30",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 62251,
"sourcePort": 50448,
"destinationPort": 81,
"payload": null,
"tcpFlags": "S",
@@ -34,7 +34,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 852,
"time": 853,
"source": "02:00:00:00:01:13",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -52,7 +52,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 965,
"time": 966,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:13",
"arp": 2,
@@ -66,7 +66,7 @@
"sourceIp": "192.168.0.30",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 62251,
"sourcePort": 50448,
"destinationPort": 81,
"payload": null,
"tcpFlags": "S",
@@ -96,7 +96,7 @@
"SYN_SENT"
],
[
8979,
8978,
"CLOSED"
]
]
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 857,
"time": 856,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 858,
"time": 857,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -18,13 +18,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 1086,
"time": 1084,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -32,27 +32,27 @@
"acknowledgement": 0
},
{
"time": 1088,
"time": 1086,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1312,
"time": 1309,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -60,13 +60,13 @@
"acknowledgement": 1000001
},
{
"time": 1367,
"time": 1364,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": "GET /",
"tcpFlags": "P",
@@ -74,41 +74,41 @@
"acknowledgement": 0
},
{
"time": 1368,
"time": 1365,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000006
},
{
"time": 1423,
"time": 1420,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 1646,
"time": 1643,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -116,27 +116,27 @@
"acknowledgement": 1001461
},
{
"time": 1647,
"time": 1644,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "",
"sequence": 1001461,
"acknowledgement": 0
},
{
"time": 1869,
"time": 1867,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -144,27 +144,27 @@
"acknowledgement": 1002921
},
{
"time": 1870,
"time": 1867,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "P",
"sequence": 1002921,
"acknowledgement": 0
},
{
"time": 2092,
"time": 2090,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -172,13 +172,13 @@
"acknowledgement": 1003001
},
{
"time": 2148,
"time": 2145,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -186,41 +186,41 @@
"acknowledgement": 0
},
{
"time": 2148,
"time": 2145,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "A",
"sequence": 1003001,
"acknowledgement": 2000007
},
{
"time": 2204,
"time": 2201,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "F",
"sequence": 1003001,
"acknowledgement": 0
},
{
"time": 2426,
"time": 2423,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -230,7 +230,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 733,
"time": 731,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -238,7 +238,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 970,
"time": 968,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -246,13 +246,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 972,
"time": 971,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -260,27 +260,27 @@
"acknowledgement": 0
},
{
"time": 1200,
"time": 1197,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1200,
"time": 1198,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -288,13 +288,13 @@
"acknowledgement": 1000001
},
{
"time": 1256,
"time": 1253,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": "GET /",
"tcpFlags": "P",
@@ -302,41 +302,41 @@
"acknowledgement": 0
},
{
"time": 1479,
"time": 1476,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000006
},
{
"time": 1535,
"time": 1532,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 1535,
"time": 1532,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -344,27 +344,27 @@
"acknowledgement": 1001461
},
{
"time": 1758,
"time": 1755,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "",
"sequence": 1001461,
"acknowledgement": 0
},
{
"time": 1758,
"time": 1756,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -372,27 +372,27 @@
"acknowledgement": 1002921
},
{
"time": 1981,
"time": 1978,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tcpFlags": "P",
"sequence": 1002921,
"acknowledgement": 0
},
{
"time": 1981,
"time": 1979,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -400,13 +400,13 @@
"acknowledgement": 1003001
},
{
"time": 2037,
"time": 2034,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -414,41 +414,41 @@
"acknowledgement": 0
},
{
"time": 2259,
"time": 2256,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "A",
"sequence": 1003001,
"acknowledgement": 2000007
},
{
"time": 2315,
"time": 2312,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61961,
"destinationPort": 49357,
"payload": null,
"tcpFlags": "F",
"sequence": 1003001,
"acknowledgement": 0
},
{
"time": 2315,
"time": 2312,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61961,
"sourcePort": 49357,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -458,7 +458,7 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 857,
"time": 856,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -469,104 +469,116 @@
},
"events": [
[
216,
215,
"server oeffnen called"
],
[
717,
716,
"client verbinden called"
],
[
1218,
1217,
"client verbinden returned"
],
[
1218,
1217,
"client senden called"
],
[
1319,
1318,
"server oeffnen returned"
],
[
1319,
1318,
"server empfangen called"
],
[
1368,
1365,
"server empfangen returned 5 characters"
],
[
1368,
1365,
"server senden called"
],
[
1479,
1476,
"client senden returned"
],
[
1479,
1476,
"client empfangen called"
],
[
1981,
1979,
"client empfangen returned 3000 characters"
],
[
1981,
1979,
"client schliessen called"
],
[
1981,
1979,
"client schliessen returned"
],
[
2092,
2090,
"server senden returned"
],
[
3146,
"server schliessen called"
],
[
3146,
"server schliessen returned"
]
],
"states": {
"client": [
[
717,
716,
"CLOSED"
],
[
729,
727,
"SYN_SENT"
],
[
1202,
1199,
"ESTABLISHED"
],
[
1982,
1981,
"FIN_WAIT_1"
],
[
2260,
2256,
"FIN_WAIT_2"
],
[
2315,
2312,
"TIME_WAIT"
],
[
10565,
10562,
"CLOSED"
]
],
"server": [
[
1319,
1318,
"ESTABLISHED"
],
[
2148,
2145,
"CLOSE_WAIT"
],
[
2147,
"LAST_ACK"
],
[
2428,
2423,
"CLOSED"
]
]
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 854,
"time": 853,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -24,7 +24,7 @@
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -32,27 +32,27 @@
"acknowledgement": 0
},
{
"time": 1084,
"time": 1085,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1307,
"time": 1308,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -60,13 +60,13 @@
"acknowledgement": 1000001
},
{
"time": 26579,
"time": 26578,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -74,41 +74,41 @@
"acknowledgement": 0
},
{
"time": 26579,
"time": 26578,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000010
},
{
"time": 26635,
"time": 26634,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 26858,
"time": 26856,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -118,7 +118,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 731,
"time": 729,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -126,7 +126,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 967,
"time": 966,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -140,7 +140,7 @@
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -155,20 +155,20 @@
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1196,
"time": 1197,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -176,13 +176,13 @@
"acknowledgement": 1000001
},
{
"time": 1717,
"time": 1716,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": "verloren",
"tcpFlags": "P",
@@ -190,13 +190,13 @@
"acknowledgement": 0
},
{
"time": 9967,
"time": 9966,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": "verloren",
"tcpFlags": "P",
@@ -204,13 +204,13 @@
"acknowledgement": 0
},
{
"time": 18217,
"time": 18216,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": "verloren",
"tcpFlags": "P",
@@ -224,7 +224,7 @@
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -232,41 +232,41 @@
"acknowledgement": 0
},
{
"time": 26691,
"time": 26690,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000010
},
{
"time": 26746,
"time": 26745,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61897,
"destinationPort": 51723,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
"acknowledgement": 0
},
{
"time": 26747,
"time": 26745,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61897,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -276,18 +276,32 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 854,
"time": 853,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.10"
},
{
"time": 26578,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 51723,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
"sequence": 2000009,
"acknowledgement": 0
}
]
},
"events": [
[
215,
214,
"server oeffnen called"
],
[
@@ -295,15 +309,15 @@
"client verbinden called"
],
[
1216,
1215,
"client verbinden returned"
],
[
1317,
1316,
"server oeffnen returned"
],
[
1716,
1715,
"loss on"
],
[
@@ -322,19 +336,19 @@
"states": {
"client": [
[
715,
714,
"CLOSED"
],
[
727,
725,
"SYN_SENT"
],
[
1197,
1198,
"ESTABLISHED"
],
[
26469,
26467,
"FIN_WAIT_1"
],
[
@@ -352,9 +366,13 @@
],
"server": [
[
1317,
1316,
"ESTABLISHED"
],
[
26578,
"CLOSE_WAIT"
],
[
26580,
"LAST_ACK"
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 850,
"time": 855,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 852,
"time": 857,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -18,13 +18,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 1079,
"time": 1086,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61346,
"sourcePort": 63329,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -32,27 +32,27 @@
"acknowledgement": 0
},
{
"time": 1081,
"time": 1088,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61346,
"destinationPort": 63329,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1305,
"time": 1311,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61346,
"sourcePort": 63329,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -62,7 +62,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 729,
"time": 733,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -70,7 +70,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 963,
"time": 969,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -78,13 +78,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 966,
"time": 972,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61346,
"sourcePort": 63329,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -92,27 +92,27 @@
"acknowledgement": 0
},
{
"time": 1193,
"time": 1199,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 61346,
"destinationPort": 63329,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1193,
"time": 1200,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61346,
"sourcePort": 63329,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -120,13 +120,13 @@
"acknowledgement": 1000001
},
{
"time": 1716,
"time": 1719,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 61346,
"sourcePort": 63329,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -136,7 +136,7 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 850,
"time": 855,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -147,56 +147,56 @@
},
"events": [
[
214,
216,
"server oeffnen called"
],
[
715,
718,
"client verbinden called"
],
[
1216,
1218,
"client verbinden returned"
],
[
1317,
1319,
"server oeffnen returned"
],
[
1716,
1719,
"client schliessen called"
],
[
1716,
1719,
"client schliessen returned"
],
[
1716,
1719,
"lost FIN"
]
],
"states": {
"client": [
[
715,
717,
"CLOSED"
],
[
725,
729,
"SYN_SENT"
],
[
1195,
1201,
"ESTABLISHED"
],
[
1717,
1719,
"FIN_WAIT_1"
]
],
"server": [
[
1317,
1319,
"ESTABLISHED"
]
]
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 856,
"time": 849,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 858,
"time": 850,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -18,13 +18,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 1086,
"time": 1078,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -32,27 +32,27 @@
"acknowledgement": 0
},
{
"time": 1088,
"time": 1079,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 54938,
"destinationPort": 59631,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1311,
"time": 1303,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -60,13 +60,13 @@
"acknowledgement": 1000001
},
{
"time": 1834,
"time": 1827,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -74,28 +74,28 @@
"acknowledgement": 0
},
{
"time": 1834,
"time": 1828,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 54938,
"destinationPort": 59631,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
"acknowledgement": 2000002
},
{
"time": 1890,
"time": 1883,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 54938,
"destinationPort": 59631,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
@@ -104,7 +104,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 734,
"time": 729,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -112,7 +112,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 970,
"time": 962,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -120,13 +120,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 972,
"time": 964,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -134,27 +134,27 @@
"acknowledgement": 0
},
{
"time": 1199,
"time": 1191,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 54938,
"destinationPort": 59631,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 1200,
"time": 1191,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "A",
@@ -162,13 +162,13 @@
"acknowledgement": 1000001
},
{
"time": 1722,
"time": 1716,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 54938,
"sourcePort": 59631,
"destinationPort": 80,
"payload": null,
"tcpFlags": "F",
@@ -176,14 +176,14 @@
"acknowledgement": 0
},
{
"time": 1946,
"time": 1939,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 54938,
"destinationPort": 59631,
"payload": null,
"tcpFlags": "A",
"sequence": 1000001,
@@ -192,7 +192,7 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 856,
"time": 849,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -203,64 +203,64 @@
},
"events": [
[
219,
214,
"server oeffnen called"
],
[
720,
714,
"client verbinden called"
],
[
1221,
1215,
"client verbinden returned"
],
[
1321,
1317,
"server oeffnen returned"
],
[
1721,
1715,
"client schliessen called"
],
[
1721,
1715,
"client schliessen returned"
],
[
1890,
1883,
"lost FIN"
]
],
"states": {
"client": [
[
720,
714,
"CLOSED"
],
[
731,
724,
"SYN_SENT"
],
[
1201,
1191,
"ESTABLISHED"
],
[
1724,
1716,
"FIN_WAIT_1"
],
[
1947,
1940,
"FIN_WAIT_2"
]
],
"server": [
[
1322,
1317,
"ESTABLISHED"
],
[
1835,
1829,
"LAST_ACK"
]
]
@@ -2,7 +2,7 @@
"frames": {
"00000000-0000-0000-0000-000000000101": [
{
"time": 855,
"time": 850,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -10,7 +10,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 856,
"time": 852,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -18,13 +18,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 1083,
"time": 1079,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 52633,
"sourcePort": 52891,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -32,28 +32,28 @@
"acknowledgement": 0
},
{
"time": 1085,
"time": 1081,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 52633,
"destinationPort": 52891,
"payload": null,
"tcpFlags": "SA",
"sequence": 1000000,
"acknowledgement": 2000001
},
{
"time": 17585,
"time": 17582,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 52633,
"destinationPort": 52891,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
@@ -62,7 +62,7 @@
],
"00000000-0000-0000-0000-000000000102": [
{
"time": 733,
"time": 728,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
@@ -70,7 +70,7 @@
"targetIp": "192.168.0.10"
},
{
"time": 968,
"time": 963,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"arp": 2,
@@ -78,13 +78,13 @@
"targetIp": "192.168.0.20"
},
{
"time": 970,
"time": 966,
"source": "02:00:00:00:01:12",
"destination": "02:00:00:00:01:11",
"sourceIp": "192.168.0.20",
"destinationIp": "192.168.0.10",
"protocol": 6,
"sourcePort": 52633,
"sourcePort": 52891,
"destinationPort": 80,
"payload": null,
"tcpFlags": "S",
@@ -92,14 +92,14 @@
"acknowledgement": 0
},
{
"time": 17697,
"time": 17694,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 52633,
"destinationPort": 52891,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
@@ -108,63 +108,81 @@
],
"00000000-0000-0000-0000-000000000103": [
{
"time": 855,
"time": 850,
"source": "02:00:00:00:01:12",
"destination": "FF:FF:FF:FF:FF:FF",
"arp": 1,
"senderIp": "192.168.0.20",
"targetIp": "192.168.0.10"
},
{
"time": 17696,
"source": "02:00:00:00:01:11",
"destination": "02:00:00:00:01:12",
"sourceIp": "192.168.0.10",
"destinationIp": "192.168.0.20",
"protocol": 6,
"sourcePort": 80,
"destinationPort": 52891,
"payload": null,
"tcpFlags": "F",
"sequence": 1000001,
"acknowledgement": 0
}
]
},
"events": [
[
218,
213,
"server oeffnen called"
],
[
719,
714,
"client verbinden called"
],
[
1085,
1081,
"lost SYN+ACK"
],
[
9025,
9019,
"client verbinden failed TimeOutException"
],
[
17632,
17626,
"server oeffnen returned"
]
],
"states": {
"server": [
[
221,
215,
"CLOSED"
],
[
217,
"LISTEN"
],
[
1085,
1081,
"SYN_RCVD"
],
[
17585,
17582,
"FIN_WAIT_1"
]
],
"client": [
[
719,
713,
"CLOSED"
],
[
731,
724,
"SYN_SENT"
],
[
8980,
8974,
"CLOSED"
]
]
+19 -4
View File
@@ -20,7 +20,7 @@ import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import { TCP_FLAG, type Id, type NetworkRuntimeEngine, type TcpSegment } from '../src/index.js';
import { loseFirst } from './fixtures.js';
import { GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame, type SeenFrame } from './javaRun.js';
import { expectSameCaptures, GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, withClientPortText, type JavaFrame, type SeenFrame } from './javaRun.js';
import type { Scenario } from './scenario.js';
const scenarioDirectory = join(dirname(fileURLToPath(import.meta.url)), 'scenarios');
@@ -241,6 +241,17 @@ const JAVA_UNTIL: Record<string, (java: JavaRun) => number> = {
lostSynAck: (java) => java.states.client!.find(([, state]) => state === 'SYN_SENT')![0] + JAVA_TIMEOUT_MILLISECONDS - GAP_TOLERANCE_MILLISECONDS,
};
/**
* Where each card's capture is compared only up to a time (Java's), beyond
* JAVA_UNTIL. closedPort: JAVA_BUGS adds the client's two later SYNs to its
* own card, not where else they show — the switch has forgotten the server
* by then and floods them to every card. Compared up to the second SYN.
*/
const CAPTURE_UNTIL: Record<string, (java: JavaRun) => number> = {
...JAVA_UNTIL,
closedPort: (java) => java.states.client!.find(([, state]) => state === 'SYN_SENT')![0] + JAVA_TIMEOUT_MILLISECONDS - GAP_TOLERANCE_MILLISECONDS,
};
describe('TCP as Java FILIUS runs it', () => {
it('corrects Java only where it errs', () => {
for (const [name, correct] of Object.entries(JAVA_BUGS)) {
@@ -250,7 +261,7 @@ describe('TCP as Java FILIUS runs it', () => {
});
it('cuts only where Java goes on with its error', () => {
for (const [name, until] of Object.entries(JAVA_UNTIL)) {
for (const [name, until] of Object.entries(CAPTURE_UNTIL)) {
const java = JSON.parse(readFileSync(join(scenarioDirectory, `tcp-java-${name}.java.json`), 'utf8')) as JavaRun;
const cut = until(java);
const later = [...Object.values(java.frames).flat().map((frame) => frame.time), ...Object.values(java.states).flat().map(([time]) => time)];
@@ -288,13 +299,17 @@ describe('TCP as Java FILIUS runs it', () => {
);
}
expectSameCaptures(engine, scenario, java.frames, { text: withClientPortText, until: CAPTURE_UNTIL[name]?.(measured) });
const shift = (states: [number, string][], syn: number): [number, string][] => before(states.map(([time, state]) => [time - syn, state]));
// From SYN_SENT: Java's first CLOSED is when the socket was made.
const javaClient = java.states.client!.filter(([, state], index) => !(index === 0 && state === 'CLOSED'));
expectSameStates('client', shift(engineStates(engine, story.client, false), engineSyn), shift(javaClient, javaSyn));
if (java.states.server !== undefined) {
// A listening server from its first change: Java's first LISTEN is when it began to listen.
const javaServer = story.serverListening === true ? java.states.server.slice(1) : java.states.server;
// A listening server from its first change: Java's first LISTEN is when it began to listen (its
// poll may have seen the socket CLOSED before).
const listening = java.states.server.findIndex(([, state]) => state === 'LISTEN');
const javaServer = story.serverListening === true ? java.states.server.slice(listening + 1) : java.states.server;
expectSameStates('server', shift(engineStates(engine, SERVER, story.serverListening !== true), engineSyn), shift(javaServer, javaSyn));
}
});
+2 -1
View File
@@ -17,7 +17,7 @@ import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, it } from 'vitest';
import type { Id, NetworkRuntimeEngine } from '../src/index.js';
import { GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame } from './javaRun.js';
import { expectSameCaptures, GAP_TOLERANCE_MILLISECONDS, gaps, javaFrames, watchedEngine, type JavaFrame } from './javaRun.js';
import type { Scenario } from './scenario.js';
const scenarioDirectory = join(dirname(fileURLToPath(import.meta.url)), 'scenarios');
@@ -76,6 +76,7 @@ describe('WLAN as Java FILIUS runs it', () => {
expect(actual[index]?.text, `frame #${index + 1}`).toBe(expected[index]?.text);
expect(Math.abs(actual[index]!.gap - expected[index]!.gap), `gap before frame #${index + 1}`).toBeLessThanOrEqual(GAP_TOLERANCE_MILLISECONDS);
}
expectSameCaptures(engine, scenario, java.frames);
});
}
});