2、Wireshark入门:安装、界面与第一次抓包
说实话,我见过太多人一上来就点「开始捕获」,然后被满屏花花绿绿的包吓住。别急,咱们一步步来。这一章,我带你把 Wireshark 装好、界面认熟、过滤器用明白,最后亲手抓到本机的 HTTP 流量。
2.1 安装与第一印象
Wireshark 的安装没什么玄学。去官网下载对应系统的版本,一路 Next 就行。不过有两点我得提醒你:
- WinPcap 或 Npcap:安装过程中会提示装这个底层驱动。我建议选 Npcap,它更现代,对 Windows 10/11 支持更好。我曾经遇到过 WinPcap 在 Win10 上抓不到回环包的情况,换了 Npcap 就好了。
- USB 捕获组件:除非你要抓 USB 流量,否则别勾。勾了也没坏处,但没必要。
装完打开,你会看到这个界面——嗯,有点复杂。别慌,核心就几个区域。
Wireshark 主界面核心区域速览:
- 菜单栏 + 工具栏:最上面,文件、编辑、捕获、分析…… 常用的就「捕获」和「分析」。
- 显示过滤器栏:工具栏下面那个长条输入框。这是你以后最常用的地方。
- 数据包列表:中间最大的区域,抓到包会一行一行列出来。
- 数据包详情:列表下方,选中一个包,这里会分层展示它的结构。
- 数据包字节:最下面,十六进制和 ASCII 原文。
我个人习惯先把界面语言切成中文(如果安装时选了中文的话)。不过说实话,很多关键过滤器和协议名还是英文,所以别太依赖翻译。
2.2 捕获过滤器 vs 显示过滤器
这是新手最容易搞混的地方。我直接说人话:
- 捕获过滤器:在抓包之前设置。它决定「哪些包进到内存里」。没通过的包,Wireshark 根本看不见。
- 显示过滤器:在抓包之后设置。它决定「哪些包显示在屏幕上」。所有包其实都在内存里,只是藏起来了。
为什么要分两种?你想想看,如果网络流量很大(比如每秒几万个包),捕获过滤器能帮你节省内存和磁盘。显示过滤器则更灵活,你可以随时改条件,不用重新抓。
我的建议:日常排错,直接用显示过滤器就够了。只有在你明确知道要过滤什么、且流量极大时,才用捕获过滤器。
下面这张图帮你理清两者的关系:
2.3 捕获过滤器的写法
捕获过滤器用的是 BPF(Berkeley Packet Filter) 语法。说白了就是一套精简的表达式。常见写法:
| 目的 | 捕获过滤器表达式 |
|---|---|
| 只抓 HTTP 流量 | tcp port 80 |
| 只抓本机发出去的包 | src host 192.168.1.100 |
| 只抓某个 IP 的流量 | host 10.0.0.1 |
| 排除某个端口 | not tcp port 22 |
| 抓 DNS 查询 | udp port 53 |
注意:捕获过滤器不支持协议名(比如 http、dns),只能用端口号。而且一旦设置,没通过的包就真的丢了,没法恢复。
2.4 显示过滤器的写法
显示过滤器才是你日常的主力。它语法更丰富,支持协议名、字段、比较运算符。而且随时可以改,改完立刻生效。
常用显示过滤器示例:
| 目的 | 显示过滤器表达式 |
|---|---|
| 只看 HTTP 请求 | http.request |
| 只看 HTTP 响应 | http.response |
| 只看 GET 请求 | http.request.method == "GET" |
| 只看状态码 404 | http.response.code == 404 |
| 只看某个 IP 的流量 | ip.addr == 192.168.1.1 |
| 组合条件(且) | http and ip.addr == 10.0.0.1 |
| 组合条件(或) | http or dns |
小技巧:输入过滤器时,Wireshark 会自动补全。如果输入框背景是绿色,说明语法正确;红色说明写错了;黄色表示可能有问题但能执行。
2.5 实战:抓取本机 HTTP 流量
理论说完了,咱们动手。目标是:抓到浏览器访问一个网站时的 HTTP 请求和响应。
- 选择网卡:打开 Wireshark,你会看到一个网卡列表。如果你要抓本机流量(比如浏览器访问百度),选那个有流量的「以太网」或「Wi-Fi」。如果你要抓本机到本机的流量(比如 localhost),需要额外装 Npcap 并勾选「Loopback」支持。
- 设置捕获过滤器(可选):在捕获菜单里选「捕获过滤器」,输入
tcp port 80。这样只抓 HTTP 流量,省得乱七八糟的包干扰你。 - 开始捕获:双击网卡,或者点工具栏上的蓝色鲨鱼鳍图标。你会看到包开始刷刷地出现。
- 触发流量:打开浏览器,访问一个 HTTP 网站(比如
http://example.com)。注意,必须是 HTTP,不是 HTTPS。HTTPS 的流量是加密的,你看到的会是 TLS 握手,而不是明文 HTTP。 - 停止捕获:点红色方块停止。
- 使用显示过滤器:在过滤器栏输入
http,回车。现在列表里只显示 HTTP 协议相关的包。 - 分析请求和响应:找到一条
GET / HTTP/1.1的请求,点开它。在详情面板里,你会看到:- Hypertext Transfer Protocol 这一层。
- 展开后能看到请求行、请求头(Host、User-Agent 等)。
- 对应的响应包会显示
HTTP/1.1 200 OK,下面有响应头和响应体。
避坑指南:我曾经遇到过抓了半天全是 HTTPS 的包,HTTP 一条都没有。后来发现浏览器默认都走 HTTPS 了。解决办法:要么访问一个纯 HTTP 的测试站点,要么在地址栏手动输入 http:// 前缀。
2.6 快速定位:用「Follow TCP Stream」看完整对话
有时候你只想看一次 HTTP 请求-响应的完整内容,不想在几百个包里翻。Wireshark 有个神器:Follow TCP Stream。
操作很简单:在任意一个 HTTP 包上右键 → Follow → TCP Stream。Wireshark 会自动过滤出这个 TCP 连接里的所有包,并把请求和响应的内容拼接在一起显示。你会看到类似这样的东西:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
...
HTTP/1.1 200 OK
Content-Type: text/html
...
<html>
<body>
...(页面内容)
</body>
</html>
这个功能在排错时特别有用。比如你想确认服务器返回的响应体是不是正确的 JSON,或者某个请求头有没有带上,直接 Follow 一下就看清楚了。
2.7 本章小结
这一章我们走通了 Wireshark 的完整工作流:安装 → 选网卡 → 设置过滤器 → 抓包 → 分析。你学会了捕获过滤器和显示过滤器的区别,也亲手抓到了本机的 HTTP 流量。嗯,这些基础打牢了,后面排错才能得心应手。