2、Wireshark基础:界面布局、抓包过滤器与显示过滤器的区别

好,咱们正式开始动手了。第一次打开Wireshark,你可能会有点懵——满屏的英文、各种颜色、一堆按钮。别急,我带你捋一遍。

我个人习惯,拿到一个新工具,先看它的布局。就像开车,你得先知道油门刹车在哪,对吧?

2.1 界面布局:四个核心区域

Wireshark的界面,说白了就四个大块。你记住它们,后面操作就顺了。

  • 菜单栏和工具栏:最上面那一排。开始抓包、停止抓包、打开文件,都在这里。嗯,常用的就几个按钮,别被吓到。
  • 抓包列表区:中间最大的那块。所有抓到的报文,一行一条,从上往下按时间排。我刚开始学的时候,盯着这密密麻麻的列表看了半天,心想这谁看得完啊?
  • 报文详情区:列表区下方左边。点一条报文,这里就会展开它的结构——以太网头、IP头、TCP头、应用层数据,一层层剥开给你看。
  • 报文原始数据区:详情区右边。十六进制和ASCII码对照显示。说实话,日常调试很少看这里,除非你在做协议逆向或者校验和计算。
小技巧: 你可以拖动这三个区域之间的分割线,调整大小。我个人习惯把列表区拉大一点,因为看报文列表最频繁。

2.2 抓包过滤器:抓之前就筛掉

抓包过滤器,是在你开始抓包之前就设置好的。它的作用很简单:只抓你关心的流量,其他的直接扔掉。

为什么要用它?你想想看,在一个正常的办公网络里,每秒可能经过几百上千个包。如果你不设过滤,Wireshark会把它们全抓下来。结果就是——内存爆了,电脑卡了,你想要的包反而找不到了。

我在项目中遇到过这种情况:有次排查一个DNS解析慢的问题,忘了设过滤,抓了5分钟,文件直接2个G。打开的时候Wireshark卡了半分钟,最后还得重新抓。从那以后,我每次抓包前都会先想清楚:我到底要看什么流量?

抓包过滤器的语法,用的是BPF(Berkeley Packet Filter)。别被这个名字吓到,常用的就几个:

# 只抓某个IP的流量
host 192.168.1.100

# 只抓某个端口的流量
port 80

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

# 组合条件:抓某个IP的HTTP流量
host 192.168.1.100 and port 80

# 只抓TCP流量
tcp
注意: 抓包过滤器不支持协议名称(比如http、dns),只能用端口号。如果你想抓HTTP,就写 port 80。为什么?因为BPF工作在底层,它只看IP和端口,不看上层协议。

2.3 显示过滤器:抓完再慢慢筛

显示过滤器,是抓包完成之后用的。它不会删除任何报文,只是把你不关心的暂时藏起来。

这个就灵活多了。你可以随时改条件,随时看结果。而且它支持协议名称,写起来更直观。

举个例子:

# 只看HTTP请求
http.request

# 只看某个IP的流量
ip.addr == 192.168.1.100

# 只看TCP端口80
tcp.port == 80

# 组合条件:某个IP的HTTP GET请求
ip.addr == 192.168.1.100 and http.request.method == "GET"

# 只看DNS查询
dns.flags.response == 0

显示过滤器还有一个好处:它支持自动补全。你输入 http. 的时候,Wireshark会弹出所有可选的字段。我刚开始记不住字段名,全靠这个功能。

核心区别一句话总结:
抓包过滤器是「抓之前筛掉」,省资源;
显示过滤器是「抓之后隐藏」,不丢包。

2.4 实战对比:一个例子说清楚

假设你要排查一个网页打不开的问题。你怀疑是DNS解析失败,也可能是TCP连接被阻断。

方案一:只用显示过滤器

你不设抓包过滤器,直接抓。抓了30秒,文件200MB。然后你输入 dns or tcp.port == 80 来过滤。结果呢?Wireshark虽然只显示了相关报文,但后台还是加载了200MB的数据,操作起来很卡。

方案二:先用抓包过滤器

你设好 port 53 or port 80,只抓DNS和HTTP流量。抓了30秒,文件只有5MB。然后你再慢慢用显示过滤器分析。流畅多了。

我曾经犯过一个错:在服务器上抓包,没设抓包过滤器,结果把SSH管理流量也抓进去了。文件传到本地分析时,发现里面全是自己的键盘输入……嗯,从那以后我学乖了。

2.5 避坑指南

  • 抓包过滤器写错了,不会报错。Wireshark只是默默不抓任何包。你等半天发现一条报文都没有,才意识到写错了。所以每次抓包前,先看一眼左下角的状态栏,有没有显示「Capturing」。
  • 显示过滤器写错了,会变红。输入框背景变成红色,说明语法不对。这时候别慌,看看是不是少了个引号,或者字段名拼错了。
  • 两个过滤器可以一起用。先用抓包过滤器缩小范围,再用显示过滤器精确定位。这是最推荐的用法。
我的习惯: 每次开始新项目,我都会先建一个抓包模板。里面预设好常用的抓包过滤器,比如 port 80 or port 443host 10.0.0.1。这样下次直接加载,不用重新写。

好了,这一节就到这里。界面布局你记住了四个区域,抓包过滤器和显示过滤器的区别你也清楚了。下一节,我们聊聊怎么用Wireshark抓一个实际的HTTP请求,看看浏览器和服务器到底在聊什么。