让 Wireshark 变得更简单(在终端里)。
Babyshark 是一个 PCAP TUI,帮助你回答:
状态: v0.3.0(alpha)。
.pcap / .pcapng 查看无需 Wiresharktshark(Wireshark 命令行工具)
概览是“从这里开始”的仪表板。 它总结捕获数据并建议下一步操作。
tshark 的最后状态/错误行)。使用方式:
D 跳转到域名(以主机名为优先)。W 跳转到奇怪的地方?(精选检测器)。F(或 f)跳转到流(原始)。
域名按主机名对流量进行分组,这样你可以从名称而非五元组开始分析。
使用方式:
s 更改排序模式。c 清除活跃子集过滤器。
奇怪的地方?是一组精选检测器,旨在回答“什么看起来坏了/慢了?”而无需深入了解 Wireshark 知识。
使用方式:
1–9 直接跳转)并按 回车。c 清除活跃子集过滤器。
展开 / 解释(?)提供通俗易懂的上下文,解释你正在看的内容。
? 打开解释。提示:按 h 查看帮助,按 g 查看词汇表。
从 GitHub Releases 获取二进制文件:
git clone https://github.com/vignesh07/babyshark
cd babyshark/rust
cargo install --path . --force
babyshark --help
.pcap / .pcapng 并浏览:
n / N 导航DL/UL 后缀,详情中显示 download-heavy/upload-heavy/balanced(当本地侧不明确时回退到 A>B/B>A)T):
下载预构建的二进制文件:
前置条件:
tsharkgit 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(--live 模式必需)tshark 是官方的 Wireshark 命令行工具。
# macOS (Homebrew)
brew install wireshark
Debian/Ubuntu:
sudo apt-get update
sudo apt-get install -y tshark
Fedora:
sudo dnf install -y wireshark-cli
Arch:
sudo pacman -S wireshark-cli
验证:
tshark --version
tshark -D
权限说明: 实时捕获可能需要提升的权限(sudo、dumpcap 能力或属于 wireshark 组)。如果 babyshark 打印权限错误,请按照其输出的指导进行操作。
babyshark 在 git 中更新了,但我的命令仍然运行旧版本如果你使用 cargo install 安装,在拉取后需要重新安装:
cd babyshark/rust
cargo install --path . --force
尝试使用 sudo 运行:
sudo babyshark --live en0
如果这样有效,你可能需要在操作系统上配置捕获权限(dumpcap、wireshark 组等)。
ips=0这通常发生在 DNS 应答不可见时(DoH/DoT 或缓存)。Babyshark 仍将在可用时使用 TLS SNI / HTTP Host 提示显示观察到的 IP(来自流)。
babyshark --pcap ./capture.pcap
babyshark --list-ifaces
babyshark --live en0
babyshark --live en0 --dfilter "tcp.port==443"
babyshark --live en0 --write-pcap /tmp/live.pcapng
这些是你在 TUI 中会看到的纯文本示例。IP/域名已匿名化。
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)
• Timeline (Gantt + Scatter) (press T)
↳ 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 Chatty hosts (burst connections) flows=28
3 TCP reliability hints (retransmits / out-of-order) flows=16
4 TCP resets (RST) flows=11
5 Deprecated TLS versions (≤ 1.1) flows=3
6 Handshake not completed flows=0
7 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.
Timeline: Gantt (Tab switch, ↑/↓ move, Enter packets, Esc back)
█ handshake █ TLS █ data █ close █ UDP
09:31:02 09:31:10 09:31:18 09:31:26
google.com (HTTPS) ● ██████████████████████████████████
chat.openai.com (HT… ● ████████████████
wikipedia.org (HTTPS) ● ██████████████████████████
DNS 10.0.0.1:53 ● ██
Pattern: 3 connections opened simultaneously — likely a page load
Pattern: 2 DNS lookups preceded 3 encrypted connections to matching hosts
Details
TCP 10.0.0.6:57608 ↔ 198.51.100.42:443
What happened
1. Connected to google.com (TCP handshake took 12.5ms)
2. Negotiated encryption (TLS 1.3)
3. Transferred 28.2KB in 89ms (40 packets)
4. Mostly downloading (server sent more data)
5. Connection closed cleanly (FIN)
时间线是你捕获数据的可视化故事。 它显示每个连接何时开始、经历了哪些阶段(握手、TLS、数据传输、关闭)以及它们如何重叠。
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 DL
❯● 2 TCP 32 10.0.0.6:57608 ↔ 198.51.100.42:443 DL
Details
TCP 10.0.0.6:57608 ↔ 198.51.100.42:443
A→B: 14 pkts / 1386 bytes
B→A: 26 pkts / 26307 bytes
Direction: download-heavy
Handshake RTT: 12.450ms
Server think: 3.200ms
Data transfer: 89.100ms
TLS version: TLS 1.2
bookmarks: 1
顶层:
o 概览D 域名W 奇怪的东西F 流T 时间线(甘特图 + 散点图)h 帮助g 词汇表q 退出视图中:
Enter 下钻(域名/奇怪 → 流,流 → 数据包)Esc 返回c 清除活跃子集过滤器? 解释选中的流x 关闭入门提示(概览)流视图:
↑/↓ 或 j/k 移动/ 过滤t / u 切换 TCP / UDPb 书签流E 导出报告时间线视图:
Tab / Shift-Tab 切换甘特图/散点图↑/↓ 或 j/k 移动PgUp/PgDn 翻页Enter 下钻到数据包数据包视图:
f 跟踪流流视图:
/ 搜索n / N 下一个/上一个匹配Tab / Shift-Tab 循环流方向↑/↓ 滚动当你书签/导出时,babyshark 会在 PCAP 旁边的一个隐藏目录中写入文件:
.babyshark/case.json — 书签.babyshark/report.md — 最新报告(会被覆盖).babyshark/report-YYYYMMDD-HHMMSS.md — 带版本号的报告--bpf 捕获过滤器透传(实时模式)MIT © 2026 Vignesh Natarajan