NetSift, a packet analyzer

Every packet,
sifted.

Live capture · HTTPS, HTTP/2 & HTTP/3 decryption · traffic per app

NetSift captures traffic or opens pcap/pcapng files, shows which app on your machine sent each connection, and decrypts HTTPS, HTTP/2 and HTTP/3 live, so you read requests instead of ciphertext.

macOS (Terminal)

curl -fsSL https://nyanites.github.io/netsift/install.sh | sh

Paste into Terminal (⌘ Space, type Terminal). Never asks for your password.

Linux (terminal)

curl -fsSL https://nyanites.github.io/netsift/install.sh | sh

Paste into a terminal. Installs to ~/.local/bin with an app-menu entry; no sudo.

Windows

Coming soon. The Windows build needs Npcap and isn't released yet. Until then, open captures from Windows machines on a Mac or Linux box, or follow the releases.

Latest release · macOS 11+ (Apple Silicon & Intel) · Linux x64 & ARM64 · free for small teams

NetSift showing decrypted HTTP/2 and HTTP/3 packets from a Firefox session, with the HTTP/3 request headers for www.cloudflare.com decoded in the details pane

A real Firefox session: HTTP/3 over QUIC decrypted, with the request's headers decoded from QPACK.

From packets to answers

Open a capture or start one, narrow it down with a filter, then dig in: conversations, apps, a request waterfall, automatic insights and readable HTTP.

🧩

Which app sent it

Every connection is attributed to the local process that owns it, during live capture and without root for your own apps. Filter with process == "firefox".

🔓

HTTPS, HTTP/2 and HTTP/3, decrypted

TLS 1.2 and 1.3, QUIC v1 and v2 with key updates and Encrypted Client Hello, HPACK and QPACK header decoding, from a standard SSLKEYLOGFILE.

🌐

One-click browser decryption

Launch Firefox or Chrome with key logging from the 🔑 menu. NetSift loads the keys and starts capturing; requests decrypt as you browse.

⏱

Request waterfall

Every HTTP/1, /2 and /3 request with connection setup, server wait and download, like browser devtools. Zoom by dragging; export to HAR.

⚖

Compare two captures

Client side vs server side: what never arrived, what appeared, and the delay between capture points. TTL, IP ID, checksums and NAT are ignored.

⚡

Instant search

Filters over a million packets return in milliseconds, using every core. Wireshark-style syntax: tls.sni contains "github", ip.addr == 10.0.0.0/8.

⚠

Insights

Retransmissions, resets, zero windows, DNS failures, HTTP errors and TLS alerts, grouped and one click from the packet.

📜

Follow streams as messages

Raw bytes, decrypted TLS, or HTTP/2 and HTTP/3 as readable request and response headers and bodies.

⌨

Headless CLI

netsift query, sessions, http, har and diff for scripts and pipelines, with -w to save matching packets.

Which app sent that packet?

During a live capture NetSift asks the operating system which process owns each connection, so traffic is grouped by app with the hosts it talked to. Earlier packets of a connection are labelled too.

The Apps view: Firefox, git and curl with their processes, connections, bytes sent and received, and top hosts
How it works: on macOS, kernel per-packet metadata (PKTAP) plus the socket table; on Linux, /proc. Without root you see your own apps (browsers, curl, editors); run as root to include system services. Wireshark can display process information only when a capture file already contains it.

Read HTTPS, HTTP/2 and HTTP/3

Browsers, curl, OpenSSL, BoringSSL, NSS and rustls can write their TLS secrets to a key log. Point NetSift at it, or let the 🔑 menu set it up, and sessions decrypt live as keys appear.

  • TLS 1.3 and 1.2: AES-GCM and ChaCha20-Poly1305, including TLS 1.3 key updates.
  • QUIC v1 and v2: header protection, coalesced packets, 1-RTT key updates. Initial packets decrypt without any key, so every QUIC connection's server name is visible.
  • Encrypted Client Hello: finds the keys logged under the hidden inner ClientHello.
  • HTTP/2 and HTTP/3: HPACK and QPACK, including dynamic tables, decoded per connection and filterable with http.host, http.request.method and http.response.code.
Details of a decrypted HTTP/3 request: method, scheme, authority, path and user-agent headers
The Decryption view listing TLS and QUIC sessions with server name, version, cipher suite, ALPN and status, all decrypted, one via ECH

Every request as a waterfall

The Timeline turns HTTP/1, /2 and /3 traffic, plain or decrypted, into the view you know from browser devtools: connection setup, waiting for the server, and download. Drag the time axis to zoom; click a request to jump to its packets; export the whole thing as a HAR file.

