3. Wireshark 安装与配置:Windows / Mac / Linux 安装、抓包网卡选择、抓包过滤器设置

说实话,很多新手学抓包,第一步就卡在安装和选网卡上。我见过不少同事,Wireshark 装好了,但一开抓包全是乱七八糟的包,或者干脆抓不到任何数据。嗯,这其实不是工具的问题,是配置没到位。

这一章,我就带你走一遍完整的安装和配置流程。Windows、Mac、Linux 我都会讲到,但重点放在「网卡怎么选」和「过滤器怎么写」这两个核心问题上。毕竟,工具装好了只是开始,能精准抓到你要的包,才是真本事。

3.1 各平台安装要点

Wireshark 的安装其实不复杂,但有几个坑你得避开。我按平台分开说。

3.1.1 Windows 安装

Windows 用户最省心。去官网下载安装包,一路 Next 就行。但注意这一步——

安装过程中会提示安装 Npcap(或 WinPcap)。 务必选择「Install Npcap in WinPcap API‑compatible Mode」。我遇到过有人跳过这一步,结果抓包时网卡列表是空的,折腾了半天才发现是底层驱动没装。

安装完成后,建议重启一次系统。Npcap 驱动需要加载,不重启的话某些网卡可能识别不到。

3.1.2 macOS 安装

Mac 用户有两种方式:

  • 官方 dmg 包:直接下载安装,简单粗暴。
  • Homebrew:终端执行 brew install --cask wireshark。我个人习惯用 brew,因为后续更新方便。

但 Mac 上有个常见问题——权限不足。Wireshark 需要访问网络接口,而 macOS 默认限制非 root 用户。安装完成后,系统会提示你安装「ChmodBPF」启动项。一定要点「安装」,否则你打开 Wireshark 后会发现网卡列表是空的。

小技巧: 如果安装后还是抓不到包,打开终端执行 sudo wireshark 试试。能抓到的话,说明是权限问题,重新安装 ChmodBPF 即可。

3.1.3 Linux 安装

Linux 下最直接:

# Debian/Ubuntu
sudo apt update && sudo apt install wireshark

# CentOS/RHEL
sudo yum install wireshark

# Fedora
sudo dnf install wireshark

安装过程中会问你是否允许非 root 用户抓包。我建议选「Yes」,否则每次都要 sudo,很麻烦。如果安装时选错了,事后可以执行:

sudo dpkg-reconfigure wireshark-common
sudo usermod -a -G wireshark $USER
# 然后注销重新登录

嗯,这里要注意:Linux 下抓包需要 libpcap 库,一般会作为依赖自动安装。但如果你的系统是精简版,可能需要手动装一下 libpcap-dev。

3.2 抓包网卡选择——别选错了

装好 Wireshark 后,打开软件,你会看到一个网卡列表。很多人直接选第一个就开抓,结果抓到的全是广播包,或者根本抓不到目标流量。为什么会这样?

说白了,你选错了网卡。

我画了一张图,帮你理清思路:

抓包网卡选择决策流程 抓包网卡选择决策流程 打开 Wireshark 网卡列表 目标流量经过本机哪块网卡? 有线网卡(Ethernet) 无线网卡(Wi‑Fi) 选名称含 eth/enp/eno 的 选名称含 wlan/wlp/wi‑fi 的 双击开始抓包 双击开始抓包 注意:不要选「Adapter for loopback traffic capture」除非你抓本机回环流量

选网卡的核心原则就一条:目标流量从哪块网卡进出,就选哪块。你想想看,如果你用 Wi‑Fi 上网,却选了有线网卡,那肯定抓不到数据。

我分享一个快速识别方法:

  • Windows:网卡名称通常包含「Ethernet」或「Wi‑Fi」。IP 地址列会显示当前网卡的 IP,对照一下就知道是哪块了。
  • macOS:名称类似「en0」「en1」。可以在终端用 ifconfig 查看,en0 通常是有线,en1 是无线。
  • Linux:名称如「eth0」「wlan0」。用 ip addr 确认 IP 对应的接口。
避坑指南: 我曾经在排查一个 HTTP 超时问题时,抓了半天没抓到请求包。后来才发现,我选的是「Loopback」网卡,而目标服务器在公网。嗯,从那以后我每次抓包前都会先看一眼网卡的 IP 地址对不对。

