1997年,Gerald Combs开发了Ethereal(Wireshark项目以前的名称),用于进行网络问题的跟踪调试,并进一步学习网络知识。经过数次开发、迭代和完善,1998年Ethereal 0.2.0诞生。此后不久,Gilbert Ramirez发现了它的潜力,并为其提供了底层分析能力。1998年10月,Guy Harris开始对Ethereal进行改进,使其能够提供分析能力;之后,正在进行TCP/IP教学的Richard Sharpe注意到Ethereal在课程教学中的作用,开始对Ethereal进行分析和改进。
从那以后,参与Ethereal开发和改进的人越来越多,他们为Ethereal增加了更多尚不被支持的协议,并为团队提供了改进和反馈。2006年,Ethereal被重新命名为Wireshark。目前,Wireshark开发小组负责对它进行进一步开发和维护,通过查看Wireshark帮助菜单下的About选项,可以找到为Wireshark提供代码的人员名单。
Wireshark是目前应用最广泛的网络协议分析工具,无论是初学者还是数据包分析专家,都能应用它提供的丰富功能来满足自己的需要。网络管理员可以使用它来检测网络问题,网络安全工程师可以使用它来检查信息安全相关问题,开发者可以使用它来为新的通信协议排错,普通用户可以使用它来学习网络协议的相关知识。
Wireshark在以下方面具有突出的优势:
1)用户友好度:Wireshark拥有图形用户界面(Graphic User Interface,GUI),界面设计简洁,使用方法简单,对于初级和中级网络学习者来说易于掌握。该软件内置很多小工具、小功能,如过滤器、表达式、数据包彩色高亮等,可以方便初学者更快、更好地了解网络。
2)对协议的支持:Wireshark支持的协议种类非常广泛,目前已超过上千种。这些协议不仅包括基础的IP、TCP,还包括高级的专用协议,如AppleTalk和BitTorrent。Wireshark是在开源模式下开发的,全体使用者都是开发人员。随着软件系统不断地更新、升级,它支持的协议不断增多。假如在某些情况下,Wireshark不支持用户需要的协议,用户可以自行编写协议代码,并提交给Wireshark开发者。如果代码被采纳,Wireshark就会在新的版本中增加对用户所需要的协议的支持。
3)对操作系统的支持:Wireshark支持多操作系统,在主流操作系统平台上(包括Windows、Linux、Mac OS等)均可安装并运行,用户可以在Wireshark官网上查看它支持的操作系统列表。
4)对捕获功能的支持:Wireshark可以捕获多种网络接口类型的包,包括无线局域网接口类型的包;可以支持多种其他程序捕获的文件,打开多种网络分析软件捕获的包;可以支持多格式输出,将捕获的文件输出为其他捕获软件支持的格式。
5)软件支持:Wireshark是一款自由分发软件,官方很少提供帮助文档的支持,相关支持主要依赖于开源社区的用户群提供。目前,Wireshark社区是最活跃的开源项目社区之一。Wireshark网站上给出了许多软件帮助文档的相关链接,包括在线文档、支持与开发wiki、FAQ、订阅与Wireshark使用、开发相关的邮件列表等。
6)开源:Wireshark是一个开源软件项目,发布遵循GPL(GNU General Public License)协议,所有人都可以免费在任意数量的机器上使用它,不用担心授权和付费问题。所有的源代码在GPL框架下都可以免费使用。基于以上原因,用户可以很容易地在Wireshark上添加新的协议,或者将其作为插件整合到自己的程序里。
1.安装Wireshark
Wireshark支持Windows、Linux、UNIX和Mac OS操作系统,其安装文件可以从官网https://www.wireshark.org/#download下载,官网提供了针对不同操作系统的多个安装包和源文件,用户可以根据需要选择适合的版本下载、安装或编译。选择Wireshark的安装版本的界面如图1-1所示。
图1-1 选择Wireshark的安装版本
下面以Wireshark 3.4.7 64-bit为例介绍安装过程。Wireshark的初始安装界面如图1-2所示。
图1-2 Wireshark的初始安装界面
单击“Next>”按钮,进入授权许可页面,如图1-3所示。
图1-3 Wireshark的授权许可页面
单击“Noted”按钮,选择待安装的组件,如图1-4所示。
图1-4 选择Wireshark的待安装组件
单击“Next>”按钮,对软件快捷启动和文件关联进行设置,如图1-5所示。
图1-5 设置Wireshark的快捷启动和文件关联
单击“Next>”按钮,设置Wireshark的安装目录,如图1-6所示。
图1-6 设置Wireshark的安装目录
单击“Next>”按钮,需要注意的是,如果当前机器上没有安装Npcap,此时会提示进行Npcap安装。Npcap是基于WinPcap 4.1.3开发的,WinPcap是一个在Windows平台下访问网络中数据链路层的开源库,能够用于网络数据包的构造、捕获和分析。Wireshark的早期版本在Windows系统上默认使用WinPcap来抓包,但在目前的新版本中已经用Npcap取代了WinPcap。Npcap的API与WinPcap兼容,能够支持Windows平台下回环(Loopback)数据包的采集与发送。要安装Npcap,需勾选“Install Npcap 1.31”,如图1-7所示。
图1-7 安装Npcap
单击“Next>”按钮,出现USBPcap的安装提示。USBPcap是支持Windows平台的开源USB嗅探器,如果需要使用Wireshark抓取USB数据,就必须安装USBPcap。此处建议安装,勾选“Install USBPcap 1.5.4.0”,如图1-8所示。
图1-8 安装USBPcap
单击“Install”按钮,等待Wireshark安装完成,如图1-9所示。
图1-9 执行Wireshark安装
在此过程中,如果当前机器上没有安装Npcap,会提示进行Npcap安装,如图1-10所示。
图1-10 Npcap安装授权许可页面
单击“I Agree”按钮,进行Npcap安装选项设置,一般不建议勾选“Restrict Npcap driver’s access to Administrators only”,这有可能导致权限问题,进而影响Wireshark运行。这里选择默认设置即可,如需特殊功能,可单独勾选相关选项,如图1-11所示。
图1-11 设置Npcap安装选项
单击“Install”按钮,开始安装Npcap,如图1-12所示。
图1-12 执行Npcap安装
单击“Next>”按钮,Npcap安装完成,如图1-13所示。
图1-13 Npcap安装完成
单击“Finish”按钮,关闭Npcap的安装。之后,进入USBPcap安装提示页面,如图1-14所示。
勾选“I accept the terms of the License Agreement”,单击“Next>”按钮,进入如图1-15所示页面。
图1-14 USBPcap Driver安装授权许可页面
图1-15 USBPcapCMD安装授权许可页面
勾选“I accept the terms of the License Agreement”,单击“Next>”按钮,进行安装选项设置,选择默认设置即可,进入如图1-16所示页面。
单击“Next>”按钮,选择USBPcap的安装目录,如图1-17所示。
图1-16 设置USBPcap安装选项
图1-17 选择USBPcap的安装目录
单击“Install”按钮,开始安装USBPcap,如图1-18所示。
图1-18 执行USBPcap安装
单击“Close”按钮,USBPcap安装完成,继续进行Wireshark安装,如图1-19所示。
图1-19 继续执行Wireshark的安装
单击“Next>”按钮,Wireshark安装完成,如图1-20所示。
图1-20 Wireshark安装完成
单击“Finish”按钮,结束Wireshark的安装。
2.卸载Wireshark
进入“控制面板”→“卸载或更改程序”,选择“Wireshark 3.4.7 64-bit”程序,单击“卸载”,进入卸载页面,如图1-21所示。
图1-21 Wireshark的卸载页面
单击“Next>”按钮,显示即将卸载的Wireshark所在的目录,如图1-22所示。
图1-22 Wireshark的卸载路径
单击“Next>”按钮,选择待卸载的已安装组件,如图1-23所示。默认配置是卸载核心组件,但保留个人设置、USBPcap和Npcap,这是因为其他类似Wireshark的程序有可能使用这些组件,所以建议保留。
单击“Uninstall”按钮,开始卸载Wireshark。
图1-23 选择卸载Wireshark的相关组件
3.单独卸载Npcap
如需单独卸载Npcap,进入“控制面板”→“卸载或更改程序”,选择“Npcap 1.31”,单击“卸载”,进入卸载页面,如图1-24所示。
图1-24 卸载Npcap页面
单击“Uninstall”按钮,开始卸载Npcap。在卸载完成之后重新启动计算机,卸载完成。
4.单独卸载USBPcap
如需单独卸载USBPcap,进入“控制面板”→“卸载或更改程序”,选择“USBPcap1.5.4.0”,单击“卸载”,进入卸载页面,如图1-25所示。
图1-25 USBPcap卸载对话框
单击“Uninstall”按钮,开始卸载USBPcap。在卸载完成之后重新启动计算机,卸载完成。
1.启动Wireshark
可以使用Shell命令行或者资源管理器启动Wireshark。
2.主窗口
启动Wireshark后,主窗口界面如图1-26所示。新版本的Wireshark支持中文,会自动下载与本机操作系统一致的语言包,并且在初次启动时默认采用该语言。
图1-26 Wireshark主窗口界面
Wireshark主窗口由以下部分组成:
· 菜单:用于开始操作。
· 主工具栏:提供快速访问菜单中经常用到的项目功能。
· 过滤工具栏:提供处理当前显示过滤的方法。
·“数据包列表”面板:显示打开文件的每个包的摘要。单击面板中的每个条目,包的相关情况将会显示在另外两个面板中。
·“数据包详情”面板:显示在“数据包列表”面板中选择的包的数据解析结果。
·“数据包字节”面板:显示在“数据包列表”面板中选择的包的原始数据,以及在“数据包详情”面板中高亮显示的字段。
· 状态栏:显示当前程序状态以及捕获数据的更多详情。
3.主菜单
Wireshark的主菜单位于Wireshark窗口的顶部,图1-27显示了主菜单的界面。
图1-27 Wireshark的主菜单
主菜单包括以下几个项目:
· 文件(File):包含打开、合并捕获文件,保存、打印、导出捕获文件的全部或部分、退出应用程序选项等。
· 编辑(Edit):包含查找数据包、设置时间参考、标记数据包、设置配置文件、设置首选项等。
· 视图(View):控制捕获数据的显示方式,包括数据包着色选项、缩放字体选项、在新窗口显示数据包选项、展开/折叠“数据包详情”面板的树状节点等。
· 跳转(Go):包含跳转到指定数据包的功能。
· 捕获(Capture):包含开始/停止捕获选项、编辑包过滤条件选项等。
· 分析(Analyze):包含显示包过滤宏、允许或禁止分析协议、配置用户指定的解码方式、追踪TCP流等。
· 统计(Statistics):显示多个统计窗口,包括捕获文件的属性选项、协议层次统计、显示流量图选项等。
· 电话(Telephony):显示与电话相关的统计窗口,包括媒介分析、VoIP通话统计选项、SIP流统计选项等。
· 无线(Wireless):显示蓝牙和无线网络的统计数据。
· 工具(Tools):显示Wireshark中能够使用的工具。
· 帮助(Help):包含一些辅助用户的参考内容。例如,访问一些基本的帮助文件、支持的协议列表、用户手册,在线访问一些网站、程序相关信息等。
4.“文件”菜单
Wireshark的“文件”菜单包含的项目如图1-28所示,菜单项的功能如表1-1所示。
图1-28“文件”菜单
表1-1“文件”菜单项的功能
5.“编辑”菜单
Wireshark的“编辑”菜单包含的项目如图1-29所示,菜单项的功能如表1-2所示。
图1-29“编辑”菜单
表1-2“编辑”菜单项的功能
(续)
6.“视图”菜单
Wireshark的“视图”菜单包含的项目如图1-30所示,菜单项的功能如表1-3所示。
图1-30“视图”菜单
表1-3“视图”菜单项的功能
(续)
7.“跳转”菜单
Wireshark的“跳转”菜单包含的项目如图1-31所示,菜单项的功能如表1-4所示。
图1-31“跳转”菜单
表1-4“跳转”菜单项的功能
8.“捕获”菜单
Wireshark的“捕获”菜单包含的项目如图1-32所示,菜单项的功能如表1-5所示。
图1-32“捕获”菜单
表1-5“捕获”菜单项的功能
9.“分析”菜单
Wireshark的“分析”菜单包含的项目如图1-33所示,菜单项的功能如表1-6所示。
图1-33“分析”菜单
表1-6“分析”菜单项的功能
10.“统计”菜单
Wireshark的“统计”菜单包含的项目如图1-34所示,菜单项的功能如表1-7所示。
图1-34“统计”菜单
表1-7“统计”菜单项的功能
(续)
11.“电话”菜单
Wireshark的“电话”菜单包含的项目如图1-35所示,菜单项的功能如表1-8所示。
图1-35“电话”菜单
表1-8“电话”菜单项的功能
(续)
12.“无线”菜单
Wireshark的“无线”菜单包含的项目如图1-36所示,菜单项的功能如表1-9所示。
图1-36“无线”菜单
表1-9“无线”菜单项的功能
13.“工具”菜单
Wireshark的“工具”菜单包含的项目如图1-37所示,菜单项的功能如表1-10所示。
图1-37“工具”菜单
表1-10“工具”菜单项的功能
14.“帮助”菜单
Wireshark的“帮助”菜单包含的项目如图1-38所示,菜单项的功能如表1-11所示。
图1-38“帮助”菜单
表1-11“帮助”菜单项的功能
15.“数据包列表”面板
“数据包列表”面板显示当前捕获的所有数据包,如图1-39所示。
图1-39“数据包列表”面板
列表中的每一行显示捕获文件的一个数据包。如果选择其中一行,该数据包的更多详细信息会显示在“数据包详情”面板和“数据包字节”面板中。
在分析数据包时,Wireshark会将协议信息放到各个列。“数据包列表”面板中有很多列可供选择,可以在首选项中设置需要显示哪些列。
默认显示的列包括:
· No:数据包的编号。编号不会发生改变,即使进行了过滤也是如此。
· Time:数据包的时间戳。数据包的时间戳格式可以自行设置。
· Source:显示数据包的源地址。
· Destination:显示数据包的目标地址。
· Protocol:显示数据包的协议类型的简写。
· Length:显示数据包的长度。
· Info:数据包内容的附加信息。
在菜单栏中,依次选择“捕获”→“首选项”命令,或者在“数据包列表”面板中右键单击列,选择“列首选项”,进行列设置,如图1-40所示。这里默认显示了7列信息,单击界面左下角的“+”“-”可自定义增加或者删除列。
图1-40“列首选项”面板
16.“数据包详情”面板
“数据包详情”面板显示当前数据包(在“数据包列表”面板被选中的数据包)的详情列表,如图1-41所示。
图1-41“数据包详情”面板
该面板显示“数据包列表”面板选中的数据包的协议及协议字段,以树状方式组织,通过单击界面左侧的“>”,可以展开或收缩进行查看。其中,某些协议字段会以特殊方式显示:
· Generated fields(衍生字段): Wireshark会给自己生成的附加协议字段加上括号。衍生字段是通过与该数据包相关的其他数据包结合生成的。例如,Wireshark在对TCP流应答序列进行分析时,会在TCP中添加[SEQ/ACK analysis]字段。
· Links(链接): 如果Wireshark检测到当前数据包与其他数据包的关系,将会产生一个到其他数据包的链接。链接字段显示为蓝色,并加有下划线。双击它会跳转到对应的数据包。
17.“数据包字节”面板
“数据包字节”面板以十六进制转储方式显示当前选择的数据包的数据,如图1-42所示。
图1-42“数据包字节”面板
通常,在十六进制转储形式中,左侧显示数据包数据的偏移量,中间栏以十六进制表示,右侧显示对应的ASCII字符。
根据数据包数据的不同,有时候该面板可能会有多个页面。例如,有时候Wireshark会将多个分片重组为一个,这时会在面板底部出现一个附加选项供选择查看,如图1-43所示。
图1-43 带选项的“数据包字节”面板
实时捕获数据包是Wireshark的优势之一。Wiershark捕获引擎具有以下特点:
· 支持多种网络接口(如以太网、令牌环网、ATM等)的捕获。
· 支持多种机制触发停止捕获,例如,捕获文件的大小、捕获持续时间、捕获到包的数量等。
· 捕获的同时显示包解码详情。
· 设置过滤,减少捕获到的包的容量。
· 长时间捕获时,可以设置生成多个文件。对于特别长时间的捕获,可以设置捕获文件大小阈值、仅保留最后的 N 个文件等。
使用Wireshark进行数据捕获时,要求必须拥有root/administrator权限,选择正确的网络接口,并根据网络和应用实际运行情况决定合适的捕获时间、地点。
可以使用以下四种方式开始捕获数据报文。
· 第一种方法: 在菜单栏中,依次选择“捕获”→“选项”命令,进入“捕获选项”对话框,如图1-44所示。选择“Input”(输入)选项卡,列出驱动扫描到的所有捕获接口,通过单击“接口”左侧的“>”,可以看到该接口的地址(IPv6和IPv4地址),选中正在捕获的接口,单击“开始”,即可启动捕获。
图1-44“捕获选项”对话框
数据的捕获有两种方式:
1)以包形式捕获:在以包形式捕获的情况下,数据包被缓存在捕获缓存中,并实时显示在“数据包列表”面板中。
2)以文件形式捕获:在以文件形式捕获的情况下,捕获引擎会抓取来自网卡的包存放在核心缓存中。这些数据由Wireshark读取并保存到用户指定的捕获文件中。考虑到处理大文件(数百兆)的速度非常慢,因此如果计划进行长时间捕获,或者处于一个高吞吐量的网络中,应考虑使用“Multiple files”(多文件)选项。该选项可以指定在捕获的报文量达到某个临界值时,自动生成一个新文件继续保存捕获报文。
· 第二种方法: 在启动界面,选中接口,单击工具栏中左边第一个蓝色鲨鱼图标,即“开始捕获分组”按钮,或者在菜单栏中选择“捕获”→“开始”命令,启动捕获,如图1-45所示。
图1-45 第二种启动方法
· 第三种方法: 在“开始”界面,直接双击捕获接口启动捕获。
· 第四种方法: 如果已知捕获接口的名称,使用如下命令从eht0接口开始捕获:
Wireshark提供两种过滤器,一种是捕捉过滤器,另一种是显示过滤器。
捕获过滤器指的是提前设置好过滤规则,当捕获数据包时,只捕获符合过滤规则的数据包,不符合过滤规则的数据包不需要捕获。显示过滤器指的是针对已经捕获到的数据包,只显示符合过滤规则的数据包。捕获过滤器是在开始捕获数据包之前设置的,是对数据的第一层过滤,主要用来控制捕获数据的数量;而显示过滤器是在捕获数据包之后设置的,可以理解为对数据的第二层乃至更高层的过滤,主要用来过滤掉已捕获的无关数据包,实现对目标数据包的快速查找。
1.捕获过滤器
捕获过滤器在Wireshark的“开始”界面中进行设置。在该界面“捕获”下面的文本框中指定捕获过滤器,如图1-46所示。
图1-46 设置捕获过滤器
捕获过滤器的语法格式如下:
部分选项的含义如下:
· Protocol(协议):该选项用来指定协议。可使用的值包括ether、fddi、wlan、ip、arp、rarp、decnet、lat、sca、moproc、mopdl、tcp和udp。如果没有特别指明协议,则默认使用所有支持的协议。
· Direction(方向):该选项用来指定来源或目的地。可使用的值包括src、dst、src and dst和src or dst。如果没有特别指明方向,则默认使用“src or dst”作为关键字。下面两个捕获过滤器的过滤效果是一样的。
· Host(s)(主机):该选项用来指定主机地址。可使用的值包括net、port、host和portrange。如果特别指明方向,则默认使用“host”作为关键字。下面两个捕获过滤器的过滤效果是一样的。
· Logical Operations(逻辑运算):该选项用来指定逻辑运算符。可使用的值包括not、and和or。其中,not(否)具有最高优先级,or(或)和and(与)具有相同的优先级,运算时从左至右进行。下面两个捕获过滤器的过滤效果是一样的。
· Other expression(其他表达式):使用其他表达式捕获过滤器。
下面给出了一些常用的捕获过滤器的示例:
使用预置表达式可以将捕获过滤器表达式提前添加到捕获过滤器对话框中。当需要使用时,只需要输入起始的几个字符,系统就会提示完整的表达式。在菜单栏中依次选择“捕获”→“捕获过滤器”命令,打开“捕获过滤器”对话框,如图1-47所示。
图1-47 预置捕获过滤器
该对话框显示两列信息,分别是过滤器名字和表达式。如果想添加自定义预置表达式,单击界面左下角的“+”按钮,即可创建新的预置捕获过滤器。
2.显示过滤器
显示过滤器在Wireshark主窗口的过滤器工具栏中进行设置,如图1-48所示。
显示过滤器的语法格式如下:
部分选项的含义如下:
· Protocol(协议):该选项用于指定过滤协议范围。可使用的值包括eth、ip、arp、tcp、udp等。Wireshark支持的全部协议可以通过在菜单栏中依次选择“视图→内部→支持的协议”进行查看,如图1-49所示。
图1-48 设置显示过滤器
图1-49 Wireshark支持的全部协议
· String(协议子类):该选项用于提取协议的某个字段,这部分是可选的。协议子类与协议之间需要通过“.”来进行引用。例如:
· Comparison operators(比较运算符):表1-12列出了显示过滤器常用的比较运算符及范例。可以通过不同的比较运算符建立比较过滤。
表1-12 显示过滤器常用的比较运算符及范例
· Logical Operations(逻辑运算符):表1-13列出了显示过滤器常用的逻辑运算符及范例。可以通过逻辑运算符将过滤表达式组合在一起使用。
表1-13 显示过滤器常用的逻辑运算符及范例
显示过滤器提供了3种背景色来判断语法是否正确。当背景为红色时,表示该过滤器语法错误,不能运行;当背景为绿色时,表示该过滤器的表达式语法正确并可以运行;当背景为黄色时,表示该过滤器语法正确,但可能过滤不出需要的数据包。
下面列出一些常用的显示过滤器示例:
Wireshark也提供了显示过滤器的预置表达式,可以提前将复杂的显示过滤表达式添加到“显示过滤器”对话框中。当需要使用时,只需要输入起始的几个字符,系统就会提示完整的表达式。在菜单栏中依次选择“分析”→“显示过滤器”命令,打开“显示过滤器”对话框,如图1-50所示。
图1-50 预置显示过滤器
在数据包捕获完成之后,或者打开之前保存的数据包文件时,通过单击“数据包列表”面板中的数据包,可以在“数据包详情”面板看到关于这个分组的树状结构以及字节面板。
通过单击界面左侧的“>”标记,可以展开树状视图的任意部分。例如,在图1-51中,选中59号TCP数据包,在“数据包详情”面板中就可以查看其详细的协议字段信息,选择TCP包头的目的端口(Destination Port: https(443)),其对应的字节信息“01 bb”会突出显示在下方的“数据包字节”面板中。
图1-51 在Wireshark中选择了一个TCP数据包后的界面
1.查找包
Wireshark提供了查找分组的功能,可以快速跳转到包含指定内容的数据包。在菜单栏中依次选择“编辑”→“查找分组”命令,弹出“查找分组”工具栏,如图1-52所示。
图1-52“查找分组”工具栏
该工具栏包括3列信息,默认值依次为“分组列表”“宽窄”和“字符串”,如图1-53所示。
图1-53 各列的默认值
其中,在“字符串”下拉列表框中可选择查找的条件,包括“显示过滤器”“十六进制值”“字符串”和“正则表达式”。每种查找方式的含义如下:
· 显示过滤器:通过使用显示过滤器快速查找分组。
· 十六进制值:通过使用十六进制值快速查找分组。
· 字符串:通过使用字符串形式快速查找分组。
· 正则表达式:通过使用一个正则表达式快速查找分组。
当选择使用“字符串”和“正则表达式”查找分组时,单击第一列“分组列表”的下拉列表框,可以选择查找的位置,如“分组列表”“分组详情”和“分组字节流”。当用户使用“字符串”查找分组时,还可以设置“宽窄”(字符编码方式),单击第二列“宽窄”的下拉列表框,可以选择“宽窄”“窄(UTF-8/ASCII)”和“宽(UTF-16)”。当设置好查找条件后,单击“查找”按钮,即可快速跳转到查找到的分组。
例如,使用字符串“mail.tom.com”在tom.pcapng文件中快速查找数据包,如图1-54所示。在“查找分组”工具栏中,选择“字符串”,然后在对应的文本框中输入mail.tom.com,并单击“查找”按钮,可以自动跳转到145号分组。从分组详情中可以看到,该分组的HTTP的GET请求中包含字符串“mail.tom.com”。再次单击“查找”按钮,将跳转到下一个匹配的分组。
图1-54 查找包含指定字符串的结果
2.标记指定包
在分析数据包时,可以对重要的数据包进行标记。如图1-55所示,选中要标记的169号数据包,在菜单栏中依次选择“编辑”→“标记/取消标记分组”命令,或者直接右键单击要标记的数据包,选择“标记/取消标记分组”命令,即可完成标记。标记的数据包背景色为黑色,前景色为白色。从底部的状态栏可以看到,分组总数为6499,已显示分组数为6499、已标记分组数为1。如果想要取消标记,则选中已标记的数据包,在菜单栏中再次选择“编辑”→“标记/取消标记分组”命令,或者右键单击选择“标记/取消标记分组”命令,即可取消标记。
图1-55 标记/取消标记分组
Wireshark也支持对过滤后的所有分组进行标记。例如,如图1-56所示,在捕获文件中使用显示过滤器dns,过滤出了所有DNS数据包。在菜单栏中依次选择“编辑→标记所有显示的分组”命令,可以看到所有显示的分组都已标记。从底部的状态栏可以看到,分组总数为6499,已显示分组数为510,已标记分组数为510。
3.跳转到指定的包
当捕获的数据包比较多时,可以通过跳转的方式快速到达指定数据包。
在菜单栏中依次选择“跳转”→“转至分组”命令,或直接输入快捷键<Ctrl+G>,弹出“跳转到分组”工具栏,如图1-57所示。在文本框中输入要跳转到的分组编号,比如300,单击“转到分组”按钮,光标立即跳转到第300号数据包。在菜单栏中,继续选择“跳转”→“下一分组”,跳转到第301号数据包;选择“跳转”→“前一分组”,跳转到第299号数据包;选择“跳转”→“首个分组”,跳转到第一个数据包;选择“跳转”→“最新分组”,跳转到最后一个数据包。此外,Wireshark还提供基于会话、基于历史进行跳转。
图1-56 标记所有显示的分组
图1-57“跳转到分组”工具栏
4.时间显示格式及参考时间
在捕获数据包的过程中,每个包都带有时间戳。时间戳被保存在捕获文件中,以备将来分析使用。在菜单栏中依次选择“视图”→“时间显示格式”命令,可以看到所有的“时间显示格式”子菜单,如图1-58所示。
图1-58 时间显示格式
(1)预置时间格式
· 日期和时间(1970-01-01 01:02:03.123456):捕获包的本地绝对日期和时间。
· 年、年积日、时间(1970/001 01:02:03.123456):捕获包的本地年累计日和时间。
· 时间(01:02:03.123456):捕获包的本地绝对时间。
· 自捕获开始经过的秒数(123.123456):相对于文件开始捕获的时间或第一个时间参考包到这个包之前的时间。
· 自上一个捕获分组经过的秒数(1.123456):相对前一个捕获包的时间。
· 自上一个显示分组经过的秒数(1.123456):相对前一个显示包的时间(过滤/显示)。
· UTC日期和时间(1970-01-01 01:02:03.123456):捕获包的UTC日期和时间。
· UTC年、年积日、时间(1970/001 01:02:03.123456):捕获包的UTC年累计日和时间。
· UTC时间(01:02:03.123456):捕获包的UTC时间。
(2)时间精度
· 自动(根据捕获文件):使用载入文件格式具有的时间戳精度(默认选项)。
· 秒、十分之一秒、百分之一秒、毫秒、微秒、纳秒:强制使用指定的精度。如果实际精度比指定的精度低,会在后面自动追加0。如果实际精度比指定的精度高,数据会被截断。
(3)精度距离
如果时间戳显示时使用“自上一个捕获分组经过的秒数”或“自上一个显示分组经过的秒数”,它的值可能是1.123456,默认会采用“Automatic”精度设置,也就是来自libpcap格式文件的固有精度(百万分之一秒)。如果指定精度为秒,则显示为1;如果指定精度为纳秒(nanoseconds),则会显示为1.123456000。
(4)时间参考
用户可以为数据包设置时间参考。时间参考是所有后续包的起算时间,即该数据包之后的所有“时间”值都以该数据包的“时间”值作为时间计算的起点。设置时间参考有助于获得某一个特定包的时间间隔。例如,开始一个新请求,可以在一个包里面设置多个时间参考。要使用时间参考,在菜单栏中选择“编辑”→“设置/取消设置 时间参考”命令,或者右键单击“数据包列表”面板,在弹出项中选择“设置/取消设置时间参考”命令。
如图1-59所示,设置了时间参考的包,在Time列会有*REF*字符串作为标记(见第10个数据包),所有后续包都会以10号数据包作为时间参考。
图1-59 时间参考举例
5.跟踪TCP流
在处理TCP时,使用“跟踪TCP流”功能可以查看TCP流中的应用层数据。例如,在捕获文件twitter_login中,可查看并重现一个twitter数据流的完整交互过程。选择30号分组,并在菜单栏中依次选择“分析”→“跟踪流”→“TCP流”命令,或者直接右键单击30号分组,选择“跟踪流”→“TCP流”命令,弹出“跟踪TCP流”对话框,同时,Wireshark自动创建、应用了显示过滤器tcp.stream eq 2,表示当前跟踪的是编号2的流数据,如图1-60所示。
图1-60“跟踪TCP流”对话框
第1~11行表示从源地址到目标地址的流量,第12行之后表示从目标地址到源地址的流量。从以上信息可以看到,客户端发送了一个对Web根目录的GET请求,然后服务器用HTTP/1.0 200 OK做出了一个响应,表示请求成功。从底部可以看到,整个会话大小为3216 bytes,显示和保存数据的默认格式为ASCII,流编号为2。当需要单独分析客户端或服务器传输的数据时,在“整个对话”下拉列表中,可选择客户端发送给服务器的数据,或者是服务器响应客户端的数据。
在此对话框可以执行如下操作:
1)过滤掉此流(Filter out this stream):应用一个显示过滤,增加一个逻辑非运算符,在显示中排除当前选择的TCP流。
2)打印(Print):以当前选择的格式打印流数据。
3)另存为(Save As):以当前选择的格式保存流数据。
4)返回(Back):移除当前显示的流数据。
5)关闭(Close):关闭“跟踪TCP流”对话框。
6)帮助(Help):显示“跟踪TCP流”的手册。
可以用以下格式浏览流数据:
1)ASCII:以ASCII方式查看数据,这种方式适合基于ASCII的协议使用,例如HTTP。
2)C Arrays:显示为C数组格式,将流数据导入C语言程序。
3)EBCDIC:显示为EBCDIC码格式,EBCDIC是IBM公司的字符二进制编码标准。
4)Hex转储:显示为十六进制格式。
5)UTF-8:显示为UTF-8编码格式。
6)UTF-16:显示为UTF-16编码格式。
7)YAML:显示为YAML格式。
8)原始数据:显示为原始数据格式。
6.合并包
网络协议经常需要传输比较大的数据块。受网络数据包大小的限制,底层协议可能不支持这样大数据块传输。在这种情况下,网络协议必须确定数据块分段的边界,并在必要的情况下将数据块分割为多个包,如IP分片、TCP分段等。同时,在接收端,还需要一种机制来确定块边界。Wireshark称这种机制为合并或者重组,有些特定的协议称之为碎片整理。
对于那些可以被Wireshark识别的协议,Wireshark通常的处理过程为:查找、解码、显示数据块。Wireshark会尝试查找数据块对应的包,在“数据包字节”面板的附加页面显示合并以后的数据。合并可能发生在多个协议层,所以在“数据包字节”面板可能会见到多个附加页,并在数据块的最后一个包看到合并后的数据,如图1-61所示。
图1-61 带有合并包附加选项卡的“数据包字节”面板
以HTTP Get应答为例,请求数据(例如一个HTML页面)返回时,Wireshark会显示一个十六进制转储数据在“数据包字节”面板的“Uncompressed entity body”(未压缩实体主体)新选项卡中。
默认情况下,首选项中的合并功能被设置为允许。
允许和禁止合并包设置对协议来说还有两项要求:
1)低层协议(如TCP)必须支持合并。可以通过设置协议参数来允许或禁止合并。
2)高层协议(如HTTP)必须使用合并机制来合并分片的数据。可以通过设置协议参数来允许或禁止合并。