Wireshark made easy (in your terminal).
Babyshark is a PCAP TUI that helps you answer:
- What’s using the network?
- What looks broken/weird?
- What should I click next?
Status: v0.1.0 (alpha).
- Offline
.pcap/.pcapngviewing works without Wireshark - Live capture requires
tshark(Wireshark CLI)
Grab a binary from GitHub Releases:
git clone https://github.com/vignesh07/babyshark cd babyshark/rust cargo install --path . --force babyshark --help
- Offline: open
.pcap/.pcapngand browse:- flows list → packets list → follow stream
- stream search with highlighting +
n/Nnavigation
- Live: capture and inspect traffic in the TUI:
- list capture interfaces
- live capture with optional display filter
- optional write-to-file while capturing
- Notes/export:
- bookmark flows
- export markdown report (latest + timestamped copies)
Download a prebuilt binary:
Prereqs:
- Rust toolchain (stable)
- (Live mode only)
tshark
git clone https://github.com/vignesh07/babyshark cd babyshark/rust cargo install --path . --force babyshark --help
cargo install --git https://github.com/vignesh07/babyshark --bin babyshark
tshark is the official Wireshark CLI.
Debian/Ubuntu:
sudo apt-get update sudo apt-get install -y tshark
Fedora:
sudo dnf install -y wireshark-cli
Verify:
tshark --version tshark -D
Permissions note: live capture may require elevated permissions (sudo, dumpcap caps, or being in the wireshark group). If babyshark prints a permission error, follow the guidance it outputs.
If you installed with cargo install, you need to reinstall after pulling:
cd babyshark/rust cargo install --path . --force
Try running with sudo:
sudo babyshark --live en0
If that works, you likely need to configure capture permissions (dumpcap, wireshark group, etc.) on your OS.
This often happens when DNS answers aren’t visible (DoH/DoT or cached). Babyshark will still show Observed IPs (from flows) using TLS SNI / HTTP Host hints when available.
babyshark --pcap ./capture.pcap
babyshark --live en0 --dfilter "tcp.port==443"babyshark --live en0 --write-pcap /tmp/live.pcapng
These are text-only examples of what you’ll see in the TUI. IPs/domains are anonymized.
PCAP Viewer
babyshark Overview flows:114 packets:4227 tcp:on udp:on q=—
Overview (D domains, W weird, F flows)
In plain English
Packets: 4227 Flows: 114 Top talker: 10.0.0.6 (2711.9KB) Top talker (pkts): 10.0.0.6 (4046 pkts)
Live: 88s pps~14.6 dropped~0 | last: Capturing on 'Wi‑Fi: en0'
pps: ▁▁▂▂▃▄▅▆▆▇▆▅▄▃▂▂▁ (max 1372/bucket)
Top flow (bytes): UDP 10.0.0.6:57315 ↔ 203.0.113.123:443 (1359.3KB)
Top flow (pkts): UDP 10.0.0.6:57315 ↔ 203.0.113.123:443 (1284 pkts)
What should I click?
• Domains (human view) (press D)
• Weird stuff (troubleshoot) (press W)
• Flows (raw) (press F)
↳ Detected: High-latency flows (rough) (29 flows)
Domains (Enter show flows, s sort (conn/bytes/fail), c clear, Esc back)
1 wikipedia.com conn=9 bytes=21.0KB q=9 r=6 fail=0 ips=2
❯ 2 chat.openai.com conn=5 bytes=28.2KB q=5 r=3 fail=0 ips=2
Domain details
chat.openai.com
queries=5 responses=3 failures=0
Observed IPs (from flows):
10.0.0.6
198.51.100.42
Tip: Enter applies a subset filter (prefers observed IPs; DNS IPs if available).
Weird stuff (Enter show flows, c clear, Esc back)
❯ 1 High-latency flows (rough) flows=42
2 TCP reliability hints (retransmits / out-of-order) flows=16
3 TCP resets (RST) flows=11
4 Handshake not completed flows=0
5 DNS failures (NXDOMAIN/SERVFAIL) flows=0
Why it matters
High-latency flows (rough)
If a flow takes a long time and has lots of packets, it can indicate latency,
congestion, or retries. This is a rough heuristic and depends on correct timestamps.
Flows [LIVE en0] (63.8 pps) (Enter packets, / filter, t/u toggles, b bookmark, E export, o overview) subset=domain:chat.openai.com
1 UDP 510 10.0.0.6:59175 ↔ 203.0.113.123:443
❯ 2 TCP 32 10.0.0.6:57608 ↔ 198.51.100.42:443
Details
TCP 10.0.0.6:57608 ↔ 198.51.100.42:443
A→B: 14 pkts / 1386 bytes
B→A: 26 pkts / 26307 bytes
bookmarks: 1
Top-level:
ooverviewDdomainsWweird stuffFflowshhelpgglossaryqquit
In views:
Enterdrill down (domains/weird → flows, flows → packets)Escbackcclear active subset filter?explain selected flowxdismiss onboarding hint (Overview)
Flows view:
↑/↓orj/kmove/filtert/utoggle TCP / UDPbbookmark flowEexport report
Packets view:
ffollow stream
Stream view:
/searchn/Nnext / prev matchTab/Shift-Tabcycle stream direction↑/↓scroll
When you bookmark/export, babyshark writes next to the PCAP in a hidden directory:
.babyshark/case.json— bookmarks.babyshark/report.md— latest report (overwritten).babyshark/report-YYYYMMDD-HHMMSS.md— versioned reports
- Prettier onboarding + docs (screenshots/gifs)
--bpfcapture filter pass-through for live mode- Even better protocol hints + flow classification
- Improved TCP reassembly (gap/retransmit markers)
- Homebrew/Scoop packaging
TBD (choose MIT/Apache-2.0/etc.)