3.3 抓包过滤器设置——精准捕获

选对网卡只是第一步。如果不设过滤器,Wireshark 会把网卡上所有流量都抓下来。你想想看,一个正常工作的服务器,每秒可能有几千个包。在这么多数据里找你要的那个,无异于大海捞针。

Wireshark 提供了两种过滤器,很多人容易搞混:

过滤器类型 作用时机 语法 典型用途
抓包过滤器 (Capture Filter) 抓包开始前设置,只抓符合条件的包 BPF (Berkeley Packet Filter) 语法 只抓某 IP、某端口,减少抓包文件大小
显示过滤器 (Display Filter) 抓包完成后设置,隐藏不符合条件的包 Wireshark 专有语法 在已抓到的数据中快速定位特定协议或字段

这一节我们重点讲抓包过滤器。显示过滤器后面章节会详细展开。

3.3.1 抓包过滤器语法速成

抓包过滤器用的是 BPF 语法,说白了就是「协议 + 方向 + 主机 + 端口」的组合。我列几个最常用的:

# 只抓某个主机的流量(双向)
host 192.168.1.100

# 只抓某个端口的流量(TCP 或 UDP)
port 80

# 只抓某个网段的流量
net 192.168.1.0/24

# 组合条件:抓特定主机且特定端口
host 192.168.1.100 and port 443

# 只抓 TCP 协议
tcp

# 排除某个主机
not host 10.0.0.1

你可能会问:这些条件能组合吗?当然可以。用 and、or、not 连接就行。我常用的一个组合:

tcp and host 192.168.1.100 and port 80 or port 443

这个过滤器只抓 TCP 协议、目标或源是 192.168.1.100、且端口是 80 或 443 的包。干净利落。

3.3.2 在 Wireshark 中设置抓包过滤器

设置位置在 Wireshark 主界面的网卡列表上方,有一个输入框,写着「Capture filter」。点击旁边的「Bookmark」按钮可以保存常用过滤器,下次直接选。

具体步骤:

  1. 打开 Wireshark,看到网卡列表。
  2. 在「Capture filter」输入框里输入你的 BPF 表达式。
  3. 点击「Apply」或直接按回车。
  4. 双击目标网卡开始抓包。
我的习惯: 我会把常用的过滤器保存为书签。比如「HTTP 抓包」对应 tcp port 80,「DNS 抓包」对应 udp port 53。这样下次直接点一下就能用,不用重新敲。

3.3.3 实战案例:抓一个连接超时的包

假设你要排查客户端 192.168.1.10 访问服务器 10.0.0.5 的 8080 端口时出现连接超时。你会怎么设过滤器?

我的做法是:

host 192.168.1.10 and host 10.0.0.5 and port 8080

或者更简洁:

host 192.168.1.10 and port 8080

因为服务器 IP 是固定的,只要抓到客户端发往 8080 端口的包,就能看到完整的 TCP 三次握手过程。如果连 SYN 包都没发出去,那就是客户端的问题;如果发了 SYN 但没收到 SYN‑ACK,那就是网络中间丢了包或者服务器没响应。

注意: 抓包过滤器是在驱动层面过滤的,一旦设置,不符合条件的包根本不会被捕获。所以如果你设错了过滤器,可能什么都抓不到。我曾经有一次把 host 拼成了 hosts,结果抓了半小时一个包都没有。嗯,检查语法很重要。

3.4 快速验证:抓包环境是否正常

装好 Wireshark、选对网卡、设好过滤器后,怎么确认一切正常?我一般做两步验证:

  1. 抓一个本机回环包:选 Loopback 网卡,过滤器设 tcp port 80,然后在浏览器访问 http://127.0.0.1(如果本机有 Web 服务)。能看到包就说明 Wireshark 工作正常。
  2. 抓一个外网包:选你的上网网卡,过滤器设 host 8.8.8.8,然后在终端 ping 8.8.8.8。能看到 ICMP 包就说明网卡选对了。

这两步走完,你的抓包环境就准备好了。后面章节我们会基于这个环境,一步步分析连接超时的根因。