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 根本看不见。
  • 显示过滤器:在抓包之后设置。它决定「哪些包显示在屏幕上」。所有包其实都在内存里,只是藏起来了。

为什么要分两种?你想想看,如果网络流量很大(比如每秒几万个包),捕获过滤器能帮你节省内存和磁盘。显示过滤器则更灵活,你可以随时改条件,不用重新抓。

我的建议:日常排错,直接用显示过滤器就够了。只有在你明确知道要过滤什么、且流量极大时,才用捕获过滤器。

下面这张图帮你理清两者的关系:

捕获过滤器 vs 显示过滤器 网络流量 捕获过滤器 捕获到的包 显示过滤器 显示结果 隐藏(仍在内存) 未通过捕获过滤器的包已丢弃

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 请求和响应。

  1. 选择网卡:打开 Wireshark,你会看到一个网卡列表。如果你要抓本机流量(比如浏览器访问百度),选那个有流量的「以太网」或「Wi-Fi」。如果你要抓本机到本机的流量(比如 localhost),需要额外装 Npcap 并勾选「Loopback」支持。
  2. 设置捕获过滤器(可选):在捕获菜单里选「捕获过滤器」,输入 tcp port 80。这样只抓 HTTP 流量,省得乱七八糟的包干扰你。
  3. 开始捕获:双击网卡,或者点工具栏上的蓝色鲨鱼鳍图标。你会看到包开始刷刷地出现。
  4. 触发流量:打开浏览器,访问一个 HTTP 网站(比如 http://example.com)。注意,必须是 HTTP,不是 HTTPS。HTTPS 的流量是加密的,你看到的会是 TLS 握手,而不是明文 HTTP。
  5. 停止捕获:点红色方块停止。
  6. 使用显示过滤器:在过滤器栏输入 http,回车。现在列表里只显示 HTTP 协议相关的包。
  7. 分析请求和响应:找到一条 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 流量。嗯,这些基础打牢了,后面排错才能得心应手。