3. 抓包工具选择:Wireshark、tcpdump、Fiddler、Charles 等工具的适用场景对比

做网络排错这么多年,我经常被问到同一个问题:“到底该用哪个抓包工具?”

说实话,没有万能工具。每个工具都有自己的脾气。选错了,你可能折腾半天啥也抓不到。选对了,问题几分钟就定位。

这一章,我把主流工具掰开揉碎讲清楚。你听完就知道什么场景该掏什么家伙。

3.1 先看一张全景图

下面这张图,是我自己总结的工具选择逻辑。你把它存脑子里,以后选工具不用纠结。

抓包工具选择决策树 抓包需求 命令行/远程/低资源 GUI/本地/深度分析 tcpdump tcpdump + Wireshark Wireshark Fiddler / Charles 核心判断依据 • 服务器/嵌入式设备 → tcpdump • 本地网络协议分析 → Wireshark • HTTP/HTTPS 调试 → Fiddler 或 Charles • 远程抓包 + 本地分析 → tcpdump + Wireshark 组合

3.2 Wireshark:网络分析的全能冠军

Wireshark 是我用得最多的工具。没有之一。

它能看二层到七层的所有协议。TCP 握手、DNS 查询、TLS 证书交换……只要数据包经过网卡,它就能抓到。

适用场景:

  • 排查 TCP 重传、窗口缩放、乱序等问题
  • 分析 DNS 解析过程
  • 调试 TLS/SSL 握手失败
  • 定位 ARP 欺骗、DHCP 异常
  • 协议逆向分析

我记得有一次,客户说他们的应用偶尔超时。我打开 Wireshark,抓了 5 分钟。一看统计,TCP 重传率高达 8%。顺着时间轴往下翻,发现是中间某台交换机在做 STP 收敛,导致丢包。这种问题,用其他工具很难一眼看出来。

我的习惯:Wireshark 配合显示过滤器用。比如 tcp.analysis.retransmission 直接过滤重传包,dns.time > 0.1 找出慢的 DNS 查询。别傻看原始数据,那是大海捞针。

3.3 tcpdump:命令行下的瑞士军刀

tcpdump 没有图形界面,但它是服务器排错的必备工具。

你想想看,生产环境能装 Wireshark 吗?很多 Linux 服务器连桌面都没有。这时候 tcpdump 就是你的救星。

# 抓 eth0 上 80 端口的包,保存到文件
tcpdump -i eth0 -w capture.pcap port 80

# 抓 10 个包后自动停止
tcpdump -i eth0 -c 10

# 过滤特定 IP 的流量
tcpdump -i eth0 host 192.168.1.100

我曾经踩过的坑:有一次在线上服务器抓包,忘了加 -c 参数限制包数量。结果 tcpdump 把磁盘写满了,导致服务挂了。后来我养成了习惯——抓包前先看磁盘空间,抓包时一定加 -W 轮转参数。

tcpdump 的另一个妙用是配合 Wireshark。在服务器上用 tcpdump 抓包,生成 pcap 文件,传到本地用 Wireshark 分析。这是远程排错的标准姿势。

3.4 Fiddler 与 Charles:HTTP/HTTPS 调试利器

这两个工具,说白了就是 HTTP 代理。它们能拦截、修改、重放 HTTP 请求和响应。

特性 Fiddler Charles
平台 Windows(.NET) 跨平台(Java)
HTTPS 解密 支持(安装根证书) 支持(安装根证书)
请求断点 支持(bpu 命令) 支持(Breakpoints)
脚本扩展 FiddlerScript (C#) 无原生脚本
移动端抓包 需配置代理 原生支持 iOS/Android
性能 中等 较好

我个人习惯用 Fiddler 做 Windows 上的 Web 调试。它的 FiddlerScript 非常强大,可以写规则自动修改请求头、模拟特定响应。

Charles 呢?我更多用在移动端测试。它内置了 iOS 和 Android 的代理配置向导,一键就能让手机流量走 Charles。而且 Charles 的带宽模拟功能很实用——可以模拟 3G、4G、甚至丢包环境。

适用场景对比:

  • Fiddler:Windows 平台、需要脚本自动化、团队协作(有共享会话功能)
  • Charles:跨平台、移动端抓包、带宽模拟、接口 Mock

3.5 其他工具:各有绝活

除了上面四个,还有几个工具值得提一下。

  • Burp Suite:Web 安全测试专用。抓包只是它的副业,改包、重放、扫描才是主业。做渗透测试的人离不开它。
  • Proxyman:macOS 上的新秀。界面漂亮,原生支持 Apple Silicon。如果你用 Mac 做开发,可以试试。
  • ngrep:把 grep 的文本匹配能力搬到网络层。适合快速在流量里找特定字符串,比如找某个 API 的请求。
  • tshark:Wireshark 的命令行版本。适合在脚本里做自动化分析。

3.6 选型决策清单

最后,我整理了一个决策清单。你遇到问题的时候,对着这个清单选工具就行。

场景 推荐工具 理由
Linux 服务器排错 tcpdump 无 GUI、轻量、可远程
TCP/IP 协议分析 Wireshark 协议解析最全、过滤器强大
Web 接口调试 Fiddler / Charles 可改包、可重放、可 Mock
移动端 App 抓包 Charles 原生支持、配置简单
安全测试 Burp Suite 专业安全功能
自动化脚本分析 tshark / tcpdump 可集成到 CI/CD
快速查找特定字符串 ngrep 像 grep 一样用

我的建议:别贪多。先把 Wireshark 和 tcpdump 练熟,这两个能覆盖 80% 的场景。Fiddler 和 Charles 按需学一个就行。工具是手段,不是目的。