第二章 抓包工具入门:Wireshark安装与界面介绍、基本抓包操作、过滤规则快速上手

2.1 为什么是Wireshark?

市面上抓包工具不少,tcpdump、tshark、Fiddler、Charles……但Wireshark依然是协议分析领域的“瑞士军刀”。

我个人选择它的理由很简单:图形化界面直观、协议解析支持超过3000种、社区活跃、跨平台。

你想想看,一个工具能让你同时看到原始字节流、解析后的协议字段、甚至还能跟着tcp流重组的应用层数据——这还不够香吗?

2.2 安装:别让这第一步卡住你

安装本身没什么技术含量,但有三个坑我得先说清楚,免得你像我当年那样来回折腾。

避坑提醒:安装过程中务必勾选“Install Npcap”(Windows)或“Install ChmodBPF”(macOS),否则抓不到任何包。

Windows 安装要点

  • 从官方下载.exe,右键以管理员身份运行
  • Npcap勾选“Support raw 802.11 traffic”(如果你要抓Wi-Fi监控模式)
  • 安装完成后重启一次,否则网卡驱动可能没加载好

macOS 安装要点

  • 推荐Homebrew:brew install --cask wireshark
  • 安装后会在/Library/Application Support/Wireshark/下生成ChmodBPF启动项
  • 如果发现没有抓包权限,手动运行:sudo chmod 644 /dev/bpf*

Linux 安装要点

  • apt(Debian/Ubuntu):sudo apt install wireshark
  • 安装过程中会问“是否允许非root用户抓包”,选Yes
  • 如果选了No,加用户组:sudo usermod -a -G wireshark $USER,再重新登录

嗯,这里要注意:曾经有个同事在Ubuntu上搞了半小时都抓不到包,最后发现是忘了重新登录——加组后必须logout再login。

2.3 界面介绍:别被那么多面板吓到

第一次打开Wireshark,满屏的数据,普通人可能直接懵了。别急,核心就四个区域。

区域名称位置作用快捷键
过滤器工具栏最上方输入显示过滤表达式,实时筛选包Ctrl+↑/↓
包列表窗格中间上部罗列每个抓到的包,显示序号、时间、源/目的地址、协议、长度、信息Tab切换焦点
包详情窗格中间下部展示选中包的协议树,可展开/折叠右键→“Follow Stream”
包字节窗格最下方原始16进制+ASCII对照,方便逐字节分析Ctrl+Shift+B

我个人的习惯:刚打开Wireshark时,先把包列表的“Time”列改为“Seconds since previous captured packet”,这样看延迟更直观。

2.4 基本抓包操作:三分钟上手

操作真的是傻瓜式,但有几个细节值得记一下。

  1. 选择抓包接口:主界面点击“捕获”→“选项”,勾选你要监听的网卡(Wi-Fi、以太网、Loopback等)。
  2. 开始抓包:点击蓝色鲨鱼鳍图标,或者按Ctrl+E。
  3. 停止抓包:红色方块图标,或者再次按Ctrl+E。
  4. 保存文件:Ctrl+S,格式默认.pcapng,也可选.pcap(兼容旧版)。
  5. 重新打开:Ctrl+O,支持.pcapng/.pcap/.cap等。
一个小技巧:如果只想抓少量特定包,可以先在捕获过滤器里预过滤,避免内存爆炸。我曾在现场调bug时抓了5分钟全流量,结果文件8GB,本机卡死。后来学乖了,先设个host 192.168.1.100再开抓。

2.5 过滤规则快速上手:不学会这个你什么都干不了

抓包只是第一步,从几万甚至几十万个包里找到你想要的那一条——这才是核心能力。Wireshark有两种过滤:捕获过滤(抓之前)和显示过滤(抓之后)。

2.5.1 捕获过滤(Capture Filter)

在捕获选项窗口里设置,使用BPF(Berkeley Packet Filter)语法,语法比显示过滤更严格,但效率更高。

举个例子:

host 10.0.0.1 and tcp port 80

这句的意思是:只抓源或目的IP为10.0.0.1且TCP端口为80的数据包。BPF不支持协议层过滤(比如http),只能基于链路层/网络层/传输层字段。

常用的捕获过滤表达式我列个表:

需求BPF表达式
只抓某个IPhost 192.168.1.1
抓某个网段net 192.168.0.0/16
只抓UDPudp
抓特定TCP端口tcp port 443
排除某个MACnot ether host 00:11:22:33:44:55
只抓非本机环回流量not broadcast and not multicast

2.5.2 显示过滤(Display Filter)

这才是Wireshark的杀手锏。抓包完成后,在过滤器工具栏输入表达式,按Enter立刻生效。语法比BPF丰富得多,能直接过滤应用层字段。

基础格式:协议.字段 操作符 值

http.request.method == "GET"
tcp.port == 443
ip.src == 10.0.0.1
dns.qry.name contains "baidu"

常用显示过滤速查:

需求显示过滤表达式
只看HTTP GET请求http.request.method == "GET"
只看TCP三次握手tcp.flags.syn == 1
只看重传包tcp.analysis.retransmission
只看从某个IP发出的DNS查询dns.qry.name && ip.src == 10.0.0.1
只看特定TLS版本tls.handshake.version == 0x0304
过滤包含特定字符串的包(不区分协议)frame contains "password"
使用逻辑或http or tls
排除某些端口!tcp.port == 22

我记得有一次调试一个WebSocket连接异常,Wireshark里几万个包根本看不完。后来我只用了websocket加ip.addr == 192.168.1.50,几秒钟就锁定了问题:一个FIN包被中间防火墙拦截了。

核心原则:显示过滤不丢包,只是隐藏不符合条件的包;捕获过滤则会真正丢弃未匹配的包。调试阶段建议先用显示过滤,性能不够时再改成捕获过滤。

2.6 本章知识体系总览

下面的流程图帮你把脑子里刚装进去的知识串起来:

Wireshark入门知识体系 ① 安装与配置 ② 选择接口 ③ 开始/停止抓包 ④ 界面四大面板认知 过滤器工具栏 包列表窗格 包详情窗格 包字节窗格 ⑤ 捕获过滤 (BPF语法) 抓包前筛选,节省性能 ⑥ 显示过滤 抓包后筛选,支持应用层字段 ⑦ 保存为pcapng / 导出特定包

说白了,拿到Wireshark干三件事:安装好(别忘装底层驱动)→ 选对网卡开抓 → 用过滤器快速定位到目标包。后面所有协议分析都建立在这三步之上。

2.7 本章避坑清单

  • Windows上抓不到Wi-Fi包?八成是没开混杂模式或者Npcap版本不对。
  • macOS上显示“You don’t have permission”?运行一下sudo /Library/Application\ Support/Wireshark/ChmodBPF/ChmodBPF。
  • 捕获过滤写port 80发现抓到的不全是HTTP?因为端口80也可能是别的协议,需要配合tcp port 80缩小范围。
  • 显示过滤大小写敏感吗?字段名和比较值都是大小写敏感的,比如http.request.method == "GET"不能写成get。