认识 Wireshark——Wireshark 新手使用教程(1)
开始之前,需要对一些专有名词进行说明。本系列教程会涉及到数据包/分组/帧、会话/流的概念,这些概念确实有一些差异,但是这些差异不影响软件的使用,所以这里并不对这些名词进行详细的区分。要理解各个名词的具体定义,可以参考网络上的各种教程。
本系列文章主要针对新手编写,学习 Wireshark 的目的侧重于协议逆向而非网络故障分析。
接下来是正文。
1. Wireshark 的诞生历史
Wireshark 是一款免费开源的数据包嗅探器/分析器,可用于捕获网络上的数据包。Wireshark 最初的版本叫做 Ethereal,由 Gerald Combs 于1998年发布,Wireshark 软件和官网上都可以看到他的名字排在首位:


Wireshark 作者列表
2006年5月,Gerald Combs前往CACE Technologies工作,但是他没能拿到 Ethereal 的商标权。为了保证项目成功运行下去,Combs 和他的开发团队在 2006 年年中将这个项目重新命名为 Wireshark。
随着 Combs 和其他贡献者在接下来十几年内持续维护 Wireshark 的代码并发布新版本,Wireshark 已经成为世界上最流行的数据包分析/嗅探软件之一。

上述的 Wireshark 历史在网络上很容易查到,但是这些资料并未提及 Combs 为何要将该软件取名为 Wireshark。
官网上有这样一个问题可以参考:

photoshopia含义未知
这个回答中的 carcharodon 无疑让人想起了最有名的鲨鱼——大白鲨 (Carcharodon carcharias)。
wire意为线缆,故用wireshark(网线鲨鱼)来命名数据包嗅探器真是再合适不过了。

2. Wireshark 能做什么/不能做什么
支持实时捕获数据并保存为pcap文件
支持从已经捕获的数据包中读取数据;
支持超过1000种标准/专用协议解析
支持创建插件解析私有协议;
支持使用捕获和显示过滤器细化数据;
支持TLS协议解密(设置比较复杂,不如使用charles/burp/fidder方便)

不支持编辑修改数据包(需要编辑数据包建议使用 WireEdit)
不支持入侵/检测异常流量
3. 下载 Wireshark
可以到 Wireshark 官网上下载安装包,建议下载最新版本,老版本的某些功能可能会出问题。

下载完成后,双击安装包安装。记得选中 Npcap,其他选项默认即可。
4. 认识 Wireshark 主界面
4.1 开始捕获前的界面
打开 Wireshark ,初始界面从上到下是主工具栏、显示和捕获过滤器以及状态工具栏。

主工具栏包含了开始捕获、停止捕获、显示最新分组等操作的按键;
显示过滤器可输入过滤规则,使分组列表窗口仅显示符合规则的数据包;
捕获过滤器可输入规则,在抓包的时候捕获符合规则的数据包;
状态工具栏则显示软件当前状态与已捕获&显示的分组数量。
4.2 捕获时的界面
开始捕获后,Wireshark 会将捕获到的报文显示在界面上。

分组列表显示所有捕获到的报文,顶部为报文序号等各种关键字段;
分组详情显示选中报文的分层情况;
分组字节流显示选中报文的16进制与ASCII码编码的字节流。
分组列表
分组列表显示每个数据包的各种字段,并默认按照序号/捕获时间升序排列分组。

若想要以某个字段降序排列,点击该字段即可。
为了方便我们查看报文中的关键字段,可以右键字段栏,点击 Column Preferences,添加字段。这里我添加了 HTTP 协议的 host 字段和 TLS 协议的 servername 字段。

在这些列中,最左侧的No.列需要额外说明一下。
选中某个数据包时,Wireshark分组列表的No.列会显示一些符号,这些符号标识的是数据包与数据包之间的关系,这里罗列一下 Wireshark 官网的解释:

分组详情
分组详情窗口是TCP/IP五层模型最好的结构化展示,从上到下分别是:

展开各层,能看到 Wireshark 对各个字段的解析和注释。

标准协议的 RFC 文档阅读起来比较费劲,对照 Wireshark 的解析,能更好地理解标准协议的字段格式。

部分分组的分组详情窗口内包含 URI 超链接,或者与其有关系的另一个分组的超链接,双击即可跳转。

分组字节流
分组字节流窗口中显示的是十六进制与ASCII字符对照形式的分组字节内容(从以太层开始的字节)。
分组字节流窗口中的字节和分组详情中的字段是一一对应的:
· 点击字段会选中字节内容;
· 点击某字节的16进制值会选中对应的字段。
分组字节流窗口中的十六进制与ASCII字符也是一一对应的,可以使用这个窗口来观察一些私有协议的字段格式:

从分组列表到分组详情,再到分组字节流,我们看到了 Wireshark 是如何从大到小为我们显示多个分组——单个分组的多层结构——未解析时的原始字节流。从下而上逆推,我们可以体会到网卡和协议栈是如何实现数据包解析的:

主工具栏中常用的按键
实践中有4个按键比较常用:开始捕获、停止捕获、重新开始捕获和显示最新的分组。

捕获的三个按键比较好理解,不做解释。选中显示最新的分组后,分组列表会一直滚动显示最新捕获的分组。如果要查看某个报文,可以滚动鼠标滑轮,此时分组详情会停止滚动。

5. 总结及参考文献
作为教程的第一篇,本文简要回顾了 Wireshark 的历史,并详细描述了 Wireshark 主界面的各个区域的作用与一些操作上的细节。下一篇将开始介绍如何捕获数据包。
Wireshark 的使用教程网上已经十分泛滥,但是大部分都比较零散,我这边的教程争取写得细致一些,把图片做得清晰易懂一点,力求读者在几天之内就能入门 Wireshark。
某些部分要详细说的话可以说很多,比如 Wireshark 的作者为什么要在那个年代创造这样一款开源的软件,比如 Wireshark 如何调整着色规则、字体大小、时间显示格式等等,但是这样一来文章就会比较长,既然是要写给新手看就不要那么冗长,否则就很容易变成只是把知识点单纯罗列下来的无聊文章。我在本文以及接下来几篇文章中列举的操作,都是在刚开始使用 Wireshark 的时候有过疑惑,或者是在工作中经常使用的细节,这也是希望这个教程尽可能避免 “知识的诅咒” 吧 。
参考资料
[1] Chris Sanders,诸葛建伟译,2018.Wireshark 数据包分析实战(第 3 版).人民邮电出版社
[2] https://en.wikipedia.org/wiki/Wireshark
[3] https://www.wireshark.org/faq.html
[4] https://www.rfc-editor.org/rfc/rfc791.html