Wireshark 分析操作介绍——Wireshark 新手教程(4)
1. Wireshark 分析操作
Wireshark 的强大之处在于它不仅能捕获数据包,还能对捕获的数据进行进一步的分析。具体来说,对pcap包的分析可以分为:
过滤功能——输入过滤规则,并显示符合规则的分组
统计功能——对所有/部分数据包的情况进行总览
分析功能——将某些字段作为过滤器应用&启用/停用某些协议
查找功能——在所有/部分数据包中查找特定值
查看功能——查看字段/分组/会话的字节流
1.1 过滤功能
显示过滤器
显示过滤器是 Wirshark 最强大的分析工具之一,可以输入规则过滤出符合规则的分组,并显示在分组列表中。配合其他功能可以达成 1+1>2 的效果。
Wireshark 的显示过滤规则由三要素组成:
字段名称 - 关系 - 值
其中字段名是必须项。
字段可以指定偏移范围。打开显示过滤器表达式窗口,可以看到 Wireshark 支持的各种字段和逻辑关系:

上图中,显示过滤器支持的逻辑关系符号含义总结如下:

每次打开表达式窗口选择字段过于麻烦,更好的方法是直接在显示过滤器栏中输入:

显示过滤器栏的颜色提示规则语法的正确程度:
绿色表示语法正确,可以应用;
黄色表示语法有歧义,但可以应用;
红色表示语法有问题,且无法应用。可查看左下角的错误原因:

点击显示的字段,状态栏会显示这个字段的名称。
如果懒得输入字段名,可以直接在分组详情中右键字段 - 作为过滤器应用 - 选中:

若选中栏为灰色不可选状态,点击其他区域后再次选中就行。
这里列出了一些常用的显示过滤规则作为参考:


常用的规则,可以直接添加到显示过滤器书签中。之后就无须输入,直接选择即可。

1.2 统计
会话/对话统计
拿到一个pcap包,不管对其中的数据是陌生还是熟悉,推荐的第一步操作是打开统计功能,查看数据包整体的会话情况。点击统计 - 会话打开会话统计窗口:

会话统计窗口的顶部显示不同层级和协议的会话数量,在这个数据包中可以看到 TCP 流有16条而 UDP 流有14条。对比会话数量可以得到数据包的 IPv4/IPv6 占比和 TCP/UDP 协议占比情况。
点击TCP可以查看所有TCP流的各种字段,如源IP、源端口、目的IP、目的端口、分组数量、会话流量、单向的分组数量和流量、会话开始时间、会话持续时间等等。
会话默认按照 Address A 字段升序排列,Port A 默认大于 Port B。如果要按照某个字段大小升序或降序排列,点击该字段即可。

考虑到抓包时手机操作系统、推送、输入法等服务会产生大量杂质流量,可以在显示过滤器栏里输入规则,点击回车后分组列表里会只显示符合规则的分组。
上述会话统计窗口内可以看到4480端口的流量比较大,我们可以只过滤端口为4480的两条流。右键第一条流 - 作为过滤器应用 - 选中 - A↔B,可以看到显示过滤器栏中生成的规则。

显示过滤规则生效以后,在会话统计窗口内选中【显示过滤器的限制】,此时只会统计显示的分组的会话信息:

IO 图表
IO图表可显示数据的的bps (每秒比特数) 和pps (每秒数据包数),可用来观察pcap包的所有分组或某些特定分组的流量变化。
点击统计-IO图表,调出IO图表,可以观察每秒分组数量的图形化展示界面。双击Y Axis选项,可以调整Y轴的单位为packets、Bytes或Bits。

流媒体的会话一般呈现开始时pps较高,中间和末尾pps稳定的特点。
1.3 分析
专家信息
与会话功能类似,专家信息同样可以总览整个pcap包。选择分析 - 专家信息,可调出专家信息窗口:

类型字段有错误、警告、注意、对话四类,标识问题的严重程度:
1) 错误:标识数据包的错误,或者解析器解析错误。
2) 警告:非正常通信的异常数据包。
3) 注意:正常通信过程中的异常数据包。
4) 对话:关于正常通信的基本信息。
概述字段可反映问题的具体内容,比如重传、中断、丢失、乱序等问题。
分组字段有Malformed、Security、Protocol、Sequence等,标识问题的具体类型。
一般来说,错误和警告可反映故障的原因,注意和对话可以辅助分析。
启用的协议
Wireshark 支持上千种协议,有些冷门的协议并非我们所需要的。同时 Wireshark 并非万能,有时可以确定是某种协议,Wireshark 却没解析出来。这时候可以查看一下协议是否被启用。
选择分析 - 启用的协议,可打开启用协议窗口,并启用/停用特定的协议:

重新载入 Lua 插件等功能,由于并非是本教程所涉及到的操作,所以暂且略过。之后有机会再讲讲如何写 Lua 脚本。
1.4 查找功能
查找
快捷键 Ctrl+F 可调出查找栏,可高效率地分组列表中显示的所有分组内是否有特定值。

要在分组字节流中查找字符串或者16进制值,需要先选择字符串选项,此时搜索区域选项从不可选变为可选,然后选择分组字节流选项。

直接在搜索框输入值,点击查找即可。再次点击会跳转至下一个含有搜索值的分组。

若数据包中不包含该字符串,底部的状态工具栏会显示黄色闪烁:

1.5 查看功能
追踪流
选中某一帧,右键 - 追踪流 - TCP流,可以调出追踪TCP流窗口,显示这条流的所有报文的字节流。

上行流为红色,下行流为蓝色。可以在下拉菜单中选择同时显示上下行,或只选择单向流。
支持以ASCII码、原始16进制、Hex转储等编码方式显示数据。
可以使用查找栏查找关键的值,选择显示原始数据时可查找16进制值,显示ASCII码时可查找字符串类型值。

显示分组字节
右键特定字段,选择导出分组字节,可调出分组字节窗口。
“显示为” 选项可选择编码方式,可以根据需求选择,然后导出该字段的所有字节。明文数据可以导出ASCII码。部分压缩文件可导出原始数据。

2. 总结
本篇较详细地介绍了 Wireshark 各种常见的分析操作。下一篇将对数据包进行实战分析,看看市面上常见的APP和 BiliBili 在传输些什么数据内容,我们又能解析出什么有价值的信息。这些价值信息包括了通讯录、账号密码、设备经纬度、手机号,甚至是聊天记录,但不一定是明文。Wireshark不适合用来解密,所以在下一篇,我们就能体会到这款软件的能力边界在哪里。