alpha · v0.2.1 · open rules

What's unusual in this capture, ranked.

Point it at a .pcap and it runs fifteen deterministic checks, in plain English, with the frame numbers that show each one. It tells you what stood out. The diagnosis stays yours.

Windows 10 / 11 Single .exe, no installer No LLM No network calls MIT licensed
15Checks
0Network calls
0Model inference
FreeAlways
A finding, in four parts

Every result shows its working.

Nothing is asserted without the evidence beside it. If you disagree with a finding, the capture is right there to check it against — and the rule that produced it is published.

What

What was observed

The measurement itself, with the numbers it was taken from — not a summary of them.

Why

Why it stood out

The comparison that made it unusual: a threshold, a peer group, or the capture's own median.

Where

Which frames show it

Frame numbers you can paste straight into Wireshark's display filter.

Next

What to check next

The next question the evidence supports — never a conclusion it doesn't.

Significant R04 · server-response-outlier

10.42.7.19:443 answered slowly compared with its peers

Observed. Application response time p50 410 ms, p95 1.82 s, max 4.10 s across 61 requests.

Why it stood out. Forty-one other servers in this capture are under 40 ms at p95. This one is 45× the capture median, and network RTT to it is 11 ms — so the delay is above the network, not in it.

#14 882#14 907#15 233#15 419#16 004+56 more

What to check next. Whether the slow responses cluster in time or in request path. Both are visible in the capture; neither is assumed here.

Illustrative finding, formatted as the app renders it. Severity colour is reserved for severity — it is never used as a brand colour.

What you actually see

Three screens, start to finish.

Open a capture, read what stood out, and export the result as a single self-contained file you can attach to a ticket. These are captures of a synthetic test file, so every address in them is from a documentation range.

The application's opening screen. A dashed drop zone headed "Choose a capture file" fills the centre, above a note reading "This tool highlights unusual activity — it doesn't diagnose the cause" and the start of a list describing each check the build runs.
Drop a file on it, or browse. The checks it will run are listed on the same screen, before you open anything.
A results screen headed "Top findings". The first finding is labelled significant and reports TLS handshakes failing on one server; the second is labelled worth noting and reports that server responding more slowly than its peers. Each states what was observed, lists the frame numbers evidencing it, and ends with a line headed "Check next". Below them, a section headed "What wasn't checked, and why" lists two capture-quality notes.
Ranked by how much each is likely to matter. The section at the bottom lists what could not be assessed, so a quiet result can't be mistaken for a clean one.
An exported HTML report open in a browser, headed "Top findings, all 6, most significant first". Each finding carries a rule number, a severity label and a confidence label, followed by the observation, the frame numbers, and what to check next.
The exported report — one file, no external references, nothing but headers and derived measurements. Safe to send to a vendor.
The fifteen

What it looks for.

These cover the conditions behind most "the network is slow" reports. Each one's thresholds, scoring weight and reasoning are published in RULES.md, so you can audit why something surfaced — and disagree with it.

R01 zero-window-stall

The receiver said stop

A peer advertised a zero window after a non-zero one, blocking the sender until it reopened.

R02 syn-unanswered

Nobody answered

A connection attempt with no SYN/ACK and no refusal, retry pattern included.

R03 syn-rejected

Refused outright

The SYN came back as a RST rather than a handshake. Instant, so it costs no time — just access.

R04 server-response-outlier

This server thinks slowly

Application response time, network RTT subtracted, measured at p95 against every peer in the capture.

R05 rto-retransmission

Retransmitted on a timer

Recovery after a timeout rather than duplicate ACKs — the expensive kind of loss.

R06 fast-retransmission

Retransmitted on duplicate ACKs

Loss the sender recovered from quickly, rated against this capture's own median rather than a fixed number.

R07 out-of-order-not-loss

Out of order, not lost

Segments that arrived early-numbered but fast enough that reordering explains them. Runs first, so loss isn't overcounted.

R08 asymmetric-loss

Loss in one direction only

Retransmissions running five times heavier one way than the other on the same flow.

R09 reset-mid-transfer

Killed mid-transfer

A RST with data still in flight — distinct from a tidy close and from an idle timeout.

R10 rtt-outlier

Consistently far away

Round-trip time four times the capture-wide median, with the spread reported so distance and congestion stay distinguishable.

R11 dns-failure

Name lookups failing

Cleartext DNS with no answer inside two seconds, SERVFAIL or NXDOMAIN, or answers past 500 ms.

R12 tls-handshake-failure

The handshake didn't finish

Fatal alerts, negotiation failures, handshakes over a second, and certificate dates where they're readable.

R13 pmtu-blackhole

Big packets vanish, small ones don't

ICMP fragmentation-needed tied to a flow, or large segments retransmitting while small ones sail through.

R14 connection-churn

Reconnecting over and over

Fifty-plus connections to one server:port with a median lifetime under a second.

R15 capture-quality

How much could be assessed

Snaplen truncation, midstream flows, capture-host drops, unreadable headers. Always runs, always reported — and never ranked, because it is about the capture, not the network.

Stated up front

What it will not do.

Most of these are the reason to trust the rest.

It won't tell you what broke

A finding says this server responded in 1.8 s at p95 while 41 others are under 40 ms — never this server is the problem. The first is checkable. The second is a guess wearing a lab coat.

An empty result is not a clean bill of health

It means these fifteen checks found nothing. Plenty can be wrong that none of them look for, and the report says so every time rather than letting silence read as an all-clear.

It can't read encrypted traffic

DNS-over-TLS and TLS 1.3 handshakes with encrypted certificates are reported as not assessed rather than as fine.

It's an alpha, and the thresholds are calibrated on synthetic captures

Whether the ranking puts the right thing first is the single most useful thing you can send back.

A tool that hedges everything is useless. A tool that overclaims is worse. The whole design is an argument about where that line sits — which is also why the detection logic is published rather than described.

Built by an IT consultancy

Captures are often evidence.

The file you point it at is opened read-only and left exactly as it was found.

No network calls of any kind

No update check, no telemetry, no reverse DNS. Nothing leaves the machine, including on first run.

It never writes near your capture

The file is opened read-only. Reports are written where you ask for them and nowhere else.

No model inference, anywhere

All detection is deterministic rule-based logic. The same capture produces the same findings, on any machine, forever.

Open rules, open source

The detection and ranking logic is published in full. You don't have to take the claims on trust — you can read them.

Install

One file. No installer.

Put it wherever you like and run it.

Download pcaptriage-gui.exe from the releases page.

Run it. There is nothing to install and nothing to configure.

Drop a .pcap or .pcapng onto the window, or use Choose a capture.

⚠ Windows will warn you the first time

The binary isn't code-signed, so SmartScreen shows "Windows protected your PC" with an unknown publisher. That's expected, not a sign anything is wrong — signing certificates cost money annually and this is a free tool. Click More info → Run anyway. If you'd rather not trust a binary from a stranger, the source builds in one command.