3. 抓包工具选择:Wireshark、tcpdump、Fiddler、Charles 等工具的适用场景对比
做网络排错这么多年,我经常被问到同一个问题:“到底该用哪个抓包工具?”
说实话,没有万能工具。每个工具都有自己的脾气。选错了,你可能折腾半天啥也抓不到。选对了,问题几分钟就定位。
这一章,我把主流工具掰开揉碎讲清楚。你听完就知道什么场景该掏什么家伙。
3.1 先看一张全景图
下面这张图,是我自己总结的工具选择逻辑。你把它存脑子里,以后选工具不用纠结。
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 按需学一个就行。工具是手段,不是目的。