The Timeline view: a waterfall of HTTP/3 and HTTP/2 requests for a page load of www.cloudflare.com

Diff two captures

Capture on both sides of a firewall, proxy or load balancer, then compare: NetSift matches packets on ports, TCP sequence numbers, flags and payload, and shows what's missing, what's new and how long each packet took. compare.missing filters straight to the lost packets.

The Compare view: 44 packets missing from the second capture, an 18.3 ms delay between capture points, and the conversations affected

Fast where it counts

A 1.03 million packet, 1 GB capture built from real Firefox traffic, on an Apple M4 Pro, against tshark 4.6.8 running the same filters.

NetSifttshark
Each search after loading8–73 ms4.1–5.3 s (re-reads the file)
Load + search, decrypting HTTPS and HTTP/37.2–7.5 s11.0–11.7 s
Load + search, no decryption5.4–5.9 s4.1–5.3 s
Peak memory3.2 GB (5.7 GB decrypting)1.0 GB (2.2 GB)
The trade-off: NetSift keeps the whole capture parsed in memory, which is what makes every search after the first one instant. For one-off passes over very large files, tshark uses less memory.

Install with one command

Use the command for your system at the top of the page. No Rust, package manager or administrator rights needed.

macOS 11 or newer

Installs NetSift.app into Applications. One universal app for Apple Silicon and Intel Macs. Live capture uses /dev/bpf*: if Wireshark's ChmodBPF helper is installed it just works, otherwise the installer prints the one command to allow it.

Linux

Installs to ~/.local/bin/netsift with an app-menu entry. x64 and ARM64, glibc 2.35+ (Ubuntu 22.04, Debian 12, Fedora 36 and later). Needs libpcap; for live capture, grant cap_net_raw once with the setcap command the installer prints.

Windows

Coming soon: the Windows build needs Npcap and isn't released yet. Capture files from Windows machines open fine on macOS and Linux.

What the command does: downloads the latest release from GitHub, checks it against the published SHA-256 checksum, and installs it for your user only. Releases are built by GitHub Actions from the public source, with signed build provenance you can check with gh attestation verify <file> -R Nyanites/netsift. Read the script first if you like: install.sh.

Frequently asked questions

How do I decrypt HTTPS?

The easiest way: open the 🔑 menu and choose Launch Firefox with decryption (or Chrome). NetSift starts the browser with its own profile and key logging, loads the keys and starts capturing. Otherwise set SSLKEYLOGFILE=/path/to/keys.log before starting any browser or tool that supports it, and load that file from the 🔑 menu. NetSift re-reads it whenever it changes.

Why does live capture need permission?

Operating systems only let privileged programs read raw network traffic. On macOS that's /dev/bpf*, which Wireshark's ChmodBPF helper opens to the access_bpf group; on Linux it's the CAP_NET_RAW capability. NetSift never needs to run as root, and opening capture files needs no permission at all.

How does it compare with Wireshark?

Wireshark dissects thousands of protocols and remains the reference. NetSift focuses on the everyday workflow: modern web traffic (HTTP/2, HTTP/3, QUIC, ECH) decrypted with little setup, which app sent what, request waterfalls with HAR export, capture diffs, and instant re-filtering. Use both: NetSift reads and writes standard pcap files.

Is it safe to open captures from untrusted networks?

NetSift treats every packet as hostile input: dissectors are bounds-checked, the TLS, QUIC, HTTP/2, HPACK and QPACK parsers are fuzzed with random and mutated traffic, and a packet that can't be read is marked malformed instead of crashing. Report bugs privately through GitHub security advisories.

Does NetSift send my data anywhere?

No. There's no telemetry, no account and no update check. Key logs and captures stay on your machine. The only network traffic NetSift causes is a browser you launch yourself from the 🔑 menu.

Is NetSift free?

NetSift is free for small teams: organizations with fewer than 100 people and under US$1M in revenue, under the PolyForm Small Business License. Larger organizations need a commercial license.

How do I uninstall it?

macOS: drag NetSift from Applications to the Trash. Linux: delete ~/.local/bin/netsift, ~/.local/share/applications/netsift.desktop and ~/.local/share/icons/hicolor/256x256/apps/netsift.png.

Source-available, free for small teams

NetSift is published under the PolyForm Small Business License 1.0.0. The full source is on GitHub.

Free

For organizations with fewer than 100 people and under US$1M in annual revenue (2019 dollars, inflation-adjusted).

Commercial license

Larger organizations need a commercial license. Get in touch for terms.

Also in the Cydra Suite

Tidewatch for Windows event logs on macOS, and Sediment for the $MFT, USN journal and Prefetch.