Wireshark 精要(一)

零、前言

Wireshark 可能是世界上最受欢迎的网络数据包分析器,用于对各种技术的网络和应用协议进行故障排除和分析。Wireshark 是免费的、开源的,可用于 Windows、Mac OS X、Linux 和几个类似 Unix 的平台,并且由最初的开发者 Gerald Combs 和 500 多名代码贡献者不断改进和扩展。

Wireshark 具有丰富的功能集,包括捕获、保存和导入各种格式的数据包文件的能力。它提供了广泛的过滤功能、详细的协议信息、统计数据以及内置的分析和数据包着色功能,帮助您识别和分析重要事件。任何愿意花一点时间学习 Wireshark 的基本功能以及如何解释相对较少的核心网络和应用协议的人都可以使用这种强大的分析功能。

本书旨在不仅向网络工程师和管理员,而且向应用开发人员、数据库设计人员和管理员、服务器管理员和 IT 安全专业人员介绍 Wireshark 和基本的数据包分析技术。它还为他们提供了有效利用 Wireshark 所需的基本知识和实践示例,以便他们能够在日常工作中进行数据包级分析。

应用开发人员可以使用 Wireshark 查看和了解其代码中进行网络调用的例程如何转换为请求/响应数据包,检查这些数据包中与应用相关的数据字段的结构,并验证这些调用是否有效,以及是否按照预期的方式工作。

数据库设计人员和管理员可以利用 Wireshark 提供的数据包详细信息来检查数据包携带的查询和响应,并检查它们是否有效。在事务性查询中,是否有许多小的请求/响应周期可以被更少、更高效的请求所取代,从而提高性能?

在几乎所有的 IT 领域,服务器处理时间都是性能相关问题中的一个重要因素和争论点。这本书将向您展示使用 Wireshark 在数据包级别识别和测量服务器处理时间是多么容易,在这一级别没有争议的证据。

IT 安全专业人员固有地利用协议级参数来配置防火墙和入侵检测及防御设备,但他们可能缺乏自信地自己建立和验证这些因素的技能,而是依赖他人提供这一关键输入。假设安全专业人员有能力检查数据包捕获,以识别、表征和防范恶意流量,花一点时间阅读本书将为掌握这一基本技能打开大门。

最后,网络支持人员几乎每天都需要排除奇怪的连接或缓慢的网络问题。他们需要数据包级分析提供的可见性和证据,不仅可以保护他们的领域,还可以帮助识别和解决真正的问题;这通常是永久关闭暖气的唯一方法。良好的 Wireshark 技能是这些人的必备技能。

本书的重点是教您如何在各自的领域内熟练掌握基本的 Wireshark 技能。乍看之下,看着屏幕上充满了看似无穷无尽的各种各样和来源的数据包可能会非常吓人,但在学习了本书中提供的概念之后,实际上很容易分离出与感兴趣的领域相关的数据包并过滤掉所有其他内容,建立对数据包流和事件序列的高级理解,然后找到并检查解决手头问题的正确数据包和数据字段。

学习如何使用 Wireshark 的另一个好处是加深了对网络和应用实际工作方式的理解,这对您工作的所有其他方面都有帮助。我相信,学习 Wireshark 和数据包分析技能所需的少量时间投资将会带来巨大的回报。

这本书涵盖了什么

第一章熟悉 Wireshark ,从第一步开始。这一介绍性章节将通过安装 Wireshark 并做一些有趣而有用的事情,帮助您快速开始熟练掌握 Wireshark,例如执行数据包捕获、隔离和过滤一些感兴趣的流量,以及在深入了解更多细节和后面章节中的支持概念之前保存跟踪文件。

第 2 章面向数据包分析人员的网络,概述了网络技术、包括 IP、UDP 和 TCP 在内的基本网络协议,以及最常见的协议如何在 OSI 和 DARPA 模型级别中相互配合。本章的目标是为网络和协议如何协同工作建立一个良好的心理模型,让你自信而有效地进行包级分析。

第 3 章捕获所有正确的数据包,详细介绍了如何在网络中正确定位 Wireshark 并对其进行配置以捕获所需的数据包,如何识别感兴趣的网络对话并应用显示过滤器来隔离这些数据包,最后保存过滤后的文件以供进一步分析。这些是支持实用数据包分析的基本技能。

第 4 章配置 Wireshark ,提供了许多可以配置和使用的功能,以提高分析活动的准确性和易用性。显示和解释数据包时间戳的各种方法尤其重要,我们将全面介绍这些主题,以及其他基本配置选项、数据包列表颜色以帮助识别重要事件,以及如何在定制的配置文件中保存不同的配置,这些配置文件可以针对各种分析任务进行定制和选择。

第 5 章网络协议,涵盖了您应该熟悉的许多其他基本且有用的网络协议,包括 ICMP、DNS、DHCP、互联网协议版本 6 (IPv6)的介绍性回顾,以及一个示例应用层协议(HTTP)。我们还将讨论基本的 Wireshark 捕获和显示过滤器。

第 6 章故障排除和性能分析,提供将您的新技能和协议知识应用于 Wireshark 开发的主要目的的方法:故障排除和分析网络和应用问题及性能。我们将讨论性能低下的主要原因,以及如何使用 Wireshark 来检测和测量它们。

第 7 章针对安全任务的数据包分析,介绍如何使用 Wireshark 来检测和分析可疑流量,例如扫描和清扫、操作系统指纹识别、格式错误的数据包、呼叫总部流量以及其他可能表明恶意来源的异常数据包和模式。

第 8 章命令行和其他实用工具,介绍了 Wireshark 提供的一些最有用的命令行实用工具,用于以最少的资源执行数据包捕获和操作数据包跟踪文件。我们还将讨论一些其他工具,它们可以帮助您完善您的数据包分析工具集。

这本书你需要什么

要完成这些任务并重复本书中提供的示例,您只需要一台可以安装和使用 Wireshark 的计算机,以及一个连接到家庭或企业网络的有线局域网。

虽然您可以从无线接口进行捕获,但是无线管理帧的额外开销可能会造成分析负担和干扰,因此从有线网络开始对您的学习体验会更好。

就背景知识而言,如果您涉足 IT 行业的某个方面,您可能至少对分组级分析中使用的常见概念和术语有一些基本的了解,例如交换机、路由器、分组、协议、TCP/IP 和 HTTP,但是假设您对网络和应用协议只有基本的了解。

这本书是给谁的

本书面向希望发展或增强 Wireshark 技能以扩展其故障排除和分析能力并增加其在工作场所中的价值的广大 IT 专业人员:网络设计人员和管理员、应用开发人员和支持人员、数据库设计人员和管理员、IT 安全专业人员以及在当今日益网络化的世界中其工作职责包括支持信息技术的任何其他人。

习俗

在这本书里,你会发现许多区分不同类型信息的文本风格。以下是这些风格的一些例子,并解释了它们的含义。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“目标主机的 IP 地址是10.1.1.125。”

代码块设置如下:

(tcp.flags&02 && tcp.seq==0) ||  (tcp.flags&12 && tcp.seq==0) || (tcp.flags.ack && tcp.seq==1 && !tcp.nxtseq > 0 && !tcp.ack >1)  || tcp.flags.fin == 1 || tcp.flags.reset ==1

任何命令行输入或输出都按如下方式编写:

dumpcap -i 2 -f "host 192.168.1.115" -w capture.pcapng

新术语重要词汇以粗体显示。你在屏幕上看到的单词,例如在菜单或对话框中看到的单词,出现在文本中如下:“这个字段大致相当于 IPv4 中的生存时间字段;每个转发 IPv6 数据包的设备都会将它递减 1。

注意

警告或重要提示出现在这样的框中。

Tip

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者的反馈对我们开发出你真正能从中获益最多的图书非常重要。

要向我们发送总体反馈,只需发送电子邮件至<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在邮件主题中提及书名。

如果有一个你擅长的主题,并且你有兴趣写一本书或者为一本书投稿,请查看我们在www.packtpub.com/authors的作者指南。

客户支持

既然您已经是 Packt book 的骄傲拥有者,我们有许多东西可以帮助您从购买中获得最大收益。

勘误表

尽管我们已尽一切努力确保内容的准确性,但错误还是会发生。如果您在我们的某本书中发现了错误——可能是文本或代码中的错误——如果您能向我们报告,我们将不胜感激。这样做,你可以让其他读者免受挫折,并帮助我们改进本书的后续版本。如果您发现任何勘误表,请通过访问http://www.packtpub.com/submit-errata,选择您的图书,点击勘误表 提交 表格链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,该勘误表将被上传到我们的网站上,或添加到现有勘误表的任何列表中,位于该标题的勘误表部分。从http://www.packtpub.com/support选择你的标题可以查看任何现有的勘误表。

盗版

互联网上版权材料的盗版是所有媒体中持续存在的问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现我们作品的任何形式的非法拷贝,请立即向我们提供地址或网站名称,以便我们采取补救措施。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,并提供可疑盗版材料的链接。

我们感谢您帮助保护我们的作者,以及我们为您带来有价值内容的能力。

问题

如果您对这本书的任何方面有问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们会尽最大努力解决。

一、了解 Wireshark

自从 Gerald Combs 于 1997 年创建 Wireshark(最初称为 Ethereal)来解决一家小 ISP 的网络问题以来,它已经成为最流行的网络和应用协议包级分析工具之一。这主要是因为它是一个开源解决方案,使任何技术专业人员都可以免费使用它,以及它广泛的功能,覆盖 1000 多种协议,以及全球 800 多名开发人员的贡献所带来的持续支持和改进。

在深入了解更多细节和支持概念之前,本章介绍将 Wireshark 安装到您的系统上,并使用它做一些有趣和有用的事情,从而帮助您快速精通 Wireshark。

在本章中,我们将讨论以下主题:

  • 安装 Wireshark
  • 执行数据包捕获
  • Wireshark 用户界面基础
  • 使用显示过滤器隔离感兴趣的流量
  • 保存过滤后的数据包跟踪文件

接下来的章节将建立在这些基本功能的基础上,并为其提供支持概念,使您能够发展最适合您的技术角色和目标的 Wireshark 技能。

安装 Wireshark

wireshark 可以安装在运行 32 位和 64 位 Windows (XP、Win7、Win8.1 等)、Mac OS X (10.5 及更高版本)和大多数 Linux/Unix 版本的机器上。在 Windows 和 Mac 计算机上的安装既快速又简单,因为安装程序可从 Wireshark 网站下载页面获得。Wireshark 是许多 Linux 发行版上提供的标准软件包,Wireshark 下载页面上提供了一个第三方安装程序的链接列表,适用于各种流行的*nix 平台。或者,如果没有预编译的安装包,您可以下载源代码并为您的环境编译 Wireshark。

Wireshark 依靠 WinPcap (Windows)或 libpcap (Linux/Unix/Mac)库来提供数据包捕获和捕获过滤功能;在 Wireshark 安装过程中会安装适当的库。

注意

您可能需要管理员(Windows)或 root (Linux/Unix/Mac)权限才能在工作站上安装 Wireshark 和 WinPcap/libpcap 实用工具。

假设你正在 Windows 或 Mac 机器上安装 Wireshark,你需要进入 Wireshark 网站(https://www.wireshark.org/)并点击页面顶部的下载按钮。这会将您带到下载页面,同时尝试从浏览器信息中自动发现您的操作系统类型和版本。大多数情况下,适用于您机器的 Wireshark 安装包会突出显示,您只需单击突出显示的链接即可下载正确的安装程序。

注意

如果您已经安装了 Wireshark,当您启动 Wireshark 时,自动更新功能会通知您可用的版本更新。

在 Windows 上安装 Wireshark

在之后的截图中,Wireshark 下载页面已经确定 64 位 Windows installer 适用于该 Windows 工作站:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_01.jpg

点击突出显示的链接下载一个Wireshark-win64-1.10.8.exe文件或类似的可执行文件,您可以将其保存在硬盘上。双击可执行文件上的开始安装过程。您需要遵循以下步骤:

  1. 同意许可协议
  2. 对于每个提示,通过点击下一个的来接受所有的默认设置,包括安装 WinPcap 的提示,这是一个从您工作站上的 网络接口卡 ( NIC )捕获数据包所需的库。
  3. 在 Wireshark 安装的早期,该过程会暂停并提示您在单独的窗口中点击安装和几个下一步按钮来安装 WinPcap。
  4. WinPcap 安装完成后,点击剩余的下一个提示以完成 Wireshark 安装。【T2https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_02.jpg

在 Mac OS X 上安装 Wireshark

在 Mac 上安装 Wireshark 的过程与在 Windows 上安装 Wireshark 的过程相同,除了不会提示安装 WinPcaplibpcap 是用于 Mac 和*nix 机器的数据包捕获库,它会被安装(没有提示)。

但是,在 Mac 安装中可能需要满足两个附加要求:

  • 首先是安装 X11,一个窗口系统库。如果您的系统需要这样做,您会得到通知,并提供一个链接,最终将您带到 XQuartz 项目下载页面,这样您就可以安装这个包。

  • 可能出现的第二个要求是,如果在启动 Wireshark 时,您被告知没有可以进行捕获的接口。这是一个关于 Berkeley 包过滤 ( BPF )的权限问题,可以通过打开终端窗口并键入以下命令来解决:

    bash-3.2$ sudo chmod 644 /dev/bpf*
    
    

如果每次启动 Wireshark 时都需要重复这一过程,您可以执行 web 搜索,为您的环境寻找更永久的权限解决方案。

在 Linux/Unix 上安装 Wireshark

在 Linux 或 Unix 平台上安装 Wireshark 的要求和流程可能会因特定环境的不同而有很大差异。默认情况下,Wireshark 通常可以通过特定 Linux 发行版的软件包管理系统获得。在 Linux 上安装 Wireshark 的指南可以在第 2 章数据包分析者网络中找到,或者在位于www . Wireshark . org/docs/wsug _ html _ chunked/chapterbuildinstall . html的 Wireshark 用户文档中找到。

执行您的第一次数据包捕获

当您第一次启动 Wireshark 时,您会看到一个初始的起始页,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_03.jpg

不要太喜欢这个屏幕。虽然您每次启动 Wireshark 时都会看到这种情况,但一旦您执行捕获、打开跟踪文件或在 Wireshark 中执行任何其他功能,此屏幕将会被标准的 Wireshark 用户界面所取代,您在下次启动 Wireshark 之前不会再看到它。所以,我们不会在这里花太多时间。

选择网络接口

如果您的机器上有个网络接口,您可能不确定选择哪个来捕获数据包,但是有一个相当简单的方法来解决这个问题。在 Wireshark 起始页上,点击接口列表(或者,从捕获菜单中点击接口,或者点击图标栏上的第一个图标)。

打开的Wireshark Capture Interfaces窗口提供了您机器上所有网络接口的列表和描述、分配给每个接口的 IP 地址(如果已经分配了地址)以及一些计数器,例如自该窗口打开以来接口上看到的数据包总数和每秒数据包数(packets/s)计数器。如果一个接口分配了 IPv6 地址(可能以fe80::开头,包含多个冒号),并且正在显示,您可以单击 IPv6 地址,它将切换显示 IPv4 地址。如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_04.jpg

注意

在 Linux/Unix/Mac 平台上,您可能还会看到一个环回接口,可以选择它来捕获在同一台机器上的应用之间发送的数据包。然而,在大多数情况下,您只会对从网络接口捕获数据包感兴趣。

目标是在您打开浏览器并导航到网站时,识别将用于与互联网通信的活动界面。如果您有一个有线局域网连接,并且该接口已启用,则该接口可能是活动接口,但您也可能有一个已启用的无线接口,并且您可能是也可能不是主接口。活动网络接口的最可靠的指示符是它将具有更大数量的稳定增加的分组以及相应的活动分组数量(这将随时间变化)。另一个可能的指标是某个接口是否分配了 IP 地址,而其他接口则没有。如果您仍然不确定,请打开浏览器窗口,导航到您最喜欢的网站之一,观察数据包和数据包/秒计数器,找出显示活动增加最多的接口。

执行数据包捕获

一旦确定了正确的接口,选择该接口左侧的复选框并点击捕获接口窗口底部的开始按钮。Wireshark 将开始捕获可以从该接口看到的所有数据包,包括发送到您的工作站和从您的工作站接收的数据包。你会在屏幕的顶部(称为数据包列表窗格)看到令人眼花缭乱的各种数据包;这很正常。如果您没有看到这一点,请尝试不同的界面。

在一个典型的网络中有如此多的背景流量,这有点令人惊讶,例如来自设备的广播包向其他设备通告它们的名称、地址和服务,并从其他设备请求它们想要与之通信的站的地址。此外,在后台运行的应用和服务会从您自己的工作站产生大量流量,而您并不知道它们会产生这么多噪音。Wireshark 的数据包列表窗格可能类似于下面的屏幕截图;然而,我们现在可以忽略这一切:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_05.jpg

我们已经准备好产生一些我们有兴趣分析的流量。打开一个新的互联网浏览器窗口,在地址栏输入www.wireshark.org,按进入

https://www.wireshark.org/主页完成加载时,通过从捕获菜单中选择停止或点击视图转到菜单标题之间的红色方形停止图标来停止 Wireshark 捕获。

Wireshark 用户界面要点

一旦您完成了第一次捕获,您将看到正常的 Wireshark 用户界面主屏幕。因此,在我们进一步深入之前,快速介绍一下该用户界面的主要部分将会很有帮助,这样您就知道在我们继续分析过程时会提到什么。

默认 Wireshark 用户界面有八个重要部分或元素,如以下屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_06.jpg

让我们详细看看八个重要部分:

  • 标题:这个区域反映了正在捕获的接口或打开的数据包跟踪文件的文件名
  • 菜单:此是 Wireshark 中主要功能和子功能的标准行
  • 主工具栏(图标):这些提供了一种快速访问最有用的 Wireshark 功能的方法,非常值得熟悉和使用
  • 显示过滤器工具栏:此允许您快速创建、编辑、清除、应用和保存过滤器,以隔离感兴趣的数据包进行分析
  • 数据包列表窗格:这个部分包含每个捕获数据包的摘要信息行,以及数据包编号和相对时间戳
  • 数据包详细信息窗格:该部分提供了关于在数据包列表窗格中选择的单个数据包的信息的分层显示,该窗格被分为数据包中包含的各种协议的部分
  • 数据包字节窗格:该部分以十六进制字节或位的形式显示所选数据包的内容,以及有用数据的 ASCII 显示
  • 状态栏:此部分提供专家信息指示器、编辑捕获注释图标、跟踪文件路径名和大小信息、捕获和显示的数据包数量数据和其他信息,以及配置文件显示和选择部分

过滤掉噪音

在您的数据包捕获中的某个地方,加载 Wireshark 主页时会涉及到数据包——但是您如何在所有的背景噪音中找到并查看这些数据包呢?

最简单、最可靠的方法是确定 Wireshark 网站的 IP 地址,并使用显示过滤器过滤掉除该 IP 地址和您工作站的 IP 地址之间的数据包之外的所有数据包。最好的方法——也是您将来大多数捕获后分析工作的第一步可能使用的方法——是按 IP 地址和/或主机名调查所有会话的列表,按最活跃的节点排序,并从该列表中识别您的目标主机名、网站名称或 IP 地址。

在 Wireshark 菜单中,从统计菜单中选择对话,在打开的对话窗口中,选择顶部的 IPv4 选项卡。您将看到一个由地址 A地址 B 标识的网络对话列表,其中包含总共个数据包个字节个数据包 A→B个字节 A→B个数据包 A←B个字节 A←B

滚动到该窗口的右侧,有相对开始值。这些是在捕获中首次观察到每个特定对话的时间,相对于捕获开始的时间(秒)。下一列是持续时间,这是该对话在捕获中持续的时间(看到的第一个到最后一个数据包)。

最后,对于每个会话,在每个方向上都有以每秒比特 ( bps ) 为单位的平均数据速率,这是该会话的网络影响。这些都显示在下面的截图中:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_07.jpg

我们希望对列表中的对话进行排序,将最繁忙的对话——用网络行话来说,称为最会说话的人——排在列表的最前面。点击字节列标题,然后再次点击。您的列表应该类似于前面的截图,如果您没有收到大量其他后台流量流入/流出您的工作站,来自https://www.wireshark.org/的流量应该最大,因此位于列表的顶部。

在本例中,IP 地址162.159.241.165192.168.1.116 之间的会话具有最大的总流量,查看字节 A- > B 列,很明显大部分流量是从162.159.241.165地址到 192.168.1.116 地址。然而,在这一点上,我们如何知道这是否真的是我们想要的对话呢?

我们需要将列表中的 IP 地址解析为主机名或网站地址,这可以在 Wireshark 中完成,方法是打开网络名称解析,并尝试使用反向 DNS 查询(使用所谓的指针(PTR) DNS 记录类型)为这些 IP 地址解析主机名和/或网站地址。如果您刚刚安装或启动 Wireshark,默认情况下可能不会打开名称解析选项。

这通常是一件好事,因为 Wireshark 可以通过传输 DNS 查询来创建自己的流量,尝试解析它在捕获期间遇到的所有 IP 地址,并且您不希望在捕获期间发生这种情况。然而,名称解析选项对于在捕获完成后将 IP 地址解析为正确的主机名非常有帮助。

要启用名称解析,请导航至视图 | 名称解析 | 启用网络层(单击以打开复选标记),并确保使用外部网络名称解析器也已启用。Wireshark 将尝试将捕获中的所有 IP 地址解析为其主机名或网站地址,解析后的名称将出现在数据包列表和对话窗口中(替换之前的 IP 地址)。

请注意,对话窗口底部的名称解析选项必须作为井启用(通常是默认的),该设置影响解析的名称或 IP 地址是否出现在对话窗口中(如果在 Wireshark 主屏幕中启用了名称解析),如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_08.jpg

在这一点上,你应该在列表的顶部或顶部附近看到wireshark.org和你的工作站之间的对话对,如下面的截图所示。当然,你的工作站会有一个不同的名字或者可能只作为一个 IP 地址出现,但是识别到 wireshark.org的对话已经实现了。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_09.jpg

应用显示过滤器

你现在只想看到你的工作站和wireshark.org之间的对话,去掉所有无关的对话,这样你就可以专注于感兴趣的流量。这是通过创建只显示所需流量的过滤器来实现的。

右键单击包含wireshark.org条目的行,导航到应用为过滤器 | 选定的 | A < - > B ,如以下截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_10.jpg

Wireshark 将创建并应用一个显示过滤字符串,将显示的流量仅隔离到wireshark.org的 IP 地址与您的工作站之间的对话,如下面的屏幕截图所示。请注意,如果您手动创建或编辑显示过滤器条目,您需要点击应用将过滤器应用到跟踪文件(或清除将其清除)。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_11.jpg

这种特殊的显示过滤器语法适用于 IP 地址,而不适用于主机名,并且对每个节点使用一个ip.addr== (IP 地址等于)语法和&& (and)逻辑运算符来构建一个表示display any packet that contains this IP address *and* that IP address的字符串。这是您将在数据包分析中大量使用的显示过滤器类型。

当你在数据包列表窗格中上下滚动时,你会注意到除了你的工作站和 wireshark.org之间的数据包之外,所有其他数据包都不见了。从严格意义上来说,它们并没有消失,它们只是被隐藏起来了——正如你可以通过检查包号栏所观察到的,在编号顺序上有缺口;那些是隐藏的包裹。

保存数据包跟踪

现在您已经使用显示过滤器隔离了感兴趣的流量,您可以保存一个新的数据包跟踪文件,其中只包含过滤的数据包。

这有两个目的。首先,您可以关闭 Wireshark,稍后再回到它,打开过滤后的跟踪文件,从您的分析中停止的地方开始,并有一个捕获记录,以备您稍后需要引用它,例如在故障排除场景中。

其次,在 Wireshark 的各种屏幕和功能中,使用一个更小、更集中的跟踪文件(只包含您想要分析的数据包)会更容易、更快捷。

要创建仅包含过滤/显示数据包的新数据包跟踪文件,请从 Wireshark 文件菜单中选择导出指定数据包

您可以导航到和/或创建一个文件夹来保存 Wireshark 跟踪文件,然后输入要保存的跟踪文件的文件名。在本例中,文件名为wireshark_website.pcapng。默认情况下,Wireshark 将以pcapng格式保存跟踪文件(这是首选格式)。如果您没有用文件名指定文件扩展名,Wireshark 将根据选择的另存为类型提供适当的扩展名,如以下截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_01_12.jpg

此外,默认情况下,Wireshark 会选择所有数据包选项,如果应用了显示过滤器(如本场景所示),则会选择显示的选项,而不是捕获的选项,后者会保存所有数据包,而不管是否应用了过滤器。输入文件名并确认所有保存选择正确后,您可以点击 Save 保存新的数据包跟踪文件。

请注意,当您完成此跟踪文件保存活动时,Wireshark 仍然将捕获的所有原始数据包保存在内存中,并且仍然可以通过点击显示过滤器工具栏菜单中的清除来查看它们。如果您想进一步使用刚刚保存的新跟踪文件,您需要通过点击文件菜单中的打开来打开它(或文件菜单中的打开最近的)。

总结

恭喜你!如果您完成了本章中介绍的所有活动,那么您已经成功安装了 Wireshark,执行了数据包捕获,创建了一个过滤器来从所有外来干扰中隔离并显示您感兴趣的数据包,并创建了一个仅包含这些数据包的新数据包跟踪文件,以便您可以在以后对其进行分析。此外,在这个过程中,您初步熟悉了 Wireshark 用户界面,并学会了如何使用它的一些最有用和最强大的功能。对于第一章来说还不错。

在下一章中,我们将回顾一些必要的网络概念,为执行包级分析提供坚实的基础。下一章的主要目标是帮助你开发一个网络的心智模型,它很好地适用于包级分析,而不会在不必要的细节上纠缠不清。

二、网络数据包分析器

数据包分析就是分析应用如何通过网络将有用的数据从 A 点传输到 B 点。因此,理解网络如何运作是至关重要的。

在本章中,我们将讨论以下主题:

  • 为什么七层 OSI 模型很重要
  • IP 网络和子网
  • 交换和路由数据包
  • 以太网框架和交换机
  • IP 地址和路由器
  • 广域网链接
  • 无线网络

七层 OSI 模型将映射到最常见的网络术语,我们将回顾帧、交换、IP 寻址、路由和其他一些感兴趣的网络主题。我们的目标是开发一个网络心智模型,使其能够很好地进行包级分析。

OSI 模型——为什么重要

开放系统互连 ( OSI )参考模型是由国际标准化组织 ( ISO )制定的行业公认标准,旨在将网络功能划分为七个逻辑层,以支持和鼓励(相对)独立的开发,同时提供来自不同硬件/软件环境、平台和供应商的各层之间的(相对)无缝互连。还有一个更简单的四层 国防高级研究计划局 ( DARPA )模型,它映射到 OSI 模型,但 OSI 版本是最常用的。在讨论各个层时,我将参考这两个模型。

下图比较了 OSI 和 DARPA 参考模型:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_01.jpg

除非您从事编写协议的工作,否则没有必要深入研究这七层中的任何一层,但是从概念上理解它们是有帮助的,因为这些层被业界和您的 it 同行所引用。

更重要的是,您必须知道这些层及其相关协议在 Wireshark 的数据包详细信息窗格中出现的位置和方式。我们将从这一方面介绍这些层,以帮助您记住它们并从讨论中获得最大的用处。

了解网络协议

网络协议,如 OSI 层,是一套工业标准规则和设计,用于在计算机和应用之间交换消息和数据。在任何关于 OSI 层的讨论中,您都直接或间接地提到与给定层相关联的协议(最常见的协议是 IP、UDP、TCP、HTTP 等)以及它们执行的重要功能。

例如,您会经常听到术语网络层和 IP 层可互换使用,并且假定和理解您谈论的是包含和使用 IP 地址的层和相关协议,以通过网络将数据包从 A 点路由到 B 点。接下来的讨论将把 OSI 和 DARPA 层与它们相关的协议联系起来。

七个 OSI 层

由于我们涵盖了从第 1 层到第 7 层的 OSI 层,我将概述每层的相关协议如何在 Wireshark 中显示和/或在网络硬件中使用。您通过这种方法开发的心智模型应该是最准确的,对包分析最有用。

第 1 层——物理层

物理层包含电气特性和机械标准,以获取从计算机的网络接口卡 ( NIC ) 传输到交换机端口或交换机和路由器端口之间的数据位。您将在这一层遇到的最常见的标准、术语和设备包括:

  • 以太网:这个是一个局域网 ( 局域网)的组网技术家族。
  • RJ-45 :这些是 8 针模块化连接器,位于铜质以太网电缆的两端,插入计算机的网卡和墙上的插孔或交换机端口
  • Cat 5 (Cat 5e 或 Cat 6)线缆:这些是使用双绞线铜线的以太网线缆。“Cat”代表电缆类别,反映其质量和数据速度能力。
  • 100Base-T、1000Base-T 和 1000Base-LX :这些代表一种特定的以太网标准。100Base-T 在使用 RJ-45 连接器的双绞线电缆上是 100 Mbps,1000Base-LX 在光纤上是 1000 Mbps,等等。
  • 单模和多模光缆:这些使用固态发光二极管或激光器发出的光脉冲来传输数据位。

用于将网卡连接到交换机的以太网标准也用于将交换机连接在一起,以及将交换机连接到路由器或其他网络设备,尽管使用的电缆和连接器可能会因电缆类型和速度而异。

还有其他常用的第 1 层标准,包括 802.11 无线、帧中继和 ATM 后两种用于长途 广域网 ( 广域网)。

第 2 层——数据链路层

数据链路层将来自物理层(通常是以太网)的原始位组织成帧,这是 Wireshark 中通常所说的数据包的第一种表现形式。这一层是物理网络、电气/机械标准和逻辑结构(协议)之间的分界线,逻辑结构用于格式化和传输、接收和解码更高层中的数据包。

在 DARPA 参考模型中,物理层和数据链路 OSI 层结合在一起,称为网络接口层。该层(用于以太网 II 帧)的重要特性和功能包括:

  • 媒体访问控制(MAC)地址:这些是局域网中使用的网络地址。它们是烧录到网卡、交换机、路由器或其他网络设备端口/接口上的内存芯片中的 6 字节网络硬件地址:

    • 一个 MAC 地址的前三个字节被分配给一个特定的制造商,并且可以与该制造商相关联。Wireshark 有一个列表,可以将 MAC 地址显示为制造商代码和最后三个字节的组合。制造商为每个接口创建一个唯一的后三字节地址,这样每个 MAC 地址在全球范围内都是唯一的。(尽管 NIC 可能被编程为使用另一个任意 MAC 地址,这是为了恶意攻击的 MAC 欺骗。但这是一个非常糟糕的想法,因为另一张卡可能使用相同的地址,并可能导致数据丢失和一些非常混乱的数据包交换问题。)
    • 以太网帧包括目的 MAC 地址和源 MAC 地址。MAC 地址用于在同一局域网上的计算机之间或者在计算机和路由器或局域网上的其它设备端口之间交换(不是路由——我们将很快进行区分)帧。
  • 类型(或以太类型)字段:该表示下一个更高的协议层(通常是 IP (0800)或 ARP (0806))。Wireshark 使用它来确定数据包解码中要应用的下一个协议解析器。

  • 有效载荷:这个是以太网帧携带的数据包或数据报。

  • 帧校验序列:这个是一个 4 字节的循环冗余校验 ( CRC ) 检错码,从一帧中的所有比特位计算出来,加到帧尾。这用于检测通常由于电缆故障、外部电信号在电缆电线上引起的噪声等原因而损坏的帧。收到帧时,会根据收到的位重新计算该代码,并与 FCS 字段进行比较。坏帧随后被丢弃。

下图说明了以太网帧中字段的布局:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_02.jpg

这里的一个关键点(理解这一点很重要)是,以太网帧及其 MAC 地址只能在它们所属的局域网(LAN 和 IP 子网)中的设备之间传输帧。

路由器凭借其 IP 子网(子网)寻址形成局域网之间的边界。属于同一个 IP 子网的所有设备都是同一个 LAN 的一部分,要在不同的子网之间收发数据包需要路由器。

一旦一个帧进入路由器端口,被路由到不同的/远距离的网络,带有其 MAC 地址和 FCS 的以太网帧就被剥离并丢弃。该帧中的有效载荷被路由到端口,并在去往下一台设备的途中离开,然后创建另一个具有不同 MAC 地址和重新计算的 FCS 的帧来封装该数据包。然后,该帧被传输到下一个目的地。

在这一层工作的网络设备(通常是交换机)通常被称为第 2 层设备或第 2 层交换机。

最后,您应该知道,第 2 层交换机可以支持多种网络增强功能,如虚拟局域网 ( VLAN ) 和 服务类别 ( CoS )标记,这是通过在 MAC 地址和以太网类型字段之间添加一个 4 字节的 802.1Q 字段来实现的。您可能会在交换机之间看到这些帧(但不会在用户端口上看到)。

VLAN 是第 2 层解决方案,允许将交换机上的各种端口划分为独立的广播域。位于不同 VLANs 上的设备可以有效地相互隔离,就像它们位于不同的物理网络上一样。如果交换机支持 VLAN 标记,VLAN 可以分布在多个交换机上,而无需为每个 VLAN 铺设单独的电缆。不同 VLANs 上的设备之间的通信通常需要使用路由器。

在下面的 Wireshark packet details 截图中,以太网 II 帧目的地 MAC 地址、类型(表示下一层协议是 IP)、以及帧校验序列被圈起来,同样被圈起来的还有摘要。

注意

Wireshark 显示每个帧的摘要,包括帧大小、捕获的时间戳和帧间时间以及其他有用的信息。这是 Wireshark 计算的元数据,用于帮助分析,而不是捕获帧的一部分。

以下截图突出显示了以太网帧的重要字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_03.jpg

注意

Wireshark 在数据包详细信息窗格的任何区域中提供的任何额外分析,如果是计算出来的,或者不是实际数据包内容的一部分,都将放在括号中。

第 3 层——网络层

网络层(在 DARPA 模型中称为互联网层)主要处理数据包在从源计算机到目的主机的路径上根据目的 IP 地址在其他网络之间和向其他网络的路由。这一层最常见的两种协议是互联网协议和地址解析协议。

互联网协议

在这一层使用的最常见的协议是 互联网协议版本 4 ( IPv4 ),它包括几个基本字段来完成跨网络路由数据包的任务:

  • 区分服务(DiffServ) :该字段支持对 IP 的增强,通常称为服务质量 ( QoS ),并允许对某些类型的流量(语音、视频等)进行分类,以便在网络拥塞的情况下这些数据包可以得到优先处理。
  • 总长度:这个是数据包的总长度(减去以太网 MAC 头)。
  • 标识(IP ID) :这个是一个递增的数字,用来支持分片。
  • 标志:这些用于支持分段(将数据包分成两个或多个较小的数据包),以防大数据包必须分成几个较小的数据包才能通过数据包大小受限的链路。这些标志和 IP ID 字段值允许将分段的数据包正确重组为原始数据包。
  • 片段偏移量:如果 标志字段为 1 (更多片段),则该字段中的值表示该片段包所包含的原始净荷起始处的偏移量,单位为字节。
  • 生存时间(TTL) :这个是一个“跳”或时间计数器,每当一个数据包通过路由器时它就递减。如果 TTL 达到零,数据包将被丢弃。主要目的是防止数据包永远存在,并在无意中出现路径环路时使网络崩溃。
  • 协议:这个标识 IP 包有效载荷中的协议。Wireshark 使用它来确定应用于数据包解码的下一个协议解析器。
  • 源和目的 IP 地址:这些是发送机器和最终目的机器的 IP 地址。IP 地址的长度为 4 个字节,由句点分隔的四个八位字节(十进制数为 0 到 255)表示。

在下面的屏幕截图中,重要的 IPv4 字段被圈起来。当在这一层进行数据包分析时,这些是您想要检查的字段。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_04.jpg

地址解析协议

您将在网络层看到的另一个协议是地址解析协议 ( ARP ),当一个设备只知道另一个设备的 IP 地址时,它使用该协议来获取该设备的 MAC 地址。

在下面的 Wireshark packet details 截图中,注意以太网帧目的 MAC 地址是Broadcast(ff:ff:ff:ff:ff:ff:ff)TypeARP (0x0806) ,站点已经在 ARP 协议 Sender 字段中提供了自己的 MAC 和 IP 地址(其他站点监听并使用它来建立 MAC 和 IP 地址表)。它提供目标设备的 IP 地址,并将所有零放入目标 MAC 地址字段。目标设备应该返回一个类似的地址为请求者的 ARP 数据包,其 MAC 地址在发送者字段中。

只有在以下情况下,工作站才会发送 ARP 请求:

  • 需要目标设备的 MAC 地址的站点没有听到该站点的 MAC 地址的先前广播,或者它的 ARP 表已经超时(ARP 条目只保留一段时间)。
  • 需要目标设备 MAC 地址的工作站(根据目标设备的 IP 地址和自己的子网掩码)已经计算出目标设备应该位于同一个 LAN 上。否则,该站假定目标设备在不同的网络上,并根据发送站的默认网关配置设置中的条目,向默认网关(路由器)MAC 地址发送其第一个会话发起数据包。默认网关会将数据包转发到适当的出口端口,以将其路由到目的地。
  • 需要向远程网络发送数据包的站点不知道其默认网关的 MAC 地址(例如,刚刚加电)。

下面的屏幕截图突出显示了 ARP 数据包的重要字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_05.jpg

在这一层使用的其他协议包括 互联网控制消息协议 ( ICMP ,用于在设备之间发送网络错误消息,以及互联网群组管理协议(IGMP),主机和相邻路由器使用该协议为网络应用(如视频流和游戏)建立多播(一对多)群组成员关系。

第 4 层——传输层

传输层,在 OSI 和 DARPA 模型中都称为,负责通过端口号在应用之间或用户和应用之间的唯一会话中传输数据包。设备或用户的 IP 地址和分配给该设备或用户的端口号的组合(称为套接字)将不同于其他设备或用户的 IP 地址和端口号(在客户端)。

如果数据包的源主机是服务器,那么源端口可能是标准应用和服务的一个众所周知的数字,例如 HTTP 的端口 80。

传输层通常使用两种协议中的一种,即用户数据报协议或传输控制协议,后者在大多数应用中更为流行。

用户数据报协议

用户数据报协议 ( UDP )是一个相当简单的协议。它被认为是一种不可靠的传输方式,因为它不能保证数据包的传送或排序,但它的开销较低,用于对时间敏感的应用,如语音和视频流量,以及网络服务应用,如 DNS。

UDP 报头只有 8 个字节长,由以下内容组成:

  • 源端口号和目的端口号 : 每个都是 2 个字节。
  • 长度:这个是 UDP 头加上有效载荷的长度。这是一个 2 字节的字段。
  • 校验和:2 字节字段,用于检查 UDP 头和数据的错误。如果变送器没有生成校验和,则校验和将全为零。

下面的屏幕截图显示了 UDP 报头中包含的字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_06.jpg

传输控制协议

与 UDP 不同, 传输控制协议 ( TCP )通过检测丢失、重复或无序的数据包,请求重新传输丢失的数据,或者在将数据包传送到应用之前按正确的顺序重新排列数据包,来提供可靠的数据传送。TCP 还可以接受来自应用的大块数据,并处理使用多个数据包将数据可靠地传输到另一端,并在另一端重组它们(UDP 也可以,但不可靠;应用必须确定丢失的分组并从丢失的分组中恢复)。

TCP 报头的内容和长度可以根据可能使用的选项而变化,但在其最简单的实现中,它包括:

  • 源端口和目的端口(每个 2 字节):这些是众所周知的注册端口,用于(在服务器上)访问标准应用服务,比如 HTTP、FTP、SMTP、数据库等等。分配给客户端/用户会话的端口号通常在一个较大的数字范围内,并按顺序分配。

  • 序列号(4 字节):这个是一个数字,代表任何给定段中的第一个八位字节。序列号在新会话开始时被初始化为随机数,然后作为数据字节递增并发送。

  • Acknowledgment number (4 bytes) : When the ACK flag bit is set, this field contains the next sequence number expected from the sender, Which in turn acknowledgements receipt of all the bytes received up to that point.

    Note

    TCP uses sequence numbers and acknowledgement numbers to ensure the reliable transmission of data by tracking the number and order of received bytes.

    The serial number and confirmation number are so large that it is difficult for human beings to track them. Wireshark can convert these values and display them as relative values starting from 0 at the beginning of the session, so as to check them easily and associate these values with the number of bytes sent and received.

  • 标志(9 位):这些位用于控制连接建立、终止和流量控制机制。

  • 窗口大小(2 字节):该表示该主机上缓冲区的当前大小,该缓冲区用于存储接收到的数据,直到该数据被移交给接收应用。该信息允许发送主机在网络或主机拥塞时调整数据流速率。

下面的屏幕截图突出显示了 TCP 报头的重要字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_07.jpg

第 5 层——会话层

会话层处理两台计算机之间的应用内会话的建立、控制和结束。例如,这不一定与 TCP 连接是一回事,尽管两者是相关的。应用会话可以跨越多个网络连接,并且持续时间更长。在这一层运行的网络协议的一个例子是网络基本输入/输出系统 ( NetBIOS )。

第 6 层——表示层

表示层将传入和传出的数据从一种格式转换为另一种格式,并在需要时处理加密/解密和/或压缩。表示层还负责向应用层传递和格式化信息,以便进一步处理或显示。演示服务的一个例子是将 EBCDIC 编码的文本计算机文件转换成 ASCII 编码的文件。

第 7 层——应用层

应用层,可以(也可以不)执行独立于应用本身的功能,处理消息格式化、人机接口等等。这一层代表直接支持应用的服务,例如用于文件传输、数据库访问、电子邮件等的软件。

在许多广泛使用的应用中,表示层和应用层之间没有区别。例如,超文本传输协议 ( HTTP ),即通常被认为是应用层协议,它具有表示层方面的功能,例如识别字符编码以进行适当转换的能力,然后在应用层进行转换。

在 DARPA 模型中,OSI 第 5-7 层被合并成一个应用层。从数据包分析的角度来看,顶层功能的特定表现形式和可见性(在 Wireshark 中)会因应用和支持这些功能的特定协议而异。

下图总结了 OSI 和 DARPA 层,以及各种网络协议和服务如何与这些层以及这些层之间的关系:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_08.jpg

封装

到现在为止,你可能已经观察到数据包将各种协议封装到连续的层中,就像剥洋葱一样。以太网帧包含数据报有效载荷;该数据报是具有 IP 报头和有效载荷的数据包。IP 数据包有效负载由 TCP 报头和数据段组成,而数据段又可能包含 HTTP 报头和有效负载。在 Wireshark 的数据包详细信息窗格中工作时,这种封装更容易可视化。

IP 网络和子网

在继续之前,简单回顾一下典型的 IP 子网划分术语和典型应用应该有助于澄清本书中使用的术语,并作为那些已经精通 IP 寻址的人的复习资料。

在图表或设备配置中,放在网络 IP 地址之后的/24指示符是一个无类域间路由 ( CIDR )指示符,它表示以下内容:

  • 4 字节 IP 地址中 32 位中的前 24 位代表该网络中任何 IP 地址的网络部分。该网络被指定为10.1.1.0(下一个/24网络将是10.1.2.0,然后是10.1.3.0,依此类推)。

  • The last 8 bits of the 32-bit address can be used to give workstations, hosts, and other devices an IP address, with the following exceptions:

    • 该网络上的第一个主机地址被保留作为构建路由表的网络指示符:10.1.1.0(通常称为环回地址)
    • 该网络上的最后一个主机地址被保留为 IP 广播地址:10.1.1.255

    8 位二进制等于 256 十进制,减去前面两个例外。这为设备留下了 254 个可用的 IP 地址,从10.1.1.110.1.1.210.1.1.254依次类推。

  • 表示子网掩码的另一种方式是点分十进制格式,255.255.255.0,它再次表示 IP 地址的前 24 位是网络,其余 8 位是主机。

  • There are Class A, Class B, and Class C address ranges, as well as a subset of IP ranges reserved as private addresses to use within organizations.

    下表显示了三个主要类别的 IP 地址范围:

    |

    IP 地址类别

    |

    起始 IP 地址

    |

    结束 IP 地址

    |
    | — | — | — |
    | A | 1.0.0.0 | 126.255.255.255 |
    | B | 128.0.0.0 | 191.255.255.255 |
    | C | 192.0.0.0 | 223.255.255.255 |

    下表显示了私有 IP 地址范围:

    |

    私有 IP 地址的类别

    |

    起始 IP 地址

    |

    结束 IP 地址

    |
    | — | — | — |
    | A | 10.0.0.0 | 10.255.255.255 |
    | B | 172.16.0.0 | 172.32.255.255 |
    | C | 192.168.0.0 | 192.168.255.255 |

  • 子网掩码可以配置为允许每个子网有更多或更少的主机,相应的权衡是拥有更少或更多的网络地址,以便在更大的组织内构建多个网络。

对 IP 寻址和子网划分的深入探讨超出了本书的范围。如果您不熟悉这些概念,最好再学习一些,因为对 IP 子网划分的深入了解对于大多数分析活动来说是必不可少的。

交换和路由数据包

到目前为止,我们已经讨论了讨论数据包如何通过局域网和/或广域网从计算机 A 路由到主机 B 所需的主题,距离可以从一个房间到全球。要记住的重要概念是,以太网帧与交换机一起工作,IP 包与路由器一起工作来完成这一壮举,我们将在下一节讨论这一点。

以太网框架和交换机

重申一下第 2 层(数据链路层)讨论中概述的内容,以太网帧根据目的 MAC 地址从入口端口交换到适当的目的端口。网络交换机构建属于每个端口的 MAC 地址表,将帧的目的 MAC 地址与这些表进行比较,如果目的地在同一交换机上,则将帧交换到适当的出口端口,否则将帧从中继端口交换到另一个交换机或路由器。

请注意,交换机第一次看到它不认识的目的 MAC 地址时,它会将数据包(通常是 ARP 数据包)从所有端口发送出去,直到设备应答,它可以将新的 MAC 地址添加到它的内容可寻址存储器 ( CAM )表,该表将 MAC 地址映射到特定端口。

携带目的地为远程网络的数据包的帧被发送到默认网关端口 MAC 地址。如果您在 Wireshark 的 Conversations 表的以太网选项卡中查看 MAC 地址列表,并看到一个流量明显高于其他站点的地址,这很可能是默认网关(路由器)端口 MAC 地址。这个端口是从/到其它网络进入/离开这个局域网的路径。

在任何给定的局域网上,你都会看到工作站、服务器和路由器生成 ARP 和域名服务 ( DNS ) 请求:

  • ARP :用于将 IP 地址解析为 MAC 地址
  • DNS :用于将主机名解析为 IP 地址

在下图中,有两个用户工作站和一个服务器在位于10.1.1.0/24 IP 网络上的 LAN 中连接在一起。一台路由器连接到该网络,该网络通过 WAN 链接到另一个位置。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_09.jpg

以下两个场景利用此图展示了如何利用 MAC 地址在局域网中交换以太网帧:

  • The workstation with MAC address B wants to use an application on the server Venus, which is unknown to all the network devices as it was just powered up. The workstation knows the IP address of Venus as the IP address was preconfigured in the client application, but it doesn’t know the server’s MAC address.

    工作站广播一个 ARP 数据包,它以自己的 MAC 和 IP 地址作为发送方,以 Venus 服务器的 IP 地址作为发送方,并在目标字段中为 MAC 地址添加全零。Venus 向工作站发送 ARP 响应,在发送方 MAC 地址中包含其 MAC 地址 C。

    然后,工作站使用服务器的 MAC 地址作为以太网帧中的目的 MAC,向服务器发送会话启动数据包。

    这些以太网帧穿过交换机 3,交换机 3 通过观察 ARP 对话获知了两台设备的 MAC 地址。LAN 网络中的其余交换机在工作站 C 广播其 ARP 数据包时获知了它的 MAC 地址(因为交换机 3 将该 ARP 数据包从所有端口发送出去),但没有获知服务器的 MAC 地址,因为服务器直接响应 C。

  • The workstation with MAC address A now wants to use an application on the server Venus. It doesn’t know the server’s MAC address either, so it sends an ARP request as well, which switch 2 broadcasts out all its ports, as does switch 1 and switch 3 as the switches only look at MAC addresses and the destination MAC address of any ARP request is ff:ff:ff:ff:ff:ff, so each switch is obliged to send the broadcast frame out all ports.

    然而,当服务器 Venus 使用 A 的 MAC 地址响应 A 的 ARP 数据包时,路径中的每台交换机都知道它看到 A 的 MAC 地址来自哪个端口。因此,每台交换机只将 Venus 的响应从相应的端口发送回工作站 a。对于学习到的非广播帧也是如此。如果交换机无法识别非广播帧的目的 MAC 地址,这些地址也会在第一时间从所有端口发出。

    随着交换机 CAM 表中填充了 MAC 地址及其相关端口,必须发送到 LAN 中每台设备的帧数量以及所有这些设备上的工作负载都大大减少了。

IP 地址和路由器

当数据包需要离开局域网到达远程 IP 网络时,路由器需要根据数据包的目的 IP 地址对其进行路由。下面的场景(仍然参考前面的截图)说明了一种可能情况下涉及的一些细节。

工作站 A 现在想要使用服务器 Mars 上的应用,该应用驻留在与前面场景不同的网络上。而在这种情况下,工作站 A 不知道服务器的 IP 地址;它只需要它的名字。工作站 A 将向其网络设置中配置的 DNS 服务器 IP 地址(此处未显示 DNS 服务器)发送一个 DNS 请求数据包,主机名为 MarsDNS 服务器将返回 Mars 10.1.2.25 的 IP 地址。工作站 A 通过将其 IP 地址和子网掩码与 Mars 的 IP 地址进行比较,计算出该主机不在自己的网络上,因此它向路由器 1 发送会话发起数据包,路由器 1 在其网络设置中被配置为默认网关。我们假设工作站 A 已经从先前的 ARP 交换中知道了路由器 1 端口的 MAC 地址,以便从给定的 IP 地址中找到路由器 1 的 MAC 地址。

当路由器收到发送到路由器端口 MAC 地址的 A 的帧时,它会检查 IP 报头中的目的 IP 地址,并查找将数据包转发到的适当端口。路由器根据其它路由器广播的路由信息构建的路由表条目支持这一路由过程;每台路由器都会告诉所有其它路由器它知道通往哪个网络的路由。

在这种情况下,A 的数据包周围的以太网帧被剥离,剩余的有效负载(数据包)通过 WAN 链路发送到路由器 2,路由器 2 也会检查 IP 报头目的 IP 地址,并查找将数据包转发到的正确端口。路由器 2 将数据包封装在一个新的以太网帧中,以自己的 MAC 地址 X 作为源,以 Mars 服务器的 Y 地址作为目的 MAC(假设路由器的 MAC 表中已经有了该服务器),然后将数据包传输到 LAN 并交换到 Mars 服务器,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_10.jpg

万链接

实际上,网络数据包可能会经过几个路由器和 WAN 链路到达目的网络,每经过一个路由器称为一个跳。在数据包分析中,您应该意识到 WAN 链路会由于以下四个主要因素而导致数据包传输延迟或延时:

  • 物理光速传播延迟:这个是电信号或光信号通过铜缆/光缆长距离传输所需的时间。
  • 网络路由/地理距离:点与点之间的 WAN 链路路由从不在一条直线上。他们不得不穿过主要的电话交换中心,沿着铁路、公路和其他机会主义的道路走。
  • WAN 链路内部和之间的串行化延迟:WAN 链路通常是速度较慢的链路,在这些链路上一次一位地发送分组数据需要有限的时间。
  • 排队延迟:在网络设备缓冲区中,包括可能由服务质量策略引起的额外延迟,一些数据包获得优先级,而其他数据包必须等待更长时间才能传输。

通过检查会话设置数据包之间经过的时间,可以在 Wireshark 数据包跟踪中看到和测量 LAN 和 WAN 链路上发生的网络延迟的影响。

无线网络

无线网络利用一系列 802.11 规范在 2.4 或 5 GHz 频段上以各种速度提供连接。无线帧与有线网络帧的显著区别如下:

  • 无线网络采用载波侦听(每个站都在侦听)、多址接入(共享介质)和冲突避免(避免冲突而不仅仅是从冲突中恢复)技术,这些技术降低了吞吐量

  • 除了转发到有线网络的数据帧之外,无线帧类型还包括以下几种:

    • 管理帧:这是用于认证和关联任务的
    • 控制帧:这控制共享介质上的发送/接收功能,以帮助避免冲突

Wireshark 可用于捕获和分析无线网络上的数据包。然而,为了分析控制和管理帧,以及选择要捕获的无线电信道而不必与特定信道相关联,需要专门的适配器。这些适配器可从不同的网络供应商处获得。

这些无线适配器及其驱动程序使 Wireshark 能够在数据包详细信息窗格中的帧标题下方显示一个伪标题,其中包括以下信息:

  • 数据速率:这是无线信道上可能的最大数据传输速率
  • 频道频率:这个是电台正在使用的射频频道频率
  • 信道类型:这个是使用的802.11协议,常见的类型有 abgn
  • 射频信号和噪声水平:这个是接收到的射频信号强度和背景噪声水平;这两者之间的差异越大,信号解码就越好

请记住,在分析无线网络时,无线接入点利用有线 LAN 连接到网络的其余部分,这可能需要进行单独的分析。接入点剥去 802.11 报头,将数据包封装在以太网帧中,然后通过有线网络发送出去。

下面的截图展示了一个典型的无线报头IEEE 802.11 帧的内容;注意数据速率通道频率信号/噪声值:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_02_11.jpg

注意

您可以阅读大量参考资料和书籍来了解更多有关网络和网络协议的知识。一个经典的来源是 TCP/IP 图文并茂的第一、二、三卷W. Richard StevensAddison-Wesley Professional,可以在网上或以书籍形式获得。

总结

本章讲述的要点包括:如何根据目的 MAC 地址将以太网帧交换到 LAN 上适当的交换机端口,数据包如何根据目的 IP 地址路由到远程网络,以及如何将携带目的 IP 地址为远程网络的数据包的帧发送到默认网关的端口 MAC 地址。

我们还讲述了较慢和/或较长距离的 WAN 链路如何以及为什么会给数据包传输增加大量延迟,从而降低应用数据交换的速度并增加用户响应时间。我们讨论了 Wireshark 如何使用专用适配器捕获和分析 802.11 无线网络上的数据包,从而结束了本章。

在下一章,我们将详细介绍如何使用 Wireshark 捕获和过滤数据包。

三、捕获所有正确的数据包

为了分析数据包以排查连通性、性能或安全问题,您必须成功捕获所有正确的数据包,然后识别并过滤掉与当前目标相关的数据包。

在本章中,我们将讨论以下主题:

  • 选择最佳捕获点
  • 分路器和交换机端口镜像
  • Wireshark 的捕获接口、过滤器和选项
  • 验证一个好的捕获
  • 隔离感兴趣的对话
  • 使用 Wireshark 对话窗口
  • Wireshark 的显示过滤器
  • 过滤表达式按钮
  • 跟随 TCP/UDP/SSL 流
  • 标记和忽略数据包
  • 保存过滤的流量

您会发现,这些活动中有许多与我们在第 1 章了解 Wireshark 中完成的活动相同,执行捕获并过滤加载网页时涉及的数据包。在这一章中,我们将扩展并完善你在所有这些主题中的技能。

挑选最佳拍摄点

确定执行数据包捕获的最佳位置取决于几个因素:

  • 被调查问题的性质
  • 在对分析最有用的位置执行捕获的相对能力
  • 在给定地点执行抓捕所需的技术难度、风险和时间的总量

用户位置

如果您正在对用户投诉进行故障排除,第一个捕获点应该在用户的工作站,以便从用户的角度获得一个视图,并验证/澄清用户报告的情况。从这个有利位置,您可以:

  • 确保 ARP 和 DNS 等基本网络服务正常工作
  • 如果用户身份验证涉及不同于目标应用服务器的设备,则分析初始登录过程
  • 测量从用户到目标主机的网络往返时间
  • 确定 TCP 会话设置握手是否适合所访问的应用
  • 测量服务响应时间(例如 HTTP 或 SMB 响应时间)
  • 确定用户是否遇到数据包丢失和重新传输、数据包乱序或其他网络相关异常
  • 捕获发送给用户的任何应用错误消息以及导致这些错误的请求

从实用的角度来看,从用户的位置捕获通常要简单得多,并且需要处理的流量也少得多,这使得捕获的大小更小,并且过滤感兴趣的数据包也更简单。断开用户的以太网电缆几分钟以插入一个窃听装置(我们将在下一节讨论)或在用户的工作站上安装 Wireshark 通常不需要特殊授权或准备,因为对其他用户的风险可以忽略不计。

服务器位置

如果从抱怨用户的工作站进行捕获是不可能的或不实际的,那么从服务器端进行捕获仍然是有用的,但是应用捕获过滤器只收集进出用户工作站的流量(基于用户的 IP 地址)来限制捕获文件的大小可能是有利的。您仍然可以测量网络往返时间、服务器响应时间、分析 TCP 握手细节、检测由数据包丢失引起的重新传输,或许还可以从这个位置检测登录/验证过程。

在分析后端服务响应时间时,从服务器位置进行捕获也是合适的。例如,如果用户与应用服务器交互,但该应用服务器与后端数据库执行事务以满足用户请求,并且如果有人抱怨响应时间缓慢,那么对应用服务器到数据库服务器交互的分析可以帮助隔离一个或另一个主机性能不佳的真正原因以及导致响应缓慢或错误的请求类型。

其他拍摄地点

对于大多数数据包捕获,您可能会在用户工作站或服务器交换机端口,但也有一些情况需要在其他位置执行捕获。

中间网络捕获

确定网络路径上过多数据包丢失或无序的来源可能需要在该路径上的不同点执行数据包捕获,通常是在分布或核心交换机干线,或路由器、防火墙等的接口,以找到数据包丢失变得明显的网段。

专用网络设备的双方

今天的现代网络经常使用许多网络设备,这些设备实际上可以改变在客户机和服务器之间流动的数据包的内容;在某些情况下(偶尔或最后手段),可能有必要在这些设备的两端进行采集,以隔离或证明功能或配置问题:

  • Routers and gateways: These are also called Internet gateways in some configurations and may be configured to perform a Network Address Translation (NAT) function that alters and hides the user’s actual IP address from an outside network. This is done by substituting a public IP address for the user’s real address. This usually involves translating port numbers as well so that a single public IP address can be used to support multiple sessions; in which case, the solution is called Port Address Translation (PAT). The end result of the PAT functionality is that a capture from the client side and a capture at the server side of the same session conversation will involve different IP addresses and port numbers.

    下图说明了 PAT 设备如何将内部专用网络的 IP 地址和端口转换为外部可见的 IP 地址,以及如何转换用于单个用户会话的端口:

    https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_01.jpg

  • 代理服务器和防火墙:这类设备可以作为想要使用其他(通常是外部)服务器资源的客户端之间的中介。这些设备通常部署在公司内部用户和通过互联网访问的外部(web)服务之间。这些设备因其安全功能而被采用,允许对可以访问的内容和可以在两个网络之间传递的数据内容类型、恶意软件扫描等进行管理控制。从数据包分析的角度来看,您应该知道,除了执行 NAT/PAT 功能之外,这些设备的某些实现可能会在一端实际终止用户会话,并在另一端代表用户在设备和外部主机之间发起完全不同的会话,这样,TCP 握手和会话参数、IP 地址和端口号以及数据包大小在任一端都可能不同。

  • 使用通用路由封装的 IP 隧道:这些隧道用于连接两个 IP 网络,这两个网络之间没有本地路由路径。原始数据包封装在具有不同 IP 地址的数据包中,这些 IP 地址适用于它们将通过的网络介质。IP 隧道最常见的用途是通过公共互联网连接将私有企业网络连接在一起,或者通过传统的 IPv4 网络路径将互联网协议第 6 版 ( IPv6 )网络连接在一起。可以在路由器和高端交换机之间配置 IP 隧道。

尽管可能有必要(向其他支持团队验证问题)或更实际地在前面描述的设备接口处或附近进行捕获,但在用户和/或服务器位置执行捕获通常更容易且同样有效。除非你是网络支持团队的一员,否则你不必在如此高级复杂的环境中进行分析。

测试接入端口和交换机端口镜像

如果您从一个用户位置进行捕获,并且不能或不希望在用户的机器上安装 Wireshark,或者您在网络中的另一个位置进行捕获,您有两种选择来获得通过网络的数据包的副本:测试接入端口或交换机端口镜像。

测试接入端口

一个测试接入端口 ( 分接头)是一个将流经它的所有数据包复制到一个或多个监控端口的设备。安装了 Wireshark 的工作站可以连接到其中一个监控端口来捕获数据包。

您应该选择一个聚合分路器,该分路器支持正在分析的网络端口的链路速度(通常为 100 Mbps 或 1 Gbps),并将复制和合并双向流动的数据包(从用户工作站传输数据,从网络接收数据);聚合分路器将流量集中到一个连接(传输到 Wireshark 站),以便您可以通过 Wireshark 站上的一个网络接口捕获两个方向的流量。请注意,由于您是将数据包从两个方向复制到一个管道中,然后再传送到 Wireshark 站,因此如果流量非常高,可能会导致监控端口超额预订。如果发生这种情况,多余的数据包将被丢弃。超额订阅通常不是用户工作站的问题,但它可能是交换机中继或其他高流量区域的问题。

下图说明了如何在用户工作站和该工作站的交换机端口之间插入一个窃听装置,以及如何连接一个 Wireshark 工作站来捕获数据包:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_02.jpg

交换机端口镜像

交换机端口镜像,也称为交换机端口分析器 ( SPAN ) 功能或跨越端口,是将网络交换机配置为执行与 TAP 相同的功能的实践:复制进出指定端口的数据包,并将它们发送到未使用的监控端口,Wireshark 工作站连接到该端口以捕获数据包。

使用端口镜像的优点是插入分接头时不需要断开任何连接。监控端口可以由交换机管理员轻松配置,也可以轻松禁用。

此选项的潜在问题包括,并非所有交换机都支持端口镜像,有证据表明,使用此功能可能会影响交换机的性能,至少对于被监控的端口是如此。对于端口镜像,也存在使监控端口超额订阅过多的发送和接收流量水平的可能性,使用分路器时就是这种情况,并且当监控到其他交换机的交换机中继时也可能出现这种情况,因为这些交换机将为多个用户传输流量。

下图简单说明了交换机上的端口镜像场景。进出工作站端口的数据包被复制到 Wireshark 工作站连接的端口。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_03.jpg

在高流量链路上捕获数据包

如果您需要捕获高流量链路上的数据包,例如大型交换机之间的中继链路,Wireshark 可能不是最佳解决方案。它可能跟不上繁忙的链路。Wireshark 实际上是一个 GUI 工具,它调用一个名为 dumpcap 的命令行可执行程序,该程序捕获数据包并将其保存到磁盘文件中。Wireshark 读取该文件,并将处理后的数据包呈现给用户界面。Wireshark 的替代方法是直接使用 dumpcap 或 tcpdump 可执行文件(这些将在第 8 章命令行和其他实用工具中介绍)或由众多供应商提供的高性能捕获设备。

捕获界面、过滤器和选项

使用 Wireshark 捕获数据包包括选择正确的网络接口来捕获数据包,应用任何合适的捕获过滤器,以及应用正确的选项来以所需的方式完成捕获。我们将在接下来的章节中讨论这三个主题。

选择正确的网络接口

正如第 1 章了解 Wireshark 中所讨论的,如果您的机器上有多个网络接口,您需要确定并选择正确的接口来捕获数据包。在 Wireshark 的捕获菜单中,点击界面或点击图标栏上的第一个图标。

Wireshark 捕获接口窗口提供了您机器上网络接口的列表和描述、分配的 IP 地址以及每个接口的总数据包数和每秒数据包数。如果接口分配有 IPv6 地址并且正在显示,您可以单击该地址来切换和显示 IPv4 地址。

下面的屏幕截图显示了一个典型的捕获接口窗口,其中列出了 LAN 和无线接口及其 IP 地址和数据包计数器:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_04.jpg

捕获接口窗口提供了以下两个选项:

  • 点击任何一个列出界面的细节按钮,打开一个界面细节窗口,该窗口提供广泛的信息,可用于验证界面的操作。链路的状态链路速度信息显示在特性选项卡中,所选网卡的 MAC 地址显示在 **802.3(以太网)**选项卡中。
  • 其余的捕获选项在捕获选项窗口中配置,点击捕获界面窗口中的选项按钮,或者从捕获菜单中选择选项,或者点击图标栏中的第二个图标即可打开。

下面的截图展示了一个典型的捕获选项窗口,其中指定了多个选项。您可以参考关于捕获选项的主题示例。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_05.jpg

如前面截图所示,捕获选项窗口显示可用接口及其 IP 地址,并允许您选择一个或多个接口来执行捕获。Wireshark 可以同时从多个接口以及虚拟接口进行捕获。从捕获接口窗口开始的主要优势是数据包计数器可以帮助识别活动接口,这是捕获选项窗口所没有的功能。否则,如果您知道您想要使用哪个接口,您可以跳过使用捕获接口窗口,从这里开始。

点击捕获选项窗口中的管理接口按钮,弹出接口管理窗口。从本地接口选项卡,您可以选择隐藏您不希望在捕获接口捕获选项窗口中显示的接口。

有一个选项可以在所有接口上快速启用捕获,还有一个默认启用的在所有接口上使用混杂模式选项。在大多数情况下,此选项应保持启用,以便所选接口可以捕获和保存看到的所有数据包。否则,只有发送到 Wireshark 工作站的 MAC 地址的数据包、广播和/或组播数据包才会被看到和捕获,这基本上否定了它作为捕获设备的用途。编译选定的 bpf按钮提供编译的捕获过滤器的机器语言显示,但没有其他功能目的。

注意

捕获过滤器字段具有高亮显示功能,指示有效和无效的过滤器语法。绿色背景表示良好的过滤器,红色背景表示无效或不完整的过滤器。

使用捕获过滤器

捕获过滤器用于减少数据包捕获过程中节省的流量。实际上,如果使用捕获过滤器的话,应该尽量少用,以帮助确保不会因为不符合捕获过滤器参数而无意中遗漏对分析很重要的数据包。请记住,您总是可以从捕获中过滤掉不需要的流量,但是一旦捕获完成,您就无法对丢失的数据包做任何事情。如果您对捕获不确定,请使用更宽松的捕获过滤器或根本不使用过滤器再次执行捕获。

适合使用捕获过滤器的一种情况是,您希望捕获长时间运行。然后,您应该过滤掉尽可能多的无关流量,以控制捕获文件的大小。但是,请注意确保您应用的捕获过滤器没有排除任何可能对分析有用的流量。

在进行您想要保留的正式采集之前,使用采集过滤器来验证过滤器是否按预期工作通常是一个好主意。

配置捕获过滤器

Wireshark 提供了一个捕获过滤器窗口,可以轻松选择预先配置的捕获过滤器,或者您可以根据需要配置自己的过滤器。

点击捕获选项窗口中的捕获过滤器按钮,打开捕获过滤器窗口。在此窗口中,您可以从许多有用的预配置捕获过滤器中进行选择,根据您的需要创建新的唯一的捕获过滤器,或者删除不需要的或错误的过滤器。创建一个新的过滤器只需要给过滤器一个名称,输入捕获过滤器语法,点击 New 保存过滤器,最后点击 OK 。或者,您可以单击现有的过滤器,然后单击 New ,这将在列表底部创建该过滤器的副本,然后可以根据您的需要进行修改。

下面的截图展示了一个典型的捕获过滤器窗口。在这种情况下,选择了只允许特定以太网 MAC 地址的流量进出的捕获过滤器:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_06.jpg

Wireshark 的捕获过滤器使用一种称为 Berkley 数据包过滤器 ( BPF )格式的语法,这种格式起源于 Unix 世界,今天仍在数据包级驱动程序中使用。请注意 Wireshark 中用于捕获过滤器的语法与用于显示过滤器的语法有很大不同。

捕获过滤器窗口中默认选择的捕获过滤器有助于提供捕获过滤器语法的例子。下表列出了捕获筛选器语法的一些其他示例以及该语法的示例:

|

描述

|

句法

|

例子

|
| — | — | — |
| 过滤以太网 MAC 地址过滤以仅捕获来自或去往 MAC 地址的流量 | 以太主机xx:xx:xx:xx:xx:xx乙醚src或乙醚dst | 以太主机00:1c:25:99:db:85乙醚src 00:1c:25:99:db:85 |
| 根据 IP 地址或主机名进行过滤过滤器仅捕获两个 IP 地址之间的流量仅过滤两台主机之间的单向流量 | 主持人xxx.xxx.xxx.xxx``src主机和dst主机 | host 192.168.1.115``host www.wireshark.org``host 192.168.1.115host 10.1.1.125``src host 192.168.1.115dst host 10.1.1.125 |
| 基于端口号的过滤器 DNS 数据包筛选器 DHCP 数据包过滤器 | portdst portsrc port | port 53``port 67 |
| 基于协议的过滤器仅过滤 HTTP 流量 | arpicmpipupdtcphttpip6icmp6 | http |
| 捕获过滤器逻辑运算符过滤以排除 ARP 和 DNS 数据包 | =!=><>=<=!not&&and&#124;&#124;or | not arpport not 53``! arp && port ! 53 |

关于捕获过滤器的更多信息和示例可以在 Wireshark wiki 上的http://wiki.wireshark.org/CaptureFilters找到,协议特定的捕获过滤器语法包含在位于http://wiki.wireshark.org/ProtocolReference的参考信息中。

捕获选项

Wireshark 捕获选项窗口提供了多种控件来配置捕获以满足特定需求。

捕获文件名和位置

点击文件选项上的浏览按钮,您可以导航到一个选定的目录,您可以在其中存储捕获文件并输入捕获文件的文件名。

当使用 文件选项时,Wireshark 会在您指定的文件名后附加一个文件编号和日期时间戳,并且不会提供文件扩展名。您应该在文件名中指定一个.pcapng扩展名。这可以用一个例子来更好地说明。

用户提供的目录和文件名是C:\Wireshark\long_capture.pcapng,Wireshark 将以C:\Wireshark\long_capture_00001_20140724132952.pcapng的格式创建数据包并保存到文件中。

如果 Wireshark 配置为捕获多个文件(这将在后面讨论),文件编号和日期时间戳将随着捕获的进行而相应增加,例如,long_capture_00002_20140724133343.pcapnglong_capture_00003_20140724133612.pcapng

多个文件选项

Wireshark 可以配置为将数据包保存到多个文件,以允许长期捕获,并提供了许多选项来控制如何实现这一点。

选择使用多个文件选项会使适当的底层控件随着特定选项的启用而激活。当每个文件达到给定的大小和/或经过一段可配置的时间后,您可以选择启动一个新的(下一个)文件。

注意

当处理比 100 MB 大得多的捕获文件时,Wireshark 会变得非常缓慢,甚至可能崩溃,因此您应该将此视为一个很好的最大文件大小。

环形缓冲器

环形缓冲区选项与下一个文件间隔选项协同工作,使 Wireshark 填充指定数量的文件,随着捕获的继续进行,它会删除最旧的文件。

此功能有助于在等待某些间歇性问题或事件发生时保持捕获运行,然后手动停止捕获。环形缓冲区文件提供停止采集之前一段时间的历史采集数据,而不会用过多的大型采集文件填满硬盘。

停止捕获选项

Wireshark 可以选择在指定数量的数据包、文件大小或时间段后自动停止捕获。如果启用了使用多个文件选项,可以使用一个在指定数量的文件后停止捕获的选项。否则,可以在经过指定数量的数据包、文件大小或时间段后停止捕获。

显示选项

实时更新数据包列表选项指定 Wireshark 在捕获期间定期读取正在写入的捕获文件,并相应地更新数据包列表的内容。否则,Wireshark 用户界面将在捕获过程中变灰。

在实时捕获过程中自动滚动选项指定 Wireshark 更新并在数据包列表窗格中显示最新捕获的数据包,这样当列表更新时,数据包似乎会向上滚动。必须启用实时更新数据包列表选项,此选项才能起作用。

这两个选项都有处理时间成本,可能导致数据包丢失和/或显示缓慢,如果在非常繁忙的链路上捕获,则应禁用这两个选项。但是,在捕获过程中,将无法查看和确认预期的数据包流。

Hide capture info dialog 选项(默认启用)控制在捕获期间是否显示一个简单的窗口,显示协议的数据包计数和百分比。除非特别需要,否则最好隐藏此窗口。

名称解析选项

如果启用了 解析 MAC 地址选项,Wireshark 会显示带有指定制造商代码的 MAC 地址,而不是前三个八位字节。比如 Wireshark 会显示 CiscoCon_21:b7:ec 而不是 c8:d7:19:21:b7:ec 。制造商代码列表保存在 Wireshark 安装目录的manuf文件中。

解析网络层名称选项与使用外部网络名称解析器协同工作,以确定是否或如何将捕获的 IP 地址解析为其主机名,如下所示:

  • 解析网络层名称选项指定 Wireshark 应该尝试将 IP 地址解析为主机名。如果启用了使用外部网络名称解析器选项,Wireshark 将对每个唯一的 IP 地址执行反向 DNS 查找。这会导致 Wireshark 产生自己的流量。
  • 如果使用外部网络名称解析器选项被禁用,Wireshark 将尝试使用用户提供的hosts文本文件(使用典型的 IP 地址<tab>主机名语法)解析 IP 地址,该文件在使用默认配置文件时位于 Wireshark 安装目录中,在使用自定义配置文件时位于适当的配置文件目录中。

在捕获期间,最好禁用解析网络层名称选项,以便 Wireshark 在捕获期间尝试解析 IP 地址时不会产生额外的网络流量。在捕获完成后,该功能始终可以临时启用(通过从菜单导航到视图 | 名称解析 | 启用网络层)。

如果启用了解析传输层名称选项,它会使 Wireshark 在数据包列表窗格的信息显示字段中显示人类可读的、特定于端口和协议的服务名称,而不是端口号。例如,TCP 端口 80 将显示为 HTTP。端口号服务列表保存在 Wireshark 安装目录的services文件中。

本节开头的屏幕截图显示了一个设置为使用 LAN 接口的捕获选项窗口,该窗口是一个过滤器,仅用于捕获进出特定以太网 MAC 地址的流量,在环形缓冲区场景中最多保存五个各为 100 MB 的文件,并使用特定的前导文件名和扩展名将这些文件保存在提供的目录中。显示选项名称解析选项保留默认设置。

一旦选择了所有需要的捕获选项,点击开始按钮将开始捕获。

已经介绍了所有最有用的捕获选项功能,现在可能是时候告诉你,对于你的许多捕获,特别是从相对低流量的位置,如从用户工作站,你不希望或不需要设置任何捕获选项(除了从适当的界面捕获),可以通过点击图标栏上的第三个(绿色鲨鱼鳍形状)图标或从捕获菜单中选择开始来简单地使用所有默认设置开始捕获。不使用捕获过滤器可让您捕获所有相关的数据包,不会遗漏任何内容,并在捕获完成后使用显示过滤器过滤掉任何不需要的流量。

验证一次成功的捕获

在捕获完成后,您应该滚动并检查数据包列表窗格中的数据包,以确保您看到的是预期的流量——通常是进出特定主机的流量。

您还应该确保没有数据包丢失,这将显示在 Wireshark 用户界面底部中心的状态栏数据包信息部分。丢弃的数据包表示 Wireshark 或选定的网卡无法跟上流量,不得不丢弃数据包,这当然会影响您的分析质量。如果发生丢包,您可能需要使用性能更高的工作站来执行捕获,或者选择一个流量较低的捕获位置。

保存批量捕获文件

在完成并验证一个良好的捕获后,您应该将批量(所有捕获的数据包)捕获文件(假设单个文件捕获)保存到您选择的目录中。您稍后将过滤数据包的子集并将其保存到一个较小的文件中,但是如果在分析过程中您发现您可能无意中过滤掉了比您想要的更多的数据包,那么稍后能够再次加载原始的捕获文件是非常有利的。

使用文件菜单中的另存为选项,导航至您选择的目录并给文件命名。如果没有指定文件扩展名,Wireshark 将根据选择的另存为类型选项追加一个文件扩展名;默认为.pcapng格式。但是,如果您打算与使用不同协议分析工具的人共享捕获文件,您可以将文件保存为其他几种流行的特定于供应商的格式。

如果使用多个文件和/或环形缓冲区捕获选项之一保存了多个文件,导航到文件 | 文件集 | 列表文件选择并打开其中一个文件。

隔离感兴趣的对话

在完成数据包捕获并保存批量捕获文件后,您将在数据包列表窗格中看到数量惊人的各种类型和地址的数据包。现在是时候将它分解成只与手头的分析任务相关的数据包了。

这个想法是逐步消除不相关的数据包;分析相关对话,寻找异常情况;并再次逐步过滤、测量和分析数据包流量和应用行为,直到您发现并记录问题的根本原因。

有两种基本方法来隔离和检查感兴趣的数据包和对话,您可能会在大多数分析活动中使用以下两种方法:

  • Conversations :该窗口根据 MAC 或 IP 地址和/或 TCP/UDP 端口创建可排序的对话对列表。它显示过滤器,这些过滤器将隔离并仅显示可以从该窗口快速应用的选定会话数据包。
  • 显示过滤器:这些过滤器基于 MAC 或 IP 地址和/或协议特定字段,限制在数据包列表窗格中显示的数据包。

我们将在下面的小节中讨论这些方法。

使用对话窗口

使用对话窗口的基础知识在第一章了解 Wireshark 的第一次捕获中已经讲述过。在这一节中,我们将介绍对话窗口的其他一些便利特性。

以太网选项卡

根据可用的名称解析设置, 对话窗口展示了以太网选项卡中的特定行为。如果名称解析菜单(可在视图菜单中找到)中的启用网络层,并且名称解析也在对话窗口中启用,则与给定设备的 MAC 地址相关联的 IP 地址显示为 IP 地址,而不是 MAC 地址。在这种情况下,切换名称解析选项有助于轻松将设备的 IP 地址与其 MAC 地址相关联。

如果启用网络层选项未启用,则对话窗口中的名称解析选项控制 MAC 地址是显示制造商前缀还是显示为基本的 6 位八位 MAC 地址。

TCP 和 UDP 选项卡

对话窗口的 TCPUDP 选项卡列出了所有基于 IP 地址和端口的设备之间的对话。考虑到一对设备之间的网络通信,每个设备都有其相关联的 IP 地址,可能包括具有不同端口号的多个连续或同时的会话, TCPUDP 选项卡(取决于所使用的协议)使得检查这些单独会话的数量、相对大小以及开始/持续时间变得更加容易。

正如在对话窗口的任何其他选项卡中所做的那样,使用右键单击功能可以快速准备或应用显示过滤器。

在调查 TCP 或 UDP 会话时,一个有用的做法是最初仅对 IP 地址应用显示过滤器,然后在对话窗口底部启用限制以显示过滤器选项。在返回到 TCPUDP 选项卡时,仅显示过滤后的主机对之间的端口级会话,这使得调查这些会话比从整个列表中挑选它们容易得多。

下面的屏幕截图显示了在应用显示过滤器(来自批量捕获文件)并在对话窗口中启用限制显示过滤器选项后,加载https://www.wireshark.org/主页所涉及的多个 TCP 会话。可以看到,用户工作站上的端口 54581 和端口 80 (HTTP)之间的(top)会话承载了绝大部分流量;其余港口的运输量要小得多。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_07.jpg

无线局域网选项卡

由于 对话窗口标签是按字母顺序排列的,无线局域网标签排在最后。该选项卡显示无线站 MAC 地址,以及字节数据包,以及其他选项卡中提供的其他列。

Wireshark 显示过滤器

Wireshark 提供了非常广泛的特定于协议的显示过滤器,通过允许您根据您定义的标准专注于特定的数据包,这些过滤器对于分析活动非常有用。您可以只过滤您想要查看的流量,也可以过滤不需要的流量。显示过滤器是 Wireshark 最有用的功能之一,因此应该非常熟悉。

显示过滤器可通过多种方式创建:

  • 通过从显示过滤器窗口应用显示过滤器

  • 通过键入显示过滤器语法(使用自动完成)

  • 通过从对话(或端点)窗口应用显示过滤器

  • 通过应用过滤器表达式按钮中保存的显示过滤器

  • 使用表达式按钮帮助创建过滤器

  • Using right-click menus on specific packet fields

    Note

    Please remember that the display filter uses a proprietary Wireshark filter format, which depends on the protocol and is quite different from the capture filter syntax.

显示过滤窗口

分析菜单中选择 显示过滤器,点击图标栏上的编辑/应用显示过滤器图标,或者点击显示过滤器栏上显示过滤器文本框旁边的过滤器按钮,即可打开显示过滤器窗口。

Display Filter 窗口的外观和功能与 capture filters 窗口相似,如下图所示。通过输入过滤器名称和适当的语法并点击新建或点击现有过滤器,您可以创建一个新的自定义显示过滤器添加到该窗口。点击新建,根据您的要求修改/重命名。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_08.jpg

此窗口中列出的显示过滤器保存在默认配置文件的 Wireshark 安装目录中的dfilters文件中,当使用自定义配置文件时,保存在适当的个人配置目录中。

当您应用显示过滤器时,Wireshark 用户界面屏幕底部的状态栏会反映数据包总数和显示的数据包,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_09.jpg

显示过滤语法

先前显示的显示过滤器窗口中的捕获过滤器默认选择提供了基本捕获过滤器语法的示例。下表列出了显示筛选器语法的其他示例:

|

描述

|

句法

|

例子

|
| — | — | — |
| 基本协议 | arpbootpdnsdhcp6ethsnmpsmbsmb2icmprtpipipv6udptcphttpsip | 与语法示例相同 |
| 显示过滤器比较运算符 | eq==ne!=gt>lt<ge>=le<=!notand&&or&#124;&#124;XOR^^ | ip.addr == 192.168.1.115!(ip.addr == 192.168.1.125) |
| 特定于协议的扩展 | 特定于协议 | ip.addrtcp.porttcp.dstporttcp.analysisudp.portudp.srcport |
| IPv4 地址上的无类域间路由 ( CIDR )符号 | A.B.C.D/CIDR符号 | ip.addr == 192.168.1.0/24匹配192.168.1.0子网中的任何 IP 地址 |

注意

在诸如eth.addrip.addrtcp.portudp.port等表达式上使用!=操作符可能不会像预期的那样工作,因为一个数据包中通常有两个地址和端口,并且!操作符不会匹配两个实例。

对这些类型的过滤器使用! ( ip.addr == x.x.x.x)或类似的语法。

更多信息和显示过滤器示例可以在 http://wiki.wireshark.org/DisplayFilters的 Wireshark wiki上找到,协议特定的显示过滤器语法包含在 http://wiki.wireshark.org/ProtocolReference的参考信息中。

输入显示过滤器

您可以在显示过滤器栏的过滤器文本框中直接输入显示过滤器语法,然后点击应用应用过滤器或清除清除过滤器并重新开始。

在文本框中键入显示过滤器语法的一个有用功能是自动完成功能。在键入协议和句点(.),文本框将显示可选择的可用协议相关扩展的列表,然后在点击应用之前显示适当的比较运算符和值。

文本框还有一个颜色编码的背景,指示显示过滤器语法状态。如果语法不正确或不完整,背景为红色,而正确的过滤器会产生绿色背景。黄色背景是警告,表示输入的语法可能无法按预期工作。

从对话或端点窗口显示过滤器

创建一个从对话窗口应用的显示过滤器已经被讨论过了。从统计菜单中选择终点列表和其中一个列出的协议,即可从的终点窗口中获得相同的功能。

过滤表达式按钮

筛选表达式按钮是您可以基于显示筛选器创建的按钮;这些可用于将先前保存的显示过滤器快速应用于您的捕获数据,以识别网络和应用问题。

例如,创建一个过滤器表达式按钮选项,只显示 TCP SYNSYN/ACKFINRST 数据包到分析 TCP 会话设置参数、网络往返延迟时间和会话终止:

  1. 显示过滤条 :

    (tcp.flags&02 && tcp.seq==0) ||  (tcp.flags&12 && tcp.seq==0) || (tcp.flags.ack && tcp.seq==1 && !tcp.nxtseq > 0 && !tcp.ack >1)  || tcp.flags.fin == 1 || tcp.flags.reset ==1
    

    上的过滤文本框中输入以下显示过滤字符串

  2. 点击应用会将此过滤器应用到您已加载的捕获,以便您可以确认它是否正常工作。

  3. 然后,点击保存,给按钮起个名字,比如TCP Handshake(如下图截图所示)。然后,点击确定 :https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_10.jpg

您创建的筛选表达式按钮将出现在显示筛选栏中初始控件的右侧,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_11.jpg

过滤器表达式按钮定义存储在您正在使用的配置文件的首选项文件中。您可以在 Wireshark 的首选项窗口中编辑按钮显示顺序、编辑名称或过滤器语法,或者删除按钮。

使用表达式窗口按钮

显示过滤器工具栏上文本框的右侧是表达式按钮。点击此按钮打开一个过滤器表达式窗口,允许您选择一个协议和该协议的扩展,一个合适的关系(比较)运算符,并指定一个比较值。点击确定用结果显示过滤器语法填充显示过滤器文本框,然后点击应用应用过滤器。

右键单击特定数据包字段上的菜单

如果您在数据包列表数据包详细信息窗格中的特定字段上单击鼠标右键,您可以选择应用为过滤器准备过滤器选项和所需的子菜单选项来创建显示过滤器语法,如下图所示。这是创建显示过滤器语法的一种非常快速的方法:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_12.jpg

如果您正在选择一个字段并使用右击功能创建显示过滤器语法,通常最好使用准备过滤器选项,这将允许您在点击应用应用过滤器之前编辑语法。

注意

点击数据包详情窗格中的协议字段,该字段和反映该字段的显示过滤语法将显示在左下方的状态栏字段中。这对于启动将使用特定字段的显示过滤器字符串非常有帮助。

跟随 TCP/UDP/SSL 流

在对话中选择一个数据包,单击鼠标右键,并从菜单中选择跟随 TCP 流跟随 UDP 流跟随 SSL 流选项(视情况而定)会提供一个显示窗口,其中包含对话中所有数据包的有效载荷数据的文本描述。这是检查流内容的一个很好的方法,不需要选择和检查多个包。查看客户端和服务器之间的交换对于故障排除非常有帮助。

当为给定分组选择了跟随流选项时,显示过滤器被自动创建并应用来支持该窗口的创建。下面的截图展示了一个跟随 TCP 流窗口。另外,请注意显示过滤器语法( tcp.stream eq 15 ),它是在选择该流时创建和应用的:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_13.jpg

标记和忽略数据包

您可以从 Wireshark 编辑菜单中切换标记/取消标记数据包忽略/取消忽略数据包,或者通过在数据包列表窗格中右键单击数据包并选择标记数据包(切换)忽略数据包(切换)

数据包列表窗格中右键点击一个数据包所显示的菜单如下截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_14.jpg

Wireshark 允许您在数据包列表窗格中标记一个或多个数据包,通过将数据包条目设置为黑底白字,便于以后查找这些数据包。此标记可以在每个数据包的基础上切换打开和关闭。标记数据包对显示或数据包上下文没有其他影响。

您也可以忽略一个或多个数据包。然而,当您对数据包调用忽略功能时,该数据包条目从数据包列表数据包细节数据包字节窗格中消失,并且它实际上(暂时)不再是捕获文件的一部分。请注意,忽略数据包可能会导致 Wireshark 报告重新传输或由丢失的数据包引起的其他错误情况。

被忽略的数据包实际上并没有从捕获文件中删除,因为您可以使用视图菜单中的重新加载选项或点击图标栏上的重新加载图标来恢复被忽略的数据包。

保存过滤后的流量

在期间或完成分析后,您可能希望将一组过滤后的数据包保存到一个新的捕获文件中。在 Wireshark 中保存批量捕获数据的过滤子集并打开新的更小的文件,有助于减少在您的分析过程中清除显示过滤器、使用对话窗口等时显示的令人分心的背景噪音包。最后,在完成您的分析后,您将需要一个经过过滤的捕获文件来表示分析证据和结论,并且可以在以后快速加载以供审查。

使用文件菜单中的导出指定数据包选项保存一个新的捕获文件,该文件只包含您过滤的数据包。导航到所需的目录;输入文件名(Wireshark 将提供适当的文件扩展名);做出适当的选择,保存所有显示的数据包、标记的数据包,和/或删除忽略的数据包;然后点击保存。记得使用文件菜单中的另存为选项保存完整的捕获,因为您可能会再次需要该文件。

以下屏幕截图显示了典型的导出指定数据包窗口及其选择:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_03_15.jpg

总结

本章涵盖的要点包括选择最佳捕获点、在分路器和镜像/SPAN 端口之间进行选择、Wireshark 的捕获过滤器和选项、验证良好的捕获、使用 Wireshark 的对话窗口和显示过滤器来隔离感兴趣的数据包、创建过滤器表达式按钮、标记和忽略数据包,以及保存过滤后的流量以供以后或更详细的分析。

在下一章中,我们将介绍 Wireshark 的其他基本数据包分析功能。

四、配置 Wireshark

Wireshark 提供了许多功能,可以对这些功能进行配置,以提高执行数据包分析活动的准确性和简便性,例如排除功能或性能问题。选择最佳格式来测量数据包之间的经过时间是一个重要因素。有许多特定于协议的选项会影响 Wireshark 显示时间相关信息的方式,这些选项也很有用。通过着色规则、首选项设置和配置文件,您可以针对您的特定分析风格以及您可能工作的不同环境定制 Wireshark。

在本章中,我们将讨论以下主题:

  • 使用数据包时间戳
  • 着色和着色规则
  • Wireshark 首选项
  • Wireshark 档案

这些主题将总结我们对 Wireshark 最基本、最有用的功能和选项的介绍。

使用数据包时间戳

理解【Wireshark 如何处理时间并正确使用数据包时间戳显示对于正确分析数据包流和识别与时间相关的异常至关重要。

【Wireshark 如何保存时间戳

当数据包被捕获时,Wireshark 会给每个数据包一个时间戳,该时间戳来自捕获发生的机器的系统时钟。基于从时区设置和任何适用于捕获机器的夏令时 ( DST )规则计算的偏移量,该时间戳被转换为通用协调时间 ( UTC ),然后再次转换为纪元编号(自 1970 年 1 月 1 日起基于 UTC 的秒数)。这是保存在每个数据包的捕获文件中的时间值。当 Wireshark 读取捕获文件时,它会将纪元编号变回熟悉的日期和时间显示,并根据您机器的时区和 DST 偏移量进行调整。

这意味着如果在洛杉矶的一台机器上捕获数据包,该机器与 UTC 有-8 小时的偏差,而您在柏林的一台机器上查看相同的捕获文件,该文件是 UTC +1 小时(总共相差 9 小时,加上任何 DST 差异),在洛杉矶当地时间上午 10 点捕获的数据包将显示柏林时间下午 7 点的时间戳。

下表显示了不同时区的时间戳显示示例:

|   |

洛杉矶

|

伦敦

|

柏林

|

班加罗尔

|
| — | — | — | — | — |
| 捕获文件时间(UTC) | ten o’clock | ten o’clock | ten o’clock | ten o’clock |
| 相对于 UTC 的本地偏移量 | -8 | Zero | +1 | +5:30 |
| 显示时间(当地时间) | two o’clock | ten o’clock | eleven o’clock | half past five p.m. |

如果您要查看某人发送给您的数据包捕获,并且事件发生的绝对时间对分析很重要,您需要知道或询问捕获发生在哪个时区,确定您所在时区和捕获位置时区之间的时差,并在心里为 Wireshark 将显示的时间戳进行时差调整。否则,这种差异就无关紧要了,因为您通常对经过的时间或捕获中特定事件之间的时间更感兴趣。

Wireshark 时间显示选项

Wireshark 中有各种各样的数据包时间显示。默认情况下,Wireshark 在数据包列表窗格中提供了一个时间列,配置为显示从开始捕获开始的秒,每个数据包的分辨率为微秒(123.123456)。

但是,可以通过从视图菜单中的时间显示格式选项中选择所需的格式来改变时间在该栏中的显示方式,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_01.jpg

如果使用了从捕获开始的 秒,则捕获中的第一个数据包显示的时间值为0.000000**;所有其他数据包都参照第一个数据包计时,以便显示从捕获开始经过的时间。**

时间显示菜单选项提供了它们的格式的例子,并且是不言而喻的,除了从先前捕获的包开始的秒和从先前显示的包开始的秒。自上一次捕获数据包后的选项提供了每个捕获数据包之间的经过时间,而自上一次显示数据包后的选项显示了应用显示过滤器后可见的上一个数据包的经过时间。

下面的截图展示了显示的数据包选项的工作方式。您可以看到捕获的数据包时间戳继续增加,而显示的数据包时间戳显示自上次显示数据包以来的时间。

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_02.jpg

时间显示格式菜单中的时间显示精度选项也与显示格式的示例一起显示,并且不言自明,除了**自动(文件格式精度)**设置需要说明。

Wireshark 依靠网卡驱动程序和捕获设备的系统时钟来获取数据包时间戳。这些时间戳在精度和亚秒数字数(毫秒、微秒和纳秒)方面的准确性会有所不同,但通常可以达到毫秒级的分辨率。该精度值保存在捕获文件中。**自动(文件格式精度)**设置告诉 Wireshark 使用该精度值显示时间戳。

使用纳秒精度设置的能力依赖于支持这种精度级别的 NIC 驱动程序。如果选择此选项,并且捕获文件不包含更高的分辨率,则每个时间戳的最后三位数字将全为零。

添加时间栏

数据包列表窗格中有两个(或更多)时间栏通常有助于提供多种时间显示类型,而不必来回改变单个时间栏的格式。您可以使用两种方法之一添加新的时间列。

下面的是第一种方法,首选项设置方法:

  1. 编辑菜单进入偏好设置,或者点击偏好设置图标打开偏好设置窗口。
  2. 选择
  3. 点击添加在列表底部添加一个新条目。
  4. 点击新条目的标题区域,并为该列命名。
  5. 确保新条目高亮显示,并从下拉字段类型框中选择所需的时间显示格式。
  6. 点击并在列表中向上拖动新条目,选择其在数据包列表窗格中的相对位置。
  7. 最后,点击确定

时间显示栏的字段类型框中的可选选项包括:

  • 绝对日期,如 YYYY-MM-DD,和时间:这是基于采集设备时区的实际采集日期和时间。
  • 绝对日期,如 YYYY/DOY,和时间:这是另一种根据采集设备的时区显示日期和时间的格式。
  • 相对时间:这是从捕获文件中第一个数据包开始的时间。这类似于从开始捕获选项后的秒。
  • 相对时间(会话):这是从会话的跟踪文件中的第一个数据包开始的时间(这不起作用)。
  • Delta time :这是从前一个数据包到当前数据包经过的时间。
  • Delta time (conversation) :这是一个对话中从上一个包到当前包的时间(这个不行)。
  • 显示的时间差:这是从一个数据包结束到下一个显示的数据包结束的时间。
  • 自定义:在撰写本文时,首选项设置中列出的相对时间(对话)增量时间(对话)选项在当前可用的 Wireshark 版本(1.12)中不再有效。您可以通过使用带有显示过滤器样式的字段类型的自定义选项来实现先前提供的功能。选择自定义字段类型,在字段名字段中输入tcp.time_relativetcp.time_delta,保留字段出现字段的默认条目为 0

使用自定义选项和 tcp.time_delta 显示过滤器创建功能性 Delta time (conv) 时间列的示例如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_03.jpg

为了使 tcp.time_relativetcp.time_delta 字段正常工作,您还必须使用以下步骤在首选项设置中启用计算对话时间戳:

  1. 首选项窗口中,从协议菜单中选择 TCP
  2. 启用计算对话时间戳选项。
  3. 最后,点击确定

下面的屏幕截图显示了启用计算对话时间戳的示例:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_04.jpg

下面的步骤向您展示了第二种方法,即添加列的右键单击方法:

  1. 数据包列表窗格中选择合适的数据包。
  2. 数据包细节窗格中,展开报头,或者如果适用,展开传输控制协议报头。
  3. TCP 部分找到所需的时间值字段(这些被括号包围)。如果您在 TCP 部分选择一个时间值,您需要展开**【时间戳】**部分来查看这些值。
  4. 右键单击所需的时间字段,并从菜单中选择应用为列
  5. 新列将出现在数据包列表窗格中的信息列旁边。单击并拖动新列到所需位置。
  6. 您可以右键单击新的列标题,选择 Edit Column Details ,并根据需要为该列取一个较短的名称。

正如前面在首选项设置方法中讨论的,您必须在首选项设置的 TCP 协议选项中启用计算会话时间戳,以查看和使用 TCP 部分中的时间值。

对话与显示的数据包时间选项

对话显示的时间与显示的分组时间选项之间的差异可能是微妙但重要的。

如前所述,如果您正在使用显示的数据包时间选项之一,则给定数据包显示的时间值将是自前一个数据包显示在数据包列表窗格中以来经过的时间。在应用显示过滤器之前,这个时间值选项没有任何有用的价值,在应用过滤器之后,您可以很容易地看到显示每个数据包之间经过的时间,而不需要其他心算或调整。如果您使用 tcp.stream==xx 显示过滤器设置来依次过滤、清除和查看多个对话,这将非常有用。

但是,如果您没有使用显示过滤器,可能会有来自多个对话的数据包显示在数据包列表窗格中。如果您正在使用某个对话时间显示,则为给定数据包显示的时间值将是自该对话的上一个数据包以来经过的时间,而不考虑您正在查看的数据包和该对话中的上一个数据包之间可能散布和可见的其他数据包。这允许快速浏览对话包时间,而不必应用显示过滤器。

选择最佳 Wireshark 时间显示选项

有这么多时间显示选项可用,可能很难知道何时何地使用给定的选项。在 Wireshark 时间列中选择最佳时间显示在很大程度上取决于分析的目标:

  • 如果您需要知道某个事件在捕获中发生的具体日期和时间,就像您试图查找数据包并将其与用户报告的事件或日志条目相关联时可能出现的情况一样,您应该使用其中一种绝对时间格式。
  • 如果您正在查找在捕获开始后某个已知时间段发生的事件,请使用相对时间格式之一。
  • 另一方面,如果您只需要测量某些数据包之间的时间,比如测量请求和响应之间的时间,那么一种增量时间格式将是最有用的。

使用时间参考选项

Wireshark 的另一个有用的特性是时间参考菜单选项,它可以用来测量捕获文件中从一个数据包到另一个数据包的时间。您可以点击一个特定的数据包,使用编辑菜单中的设置/取消设置时间参考选项,或右击并从弹出菜单中选择设置时间参考(切换)选项,为该数据包打开和关闭该选项。数据包将在第一个时间栏中标记一个 REF 标志符,任何跟在时间参考数据包后面的相对时间戳将相对于该数据包显示。

时间基准设置是临时的;它不会保存到采集文件中,如果您重新载入该文件,它将会消失。

着色和着色规则

数据包列表窗格中显示的数据包的彩色化可以有效地识别和突出显示感兴趣的数据包,尤其是包含或指示某种错误情况的数据包。

Wireshark 具有默认启用的预定义着色规则,这些规则可以在数据包列表窗格中产生彩色数据包的万花筒。您可以通过从视图菜单中选择着色数据包列表或点击图标栏中的着色数据包列表图标来启用或禁用着色规则。

您还可以通过从视图菜单中选择着色规则或点击图标栏中的编辑着色规则图标来查看、启用/禁用、添加、删除、重新排序和编辑着色规则。有一个清除按钮,可以删除您对规则所做的所有更改,并在需要时将其恢复为默认设置。

下面的屏幕截图显示了一个着色规则窗口:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_05.jpg

着色规则采用具有特定值的显示过滤器格式来识别应该着色的数据包。这些规则与数据包进行比较,从顶部的规则开始,向下遍历列表。只有第一个符合数据包条件的规则会被套用,所以如果有一个以上的规则符合数据包,规则的顺序会决定要套用哪个规则。如果您创建或修改一个规则,您必须检查顺序,以确保您得到了想要的行为。

点击一个规则,然后点击 Edit 允许您修改该规则的前景色和背景色,如果需要,还可以更改过滤器字符串。

如果您想与他人共享,也可以导出/导入颜色规则。根据使用的配置文件,着色规则存储在您的个人配置目录中的一个名为colorfilters的文件中。

包着色

您还可以通过选择一个对话包,从查看菜单中选择为对话着色,并从相邻菜单中选择一种颜色,或者右键单击一个包,从菜单中选择为对话着色,选择一个特定于协议的选项,然后选择所需的颜色,来对对话中的一系列包进行临时着色。当捕获文件重新加载时,这种着色将消失,或者您可以从视图菜单中选择重置着色 1-10

Wireshark 首选项

添加时间栏部分,我们使用编辑菜单中的首选项或者通过点击图标栏中的首选项图标来配置时间显示栏选项,打开了首选项窗口。您应该了解许多首选项选项,并且可能希望调整这些选项来定制您的 Wireshark 环境:

  • 布局:此用于选择包列表包细节包字节窗格的排序。

  • :该用于在包列表窗格中添加、删除、移动列。

  • 捕获:该用于设置默认捕获选项。

  • 过滤表达式:该用于添加、删除或移动过滤表达式按钮。

  • 名称解析:此用于设置 MAC、传输和网络(IP)解析选项。

  • 协议:Wireshark 支持的所有协议都有可以设置的选项;其中一些最重要和最有用的选项包括:

    • HTTP :这个用于添加任何额外的 TCP 端口,这些端口应该在您的环境中被识别为 HTTP 流量。

    • IEEE 802.11 :此用于添加/编辑无线解密密钥,如果需要对加密的无线会话进行解码。

    • IPv4 :您可能想要禁用**验证 IPv4 校验和(如果可能的话)**以避免由一个名为校验和卸载的 NIC 选项导致的意外错误消息,其中校验和在数据包发送到 Wireshark 后进行检查。

    • RTP :启用允许子分配器重组 RTP 流以支持解码来自 VoIP 捕获的音频。

    • SMB :启用重组 SMB 事务负载以支持在数据包捕获中从 SMB 流导出文件对象。

    • SSL :如果您有私钥文件,Wireshark 可以解密 SSL/TLS 流量。要向 Wireshark 添加密钥,请转到首选项窗口,并单击 RSA 密钥列表编辑按钮。然后,在 SSL 解密窗口中,点击新建,完成 SSL 解密:新建字段(SSL 服务器的 IP 地址端口,HTTP 通常为 443;协议,如 HTTP 以及密钥文件,用于选择 RSA 私钥的路径(如果密钥文件是 PKCS#12 密钥库(通常有.pfx.p12扩展名),则必须填写密码字段),最后,点击 OK 关闭每个后续窗口。

    • TCP :此为您提供多个选项,如下:

      • 如果可能的话验证 TCP 校验和:禁用此选项,以避免校验和卸载导致意外错误消息。
      • 允许子分配器重组 TCP 流:启用以支持从 TCP 流导出文件对象。
      • 相对序列号:启用以便于读取和跟踪捕获文件中的 TCP 序列号。
      • 传输中的轨道字节数:这是在数据包详细信息窗格的 TCP 协议报头中计算并显示的值,对性能分析很有用。
      • 计算会话时间戳:这个是之前讨论过的设置,需要支持 tcp.time_relativetcp.time_delta 时间显示。

还有许多其他偏好设置可能与您的个人偏好或分析环境有关;你必须调查这些选项中的大部分或全部。如果您不确定某个特定的设置,您可以通过点击首选项窗口底部的帮助按钮获得更多信息。

首选项设置存储在一个名为preferences的文件中,该文件位于您的个人配置目录中,具体取决于所使用的配置文件。

Wireshark 档案

由于我们已经在中介绍了保存在特定文件中的众多 Wireshark 配置选项,例如捕获过滤器cfilters显示过滤器dfilters着色规则colorfilters以及首选项设置的preferences,我们提到这些文件保存在您的个人配置目录之一中,但是我直到现在都没有对配置文件和这些配置目录进行完整的解释,以便您更好地理解配置文件的组成

配置文件是 Wireshark 配置文件的集合,这些文件是根据您的特定需求和喜好定制的,包括捕获和显示过滤器、颜色规则、列和布局等,适用于您所工作的特定环境。您可以创建一个或多个配置文件,并通过选择适当的配置文件来快速重新配置 Wireshark,使其在不同的环境中发挥最佳作用。

当您第一次安装 Wireshark 时,它使用位于全局配置目录中的一组默认配置文件运行,该目录通常与 Wireshark 程序文件所在的系统目录相同。当您更改任何默认设置时,更改会保存在新的配置文件中,这些文件存储在个人配置目录中,该目录的位置因您的安装而异。通过点击帮助菜单中的关于 Wireshark 选项,并点击文件夹选项卡,您可以从 Wireshark 确定并快速打开个人配置目录。该选项卡中列出了 Wireshark 使用的所有目录,如以下屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_06.jpg

您可以双击 Wireshark 目录链接,打开该目录的窗口。

双击文件夹选项卡中的个人配置链接,打开存储您的自定义配置文件的目录(在profiles子目录下)。每个配置文件都存储在一个单独的子目录中,该子目录反映了您为配置文件指定的名称,如下面的屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_07.jpg

每个自定义profile目录包含所有 Wireshark 配置文件,这些文件决定了配置文件如何控制 Wireshark 的功能。您可以复制这些自定义配置文件目录,并与其他 Wireshark 用户共享;将profile目录复制到他们的个人配置目录中,使得该配置文件可供选择。

创建 Wireshark 档案

要创建新的 Wireshark 配置文件,请执行以下步骤:

  1. 右键单击 Wireshark 用户界面底部状态栏配置文件部分(在右侧窗格上),然后单击新建,或者导航到菜单栏中的编辑 | 配置文件 | 新建
  2. 在出现的创建新配置文件窗口中,您可以为配置文件命名。您也可以从创建自下拉列表中进行选择,从现有配置文件的设置开始创建配置文件,或者从头开始。新建档案窗口如下截图所示:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_08.jpg
  3. 点击确定将在个人配置菜单中以您的Profiles目录中的相同名称将新的个人资料保存在其自己的目录中。

选择 Wireshark 配置文件

您可以从编辑菜单中选择配置配置文件,点击其中一个列出的配置文件,然后点击确定,从而选择一个自定义配置文件。更快捷的方法是点击状态栏配置文件部分,并从弹出菜单中选择一个配置文件,如以下截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_04_09.jpg

总结

本章涵盖的主题包括使用 Wireshark 的时间显示、着色和着色规则、为给定的分析环境选择合适的 Wireshark 首选项,以及将所有这些设置保存在可根据需要选择的配置文件中。

在下一章中,我们将介绍现代网络中常用的网络层、传输层和应用层协议,这将有助于您为后面章节中更高级的数据包分析活动做准备。

五、网络协议

有效的数据包分析需要熟悉现代网络中使用的主要协议。在本章中,我们将回顾各层中最常见的协议:

  • 网络层协议
  • 传输层协议
  • 应用层协议

我们将介绍支持每种协议的网络连接和/或应用功能的重要目的和相关领域,以及每种协议的 Wireshark 捕获和显示过滤器示例。

OSI 和 DARPA 参考模型

我们在第 2 章数据包分析人员网络中回顾了 OSI 和 DARPA 参考模型的用途。下图中重复了这些协议层的可视化描述,作为对一些主要协议的参考和总结,以及它们在各自层中的位置:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_01.jpg

网络层协议

网络层协议,在 DARPA 参考模型中也称为互联网层协议,提供基本的网络连接和互联网通信服务。在这一层中,您将主要发现 IP 协议与 ARP、IGMP 和 ICMP 一起用于通过网络传输数据包。

我们在第 2 章数据包分析人员的网络中已经介绍了 IP 和 ARP 协议数据包报头结构和字段,因此这些信息不再重复。但是,此处提供了基本的 Wireshark 捕获和显示过滤器,以下部分还提供了其余协议:

Wireshark IPv4 过滤器

捕获 滤镜 : ip

显示过滤器 : ip ip.addr==192.168.1.1 ip.src== ip.dst== ip.id > 2000

Wireshark ARP 过滤器

捕获 滤镜 : arp

显示过滤器 : arp arp.opcode==1 arp.src.hw_mac==00:1c:25:99:db:85

互联网群组管理协议

主机使用 互联网群组管理协议 ( IGMP ) 向相邻路由器通知已建立的多播(一对任意)群组成员关系。换句话说,IGMP 使提供内容(视频馈送)的计算机能够使用一组多播地址范围(在224.0.0.0239.255.255.255D 类多播范围内)向分布式用户组提供这样的内容。此多播功能依赖于能够支持此服务并被配置为支持此服务的路由器;客户端必须加入多播组。当主机想要开始多播时,它向指定该特定组的多播 ip 地址的224.0.0.2(所有多播路由器)地址发送 IGMP 成员报告 消息。希望加入或离开该组的客户端(以便他们可以接收多播内容)向路由器发送 IGMP 加入或离开消息。下表显示了各种地址范围:

|

起始地址范围

|

结束地址范围

|

描述

|
| — | — | — |
| 224.0.0.0 | 224.0.0.255 | 这些是为特殊的众所周知的多播地址保留的 |
| 224.0.1.0 | 238.255.255.255 | 这些是全球范围(互联网范围)的多播地址 |
| 239.0.0.0 | 239.255.255.255 | 这些是本地范围和管理的多播地址 |

以下截图显示了 IGMP 协议报头中的重要字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_02.jpg

IGMP 协议报头中前面的重要字段包括:

  • 类型:这是一种 IGMP 报文。22 型是 IGMPv3 成员报告
  • 记录类型:有不同类型的组记录记录类型 3 的值是改变为包括模式,这指示来自源设备的内容将由多播路由器转发到组内主机。
  • 组播地址:这是特定组的组播 IP 地址。

您还应该注意先前协议层中的以下有趣字段:

  • 以太网帧目的地 MAC 地址是多播 MAC 地址范围(01:00:5e:00:00:00 – 01:00:5e:7f:ff:ff)中的一个
  • IP 报头中的协议字段指定了 IGMP 2
  • IP 层目的 IP 地址为224.0.0.22,是预留的 IGMPv3 组播 IP 地址

IGMP 协议有多个版本,相当复杂。有关更多信息,请参考本章开头提供的协议参考。

Wireshark IGMP 过滤器

捕获 滤镜 : igmp

显示过滤器 : igmp igmp.type==0x22 igmp.record_type==4 igmp.maddr==244.0.1.60

互联网控制消息协议

互联网控制消息协议 ( ICMP )是,被路由器等网络设备用来发送错误消息,指示所请求的服务不可用,或者无法到达主机或网络路由器。ICMP 是一种控制协议。这意味着,尽管它是以 IP 数据报的形式传输的,但它并不携带应用数据,而是携带有关网络本身状态的信息。

ICMP ping

ICMP 最广为人知的用途之一是 ping,其中一个设备发送一个 ICMP 回应请求(类型 8代码 0 )数据包到一个远程主机(通过该主机的 IP 地址),该主机将(如果 ICMP 服务没有被中间防火墙禁用或阻止)响应一个 ICMP 回应回复(类型 0代码 0 )数据包。Pings 用于确定目标主机是否可用,是否可以通过网络到达。通过测量 ping 请求和回复之间的时间间隔,我们知道了网络路径上的往返时间 ( RTT ) 延迟时间。

ICMP 跟踪路由

ping 功能的变体用于执行跟踪路由(也称为 traceroute),它是数据包从发送设备到目标主机或设备所经过的路由器接口的 IP 地址列表。跟踪路由用于确定或确认从发送设备到目标主机或设备的网络路径。

跟踪路由是通过向远程主机发送 ICMP 回应请求数据包来完成的,就像普通的 ping 一样,但是要修改每个数据包的 IP 报头中的 生存时间 ( TTL )字段。traceroute 功能利用了这样一个事实,即网络路径中的每个路由器都会将数据包的 TTL 值递减 1,因此当数据包经过时,路径中的路由器和 TTL 值也会随之递减。如果路由器收到 TTL 值为 1 的数据包,它将向发送方发回一条 ICMP TTL 传输中超时( Type 11Code 0 )错误消息(以及它收到的请求数据包的副本),否则将丢弃(不转发)该数据包。

traceroute 的工作方式是将多个 ICMP 请求数据包中的 TTL 依次设置为 1、2、3 等,这导致网络路径中的每台路由器都向发送方发回 TTL 超出错误消息。由于这些返回的消息是由路径内路由器使用收到 ICMP 数据包的接口的 IP 地址发送的,因此 traceroute 实用工具可以构建并显示路径中路由器接口 IP 地址的渐进式列表,以及到每台路由器的 RTT 延迟。

ICMP 控制消息类型

下表提供了最常见的 ICMP 控制消息类型的样本,包括它们的类型和代码(子类型)号:

|

类型

|

密码

|

描述

|
| — | — | — |
| Zero | Zero | 这表示回应回复(ping) |
| three | Zero | 这表示目标网络不可达 |
| three | one | 这表示目标主机不可达 |
| three | four | 这表示需要碎片和不碎片位设置 |
| three | six | 这表示目标网络未知 |
| three | seven | 这表示目标主机未知 |
| five | Zero | 这表示网络的重定向数据报 |
| five | one | 这表示主机的重定向数据报 |
| eight | Zero | 这表示回应请求(ping) |
| Eleven | Zero | 这表示 TTL 在传输过程中过期(见于 traceroutes) |

下图所示的 ICMP 数据包的 Wireshark 数据包详细信息字段显示了一条超过生存时间的消息,如典型的 traceroute 捕获所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_03.jpg

以下几点对于分析该数据包非常重要:

  • IPv4 报头摘要中看到的源 IP 地址是 10.192.128.1 ,这是向发起方发送 ICMP 报文的路由器接口的 IP 地址 192.168.1.115
  • ICMP 数据包是类型 11代码 0 (传输中超过 TTL)

跟在第一个 IPv4 和 ICMP 报头之后的第二组 IP v4 和 ICMP 报头是由发送者发送的原始分组的副本。该副本被返回以允许确定导致 ICMP 消息的数据包。此 ICMP 消息副本的数据包详细信息中的要点包括:

  • 目标目的地 IP 地址是205.251.242.51,echo 请求包将被发送到该地址(如果 TTL 值没有被更改的话,应该是该地址)。
  • 当这个数据包到达10.192.128.1路由器接口时,TTL 值为 1 。此数据包无法转发,导致超过 TTL 的消息被发送回发送方。
  • 最初的 ICMP 数据包是一个类型 8代码 0 的回应请求消息。
  • 回应请求和回复的 ICMP 数据包的报头数据部分将包括一个 16 位标识符和 16 位序列号,用于将回应回复与其请求相匹配。

ICMP 重定向

ICMP 的另一个常见用途是重定向客户端使用不同的默认网关(路由器)到达主机或网络,而不是它最初试图使用的网关。在以下截图中描述的 ICMP 重定向数据包中,应注意多个数据包字段:

  • ICMP 重定向包的源 IP 地址是192.168.1.1,是客户端默认的网关;这是路由器将重定向数据包发送回客户端
  • ICMP 类型5 ( 重定向),代码1 ( 重定向为主机)
  • 路由器192.168.1.1告诉客户端用来到达所需目标主机的网关 IP 地址是192.168.1.2
  • 目标主机的 IP 地址是10.1.1.125

以下截图显示了 ICMP 重定向数据包:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_04.jpg

Wireshark ICMP 过滤器

捕获 滤镜 : icmp

显示过滤器 : icmp icmp.type==8 || icmp.type==0 (pings) icmp.type==5

&& icmp.code==1 (host redirects)

互联网协议第 6 版

互联网协议版本 6 ( IPv6 )是互联网协议的最新版本,尽管它还处于被采用的最早期阶段,但它旨在最终取代 IP v4——主要是为了缓解可以分配给网络设备的 IP 地址的短缺。具有 32 位地址空间的 IPv4 提供了大约 43 亿个地址,几乎所有这些地址都被分配给了全球的公司和私人企业。

IPv6 利用 128 位地址空间,允许 2 ^(128) 或大约 3.4×10^(38)个地址;这个数字是 340,282,366,920,463,463,374,607,431,768,211,456 个唯一地址。

IPv6 寻址

IPv6 地址的 128 位用来表示,分为八组,每组 16 位,写成由冒号(:)分隔的四个十六进制数字。IPv6 地址的一个例子是2001:0db8:0000:0000:0000:ff00:0042:8329

为方便起见,只要有可能,IPv6 地址可以通过应用以下规则缩写成更短的符号:

  • 移除任何十六进制数字组中的一个或多个前导零;这通常是针对所有前导零或不针对前导零进行的。例如,十六进制组 0042 可以转换为 42。
  • 零的连续部分用双冒号(::)替换。双冒号在一个地址中只能使用一次,因为多次使用会导致地址不确定。不得使用双冒号来表示省略零的单个部分。

将这些规则应用于 IPv6 地址的示例如下:

  • 初始地址 : 2001:0db8:0000:0000:0000:ff00:0042:8329
  • 删除所有前导零后 : 2001:db8:0:0:0:ff00:42:8329
  • 省略连续的零段后 : 2001:db8::ff00:42:8329

IPv6 地址的 128 位在逻辑上分为网络前缀和主机标识符。类域间路由 ( CIDR )符号用于表示 IPv6 网络前缀,例如2001:DB8:0:CD30::/64表示网络2001:DB8:0000:CD30::

IPv6 地址类型

有三种基本类型的 IPv6 地址:

  • 单播:这些来自一对一设备的数据包使用一个单一接口地址。单播地址可以是以下三种类型之一:

    • 全局单播:此可路由到互联网或通过互联网路由。全球单播地址一般以2xxx开头(如2000::/3)。
    • Link-local :这是自动分配给一个接口,用在本地网络链路上;这不可路由到互联网,很像 MAC 地址。本地链路单播地址以FE80 ( FE80::/10)开头。当使用算法初始化接口时,它们会自动分配给接口,该算法使用 IPv6 地址中 NIC 的 48 位 MAC 地址的重新排列版本,并用于在本地链路上通信。这些地址不可路由。IPv6 将链路本地地址用于邻居发现功能。
    • 唯一本地:此不可路由至互联网,但在企业内部可路由(类似 IPv4 私有地址)。唯一本地单播地址以FC00 ( FC00::/7)开头。此地址块保留供专用 IPv6 网络使用。
  • 组播:这些是来自一对多设备的数据包。组播地址以FFxx开始。多播地址的一个例子是FF01:0:0:0:0:0:0:101,可以简称为FF01::101。IPv6 中没有广播地址;多播被用作替换。一些知名的组播地址如下表所示:

    |

    地址

    |

    描述

    |

    范围

    |
    | — | — | — |
    | ff01:0:0:0:0:0:0:1 | 所有节点地址 T46 | 本地接口(仅跨越一个节点上的单个接口,仅用于多播数据包的环回传输) |
    | ff02:0:0:0:0:0:0:1 | 所有节点地址 | 本地链路(本地网段上的所有节点) |
    | ff01:0:0:0:0:0:0:2 | 所有路由器地址 | 界面-本地 |
    | ff02:0:0:0:0:0:0:2 | 所有路由器地址 | 本地链接 |
    | ff05:0:0:0:0:0:0:2 | 所有路由器地址 | 本地站点(跨单个站点) |
    | ff02:0:0:0:0:0:1:2 | DHCP V6 服务器/代理 | 本地链接 |
    | ff05:0:0:0:0:0:1:3 | DHCP V6 服务器/代理 | 现场-本地 |

  • 任播:这些数据包来自一组接口中最近的一个。对于任播地址没有特殊的地址方案;它们类似于单播地址。当单播地址分配给多个接口时,会自动创建一个任播地址。任播地址可用于建立一组设备,以便任何一个组设备都可以响应发送到单个 IPv6 地址的请求。

关于 IPv6 寻址的进一步讨论将会涵盖许多额外的特性,这超出了本书的范围。鼓励读者进一步在线研究 IPv6 寻址和/或通过阅读征求意见稿(RFC) 4291 (IP 版本 6 寻址架构)。

IPv6 报头字段

IPv6 协议报头的一个示例是下面截图中的:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_05.jpg

IPv6 报头字段类似于许多 IPv4 报头,这些字段包括:

  • 版本:这个是 IP 版本号,6 代表 IPv6。
  • 流量类别:这个类似于 IPv4 DiffServ 字段;它用于识别 IPv6 数据包的不同类别或优先级。
  • 流标签:这些用于标识被标记为集合的数据包序列。IPv6 流由 20 位流标签字段以及源和目的地 IPv6 地址字段定义。
  • 有效载荷长度:这个是 IPv6 有效载荷的长度,不包括任何数据包填充。
  • 下一个报头:这个字段指示分组中的下一个内容。这相当于 IPv4 协议字段。在前面的例子中,下一层是一个普通的 TCP (6) 报头。
  • 跳数限制:这个字段大致相当于 IPv4 中的生存时间字段;每转发一次 IPv6 数据包,该值就会递减 1。当该值达到 1 时,数据包将无法转发。
  • 源地址和目的地址:这些是 128 位 IPv6 源地址和目的地址。

IPv6 支持扩展报头,该报头提供附加信息字段,并且还扩展了 IPv6 报头的长度。有特定的下一个报头代码来指示这个附加功能的存在。

IPv6 过渡方法

作为向 IPv6 过渡的一部分,当前的 TCP/IP 设备支持双栈(同时支持 IPv4 和 IPv6)以及在 IPv4 数据包中封装和隧道传输 IPv6 数据包的能力,以便它们可以通过 IPv4 网络进行路由。三种最流行的封装方法是:

  • 6to4 隧道:在这种隧道方法中, IPv6 报头跟在 IPv4 报头之后;IPv4 报头的协议字段将包含41 (IPv6),IPv6 报头中的源 IPv6 地址将以2002开头。
  • 特雷多:在这种隧道方法中,IPv6 报头被封装在 UDP 数据包中。开发这种方法是为了适应不处理协议 41 的 NAT 设备。Teredo 隧道可以通过目的端口3544在 UDP 数据包报头中识别。
  • ISATAP :这种隧道方法使用本地分配的 IPv4 地址来创建 64 位接口标识符。比如在 ISATAP 中,IPv4 地址24.6.173.220变成了::0:5EFE:1806:addc。ISATAP 像在 6to4 隧道中一样将 IPv6 头封装在 IPv4 中。
Wireshark IPv6 过滤器

捕获 滤镜 : ip6 host fe80::1 ip proto 41 (capture IPv6-over-IPv4 tunneled traffic)

显示过滤器 : ipv6 ipv6.addr == fe80::f61f:c2ff:fe58:7dcb ipv6.addr == ff02::1

互联网控制消息协议第 6 版

互联网控制消息协议版本 6 ( ICMPv6 ) 是 IPv6 不可分割的一部分,而基础协议必须被每个 IPv6 节点完全实现。ICMPv6 为 IPv6 环境提供由 IPv4 环境中的其他不同协议提供的服务,例如替代 ARP 的邻居请求。

下表包含一些常见的 ICMPv6 数据包类型:

|

ICMPv6 数据包类型

|

ICMPv6 类型

|

目的

|
| — | — | — |
| 回应请求 | One hundred and twenty-eight | Ping 请求 |
| 回声响应 | One hundred and twenty-nine | Ping 响应 |
| 多播侦听器查询 | One hundred and thirty | 由多播路由器发送,以轮询组成员的网段 |
| 多播侦听器报告 | One hundred and thirty-one | 当主机加入多播组时发送,或者响应路由器发送的多播监听器查询 |
| 多播监听器完成 | One hundred and thirty-two | 当主机离开多播组,并且可能是网段上该组的最后一个成员时,由主机发送 |
| 路由器请求 | One hundred and thirty-three | 发现本地路由器 |
| 路由器广告 | One hundred and thirty-four | 对路由器请求消息做出响应,并在初始化后定期发送该数据包 |
| 邻居恳求 | One hundred and thirty-five | 首先使用进行重复地址检测(使用源地址::),然后获取本地路由器的 MAC 地址;这个函数代替了 ARP |
| 邻居广告 | One hundred and thirty-six | 对邻居请求消息的响应 |
| 重定向消息 | One hundred and thirty-seven | 将设备重定向到正确的路由器,将数据包发送到特定的网络或主机 |

以下屏幕截图显示了一个邻居请求 ICMPv6 数据包的示例:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_06.jpg

该数据包中的重要字段包括:

  • 下一个报头:该域包含 58 ,表示下一个协议报头是 ICMPv6。
  • IPv6 源地址:出现不明地址( :: )表示这是一个重复地址检测包。
  • IPv6 目的地址:这基本上是一个组播地址。
  • ICMPv6 类型:这个是使用类型 135 的邻居请求消息。
  • ICMPv6 代码:这是邻居请求消息的子类型;这将是 0
  • ICMPv6 目标地址:这是主机想要使用的地址。如果网络上的另一个节点已经在使用这个地址,它们将做出相应的响应。

多播监听器发现

多播监听器发现 ( MLD )是 IPv6 路由器用来发现直连链路上的多播监听器的 IPv6 套件的另一个组件。MLD 是 ICMPv6 协议的一部分,它取代了 IPv4 网络上的 IGMP。

Wireshark ICMPv6 过滤器

捕获 滤镜 : icmp6

显示过滤器 : icmpv6 icmpv6.type==1135 && icmpv6.code==0 (Neighbor Solicitation)

传输层协议

传输层协议包括用于传输应用协议的 TCP 和 UDP。

用户数据报协议

用户数据报协议 ( UDP )被认为是不可靠的传输。在这种情况下,不能保证数据包的传送或排序,但它的开销较低,并且被时间敏感的应用使用,如语音和视频流量。

下面的屏幕截图显示了 UDP 报头中包含的字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_07.jpg

UDP 报头只有 8 个字节长,包括:

  • 源端口号和目的端口号:这个每个 2 字节。
  • 长度:这个是 UDP 头加上有效载荷的长度。这是一个 2 字节的字段。
  • 校验和:该是一个 2 字节字段,用于检查 UDP 报头和数据中的错误。如果变送器没有产生校验和,则校验和将全为零。

Wireshark UDP 过滤器

捕获 滤镜 : udp udp port 2222

显示过滤器 : udp udp.srcport == 161 (SNMP response) udp.length > 256

传输控制协议

传输控制协议 ( TCP )通过检测丢失、重复或乱序的数据包,请求重新传输丢失的数据,或在将数据包传送到应用之前按正确的顺序重新排列数据包,为提供可靠的数据传送。TCP 还可以接受来自应用的大量数据,并使用多个数据包将数据可靠地传输到另一端,并在另一端重新组装这些数据包。

下面的截图突出显示了基本 TCP 报头的重要字段:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_08.jpg

TCP 报头的内容和长度可以根据可能使用的选项而变化,但在其最简单的实现中,它包括:

  • 源端口和目的端口:这些是众所周知的注册端口,用于(在服务器上)访问 HTTP、FTP、SMTP、数据库等标准应用服务。分配给客户端/用户会话的端口号通常在一个较大的数字范围内,并按顺序分配。

  • 序列号:这个是一个数字,代表任何给定段中的第一个八位字节。序列号在新会话开始时被初始化为随机数,然后随着数据字节的发送而递增。

  • Acknowledgment number : When the ACK flag bit is set, this field contains the next sequence number expected from the sender, Which in turn acknowledgements receipt of all the bytes received up to that point.

    Note

    TCP uses sequence numbers and acknowledgement numbers to ensure the reliable transmission of data by tracking the number and order of received bytes.

    The serial number and confirmation number are so large that it is difficult for human beings to track them. Wireshark can convert these values and display them as relative values starting from 0 at the beginning of the session, so as to check them easily and associate these values with the number of bytes sent and received.

  • 标志:这些位用于控制连接建立、终止和流量控制机制。

  • 窗口大小:该字段指示该主机上的缓冲区的当前大小,该缓冲区用于存储接收到的数据,直到该数据可以被移交给接收应用。该信息使发送主机能够在网络或主机拥塞时调整数据流速率。

TCP 标志

下表列出了 TCP 报头中最常用的标志:

|

标志字段名称

|

描述

|
| — | — |
| URG | 这表示应该检查的紧急指针字段(在 TCP 报头校验和之后)。该标志通常为 0;仅当该位被置位时,才会检查紧急指针字段。 |
| 确认(确认) | 这是确认数据包。 |
| PSH (推) | 这表示发送节点的 TCP 堆栈是否应该绕过任何缓冲,将数据直接传递到网络和接收应用。 |
| RST (复位) | 这用于显式关闭连接。 |
| 同步(同步) | 这用于同步序列号,并在三方 TCP 会话发起握手过程中使用。 |
| (完成) | 这在交易完成时使用。这并不意味着要显式关闭连接,但通常会在会话结束时出现。 |

TCP 选项

TCP 还支持许多附加选项,其中几个是现代网络中常用的选项,您应该知道。以下屏幕截图中显示的 TCP 报头片段描述了几个最常用的选项:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_09.jpg

前面截图中突出显示的 TCP 选项包括:

  • 最大数据段大小:该选项允许您指定 TCP 报头后的字节数。该选项允许调整以适应 VLAN 标签或 多协议标签交换 ( MPLS )。
  • 窗口大小:该选项克服了标准 TCP 报头中的窗口大小字段无法指定大于 65535 字节的窗口大小的问题。窗口缩放允许您指定一个因子来乘以公布的窗口大小,以获得更大的窗口大小。会话的两端都必须能够支持该选项才能应用;这是在会话设置期间确定的。
  • TCP SACK 允许选项:该选项表示该节点支持选择性确认,允许节点确认正在进行的和输入的数据包,同时仍然请求特定的丢失数据包。恢复过程只需要重传丢失的数据包,而不是丢失的数据包和所有随后的数据包。会话的两端都必须能够支持此选项才能应用,这在会话设置期间确定。
Wireshark TCP 过滤器

捕获 滤镜 : tcp tcp port 80

显示过滤器 : tcp tcp.port == 80 tcp.dstport == 8080 tcp.stream == 2

应用层协议

最常见的应用层协议包括用于获取客户端 IP 地址和配置信息的 DHCP、用于主机名解析的 DNS、用于最常见网络服务的 HTTP、SMB、POP/SMTP 和 FTP,以及用于 VoIP 和视频会议的 SIP、RTP 和 RTCP。

所有上层协议的广泛覆盖超出了本书的范围。将提供 DHCP 和 DNS 的简要概述,因为这些协议普遍支持网络操作,并且 HTTP 是最常见的应用层协议之一。鼓励读者进一步研究这些方案中的任何一个或全部,这取决于它们的兴趣范围和满足所处理的分析任务的需要。

动态主机配置协议

动态主机配置协议 ( DHCP ) 允许客户端从 DHCP 服务器管理的池中租用 IP 地址。客户端可以接收其他配置选项,例如默认网关、子网掩码以及一个或多个 DNS 服务器地址。DHCP 源自一个旧的 BOOTP 协议;Wireshark 在显示过滤器语法中使用 bootp。DHCP 的工作原理是客户端使用 UDP 源端口67向 UDP 目的端口68发送广播数据包。DHCP 服务器将响应请求者的 IP 地址,并使用 UDP 源端口68到 UDP 目的端口67

DHCP 服务器不一定要和客户端驻留在同一个本地网段上。路由器等中继代理可以转发 DHCP 请求,并对 DHCP 服务器所在的不同网络做出响应。

Wireshark DHCP 过滤器

捕获过滤器:端口67 (DHCP 在端口6768之间;端口67上的过滤足以获得对话的双方

显示过滤器 : bootp bootp.option.value == 0 (DHCP 发现消息)

动态主机配置协议第 6 版

动态主机配置协议版本 6 ( DHCPv6 ) 是 DHCP 的 IPv6 版本。由于 IPv6 不使用广播,DHCPv6 客户端使用All_DHCP_Relay_Agents_and_Servers (ff02::1:2)的多播地址来定位 DHCPv6 服务器或中继代理。

Wireshark DHCPv6 过滤器

捕获 过滤器:端口546 (DHCPv6 是端口546547之间的;两者都可以)

显示过滤器 : dhcpv6 dhcpv6.msgtype == 1 (DHCPv6 请求消息)

域名服务

域名服务 ( DNS ) 用于转换主机名,比如www.wireshark.org转换成 IP 地址。DNS 也可用于识别与 IP 地址相关联的主机名(反向或指针(PTR)查询)和其他几种网络信息服务。这是一个需要熟悉的好协议,因为它被广泛用于使用主机名在企业内部和互联网上定位节点。

Wireshark DNS 过滤器

捕获 过滤器:端口53

显示 过滤器 : dns dns.flags.response == 0 (DNS 查询)dns.flags.response == 1 (DNS 响应)dns.flags.rcode != 0 (DNS 响应包含错误)

超文本传输协议

超文本传输协议 ( HTTP ) 是当有人在互联网上浏览(不安全)网站时使用的应用协议,以及安全版本(HTTPS)。HTTP/1.1 是当前版本—尽管 HTTP/2.0 开始出现在某些环境中。请注意,一些网络设备(如代理服务器和网关)可能还不支持 HTTP/2.0。

下面的屏幕截图显示了一个向 web 服务器发送GET请求的 HTTP 数据包示例:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_05_10.jpg

HTTP 协议最常见的特性和字段包括 HTTP 方法、主机和请求修饰符。

在前面的截图中, HTTP 头包括:

  • 请求方式 : 获取
  • 请求 URI:/猎户座(网络服务器上的一个主页)
  • 请求版本 : HTTP/1.1

HTTP 方法

下表列出并描述了一些更常见的 HTTP 方法:

|

方法

|

描述

|
| — | — |
| GET | 这个检索由 统一资源标识符 ( URI )字段定义的信息 |
| HEAD | 这个检索与期望的 URI 相关的元数据 |
| POST | 这个将数据发送到 HTTP 服务器/应用 |
| OPTIONS | 这个决定了与资源相关的选项 |
| PUT | 这个将数据发送到 HTTP 服务器/应用 |
| DELETE | 此删除由 URI 定义的资源 |
| CONNECT | 此用于连接到代理设备 |

主持人

主机字段标识被请求资源的目标主机和端口号。在前面的截图中,主机是端口8080上的pktiqsvr1

请求修改量

HTTP 请求和响应使用请求修饰符来提供请求的细节。在前面的屏幕截图中,请求修饰符包括:

  • 连接:这个表示首选持久连接(保持活动)。
  • 接受:这个是接受的数据格式列表(text / htmlapplication / xhtmlxml)。
  • 用户代理:这个是浏览器和操作系统参数列表(Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit)用于请求设备。
  • 接受编码:这个是可接受的 HTTP 压缩方案列表(gzipdeflatesdch)。
  • 接受语言:T2 接受的语言(美国和英国;q=0.8),其中 q=0.8 是在 0 到 1 的范围内指定用户偏好的语言的相对质量因子。
  • Cookie :这是一个会话 ID cookie ( ASP.NET_SessionId=sidsruxjbm4eaed4d3dgg4zd),先前存储在用户浏览器的一个 Cookie 中,并被提供给网站。

下表列出了一些更常用的修饰符:

|

请求修饰符

|

描述

|
| — | — |
| 接受 | 可接受的内容类型 |
| 接受字符集 | 可接受的字符集 |
| 接受编码 | 可接受的编码 |
| 接受语言 | 可接受的语言 |
| 接受范围 | 服务器可以接受范围请求 |
| 批准 | 认证用于 HTTP 认证的凭证 |
| 缓存控制 | 缓存指令 |
| 关系 | 用户代理首选的连接类型 |
| 饼干 | HTTP cookie(从网站发送并存储在用户浏览器中的一小段数据,和/或在用户下次访问时发送回网站的包含会话信息的数据) |
| 内容长度 | 请求体的长度,以字节为单位 |
| 内容类型 | 正文的 Mime 类型(用于POSTPUT请求) |
| 日期 | 消息发送的日期和时间 |
| 预期 | 定义客户端期望的服务器行为 |
| 如果匹配 | 如果客户提供的信息匹配,执行操作 |
| 如果-修改-自 | 提供缓存数据的日期/时间;如果缓存的数据仍然是当前的,则返回 304 未修改 |
| 中频范围 | 请求获取缺失信息的范围 |
| 如果-未修改-因为 | 如果在提供的日期/时间之后未修改,则仅发送 |
| 最大向前 | 限制通过代理或网关转发的次数 |
| 代理授权 | 代理连接的授权凭证 |
| 范围 | 请求仅实体的一部分 |
| 你呢 | 接受传输编码 |
| 用户代理 | 包含浏览器和操作系统信息的字符串 |
| 通过 | 遍历的个代理 |

Wireshark HTTP 过滤器

捕获 滤镜 : tcp port http tcp port https

显示过滤器 : http http.request.method == "GET" or http.request.method == "POST" http.response.code > 399(识别客户端或服务器错误数据包)

附加信息

涵盖所有最常见的上层协议,或者深入探讨这些协议,显然超出了这本书所能涵盖的范围。我鼓励你花些时间学习那些你出于个人或工作原因感兴趣的协议。你在时间上的投资回报是值得的。

本章中讨论的任何协议的附加信息以及所有未涉及的信息都可以在网上找到。

Wireshark 维基

如果您正在 Wireshark 的数据包详细信息窗格中检查某个协议,您可以右键单击协议标题或标题中的字段,并从菜单中选择 Wiki 协议页面,以转到 Wireshark wiki 上包含该协议信息的特定页面。更多信息可以在http://wiki.wireshark.org/ProtocolReference找到。

您还可以通过选择一个协议头或头中的一个字段,右键单击并选择 Filter Field Reference ,获得特定协议上 Wireshark 显示过滤器的完整列表。

维基百科上的协议

你可以在维基百科上找到各种协议的一般信息。从互联网协议开始。在 http://en.wikipedia.org/wiki/Internet_Protocol 的也提供了到整个互联网协议套件的额外链接。

征求意见

征求意见稿 ( RFC )文档包含所有互联网协议的详细信息。这些文档由互联网工程任务组 ( IETF ) 维护,是协议应该如何实现和运行的最终决定(http://www.ietf.org/rfc.html)。如果您想通过标题或关键字搜索特定的 RFC,请使用链接http://www.rfc-editor.org/search/rfc_search.php

总结

本章涵盖的主题包括网络层协议 IPv4、ARP、IGMP、ICMP、IPv6 和 ICMPv6 的协议和字段覆盖;传输层协议 UDP 和 TCP 应用层协议 DHCP、DHCPv6 和 DNS 概述;以及对 HTTP 更深入的了解。

在下一章中,我们将通过使用 Wireshark 对功能和性能问题进行故障排除,充分利用到目前为止所涉及的所有主题。

六、故障排除和性能分析

在本章中,我们将讨论 Wireshark 的主要用途—排除网络和应用连接、功能和性能问题。

将涉及的主题包括:

  • 故障排除方法
  • 连通性问题故障排除
  • 功能问题故障排除
  • 性能分析方法
  • 应用性能差的五大原因
  • 检测和优先处理延迟
  • 服务器处理时间事件
  • 应用回合的延迟
  • 网络路径延迟
  • 带宽拥塞
  • 数据传输问题

这些主题涵盖了您在分析工作中会遇到的大多数问题。

故障排除方法

进行数据包分析有两个基本原因:

  • 排除连接或功能问题(用户无法连接,应用无法工作,或无法正常工作),我们称之为故障排除
  • 分析一个性能问题(应用可以工作,但是很慢),我们称之为性能分析

第三个灰色区域是一个应用,它基本上可以工作,但速度很慢,偶尔会超时,这可能涉及导致性能问题的底层功能问题,或者只是性能非常差。

对连接性或功能性问题进行故障诊断只是将您正在处理的情况下正常工作的情况与正在发生的情况进行比较。

另一方面,性能问题需要确定完成特定事务的大部分时间花在哪里,测量延迟并将延迟与正常或可接受的延迟进行比较。过度延迟的来源和类型通常指向下一个需要进一步调查或解决的领域。

在任何情况下,您都需要收集信息,以便确定这是连接性问题、功能问题还是性能问题,并根据问题的性质来解决问题。

收集正确的信息

在处理问题时,你能做的最重要的事情是确定真正的问题是什么,这样你就能解决正确的问题或问题的正确方面。为了确定真正的问题是什么,或者至少接近问题,你需要提出问题并解释答案。这些问题可能包括以下列表中的适当选项(取决于投诉):

  • 定义问题:

    • 您试图做什么(连接服务器、登录、发送/接收电子邮件、一般应用使用、上传/下载文件以及特定事务或功能)?
    • 什么都不工作,或者这只是一个特定应用或多个应用的问题?
    • 您正在尝试/连接什么网站/服务器/应用?您知道用于访问应用的主机名、URL 和/或 IP 地址和端口吗?
    • 问题的症状/性质是什么?这个应用或功能/特性以前工作过吗,或者这是您第一次尝试使用它吗?
    • 您是否收到任何错误信息或其他问题提示?
    • 问题是持续的还是间歇的?看情况?靠什么?
    • 这种情况发生多久了?
    • 最近是否有一些已经或可能产生影响的变化?
    • 目前已经确定或怀疑的有哪些?为解决这一问题做了些什么?有帮助或者改变什么吗?
    • 是否有任何其他相关因素、症状或用户环境的近期变化需要考虑?
  • 确定问题的范围:

    • 这个问题是发生在单个用户还是一组用户身上?
    • 这个问题是发生在特定的办公室、地区还是整个公司?
    • 这个问题对不同类型用户的影响是否不同?
  • 收集系统、应用和路径信息。为了进行更深入的分析(超越单个用户或小组问题),可能还需要根据投诉收集和分析以下列表中的适用问题(其中一些信息可能必须从网络或应用支持小组获得):

    • 客户端上的浏览器类型和版本是什么(针对 web 应用)?这与正常工作的客户端有什么不同吗?
    • 客户端和服务器的操作系统类型和版本是什么?
    • 什么是合适的(供应商)应用名称和版本?应用中是否存在与这些症状相符的已知问题(查看供应商的错误报告)。
    • 应用服务器背后的数据库类型和服务器环境是什么?
    • 是否涉及其他后端支持数据源,如在线数据服务或 Documentum 和 SharePoint 服务器?
    • 客户端和服务器之间的网络路径是什么?路径中是否有防火墙、代理服务器、负载平衡器和/或 WAN 加速器?它们的配置和工作是否正常?
    • 您能否使用 traceroute 确认预期的网络路径(以及涉及的任何 WAN 链路)并验证带宽可用性?
    • 你能用 pings 或 TCP 握手完成时间来测量往返时间 ( RTT )从用户到应用服务器的路径延迟吗?

确定问题的一般性质

此时,您应该能够确定以下三种基本类型之一的问题的一般性质:

  • 确定这是否是连接问题

    • 用户无法连接到任何东西
    • 用户无法连接到特定的服务器/应用
  • 确定这是功能问题还是配置问题

    • 用户可以连接(从应用服务器获得登录屏幕或其他响应)但无法登录(或获得预期响应)
    • 用户可以连接并登录,但部分或全部功能失败(例如,无法发送/接收电子邮件)
  • 确定这是否是性能问题

    • 用户可以正常连接、登录和使用应用;但是它很慢
    • 应用正常工作,但是有时它会停止和/或超时

对半故障排除和其他逻辑

当我在职业生涯早期从事电子设备的组件级维修时,我学会了使用“对半分”的故障排除方法,这种方法在几乎每一种情况下都非常有效。对半故障排除是通过在系统中途注入或测量信号,将问题域(在我的例子中,是一个无线电设备)一分为二的过程。这个想法是看哪一半是正确的,哪一半是错误的,然后将焦点转移到不工作的那一半,中途分析它,等等。重复这个过程,直到你把问题缩小到它的根源。

在网络和应用领域,一般来说,同样的对半故障排除方法也可以应用。如果用户抱怨网络速度慢,请尝试确认或消除网络:

  • 靠近服务器的用户是否也遇到了类似的速度缓慢问题?其他偏远地点的用户呢?
  • 如果某个应用对远程用户来说很慢,那么其他应用对该用户来说也很慢吗?
  • 如果用户无法连接到给定的服务器,他们可以连接到附近或其他位置的其他服务器吗?

通过对什么可行,什么不可行的逻辑检查过程,你可以消除大量的猜测,将你的分析缩小到几个可能的可能性。

如果您有一个一切正常的环境,与不正常的情况相比,确定连接性或功能性问题的来源通常要容易得多。可以对工作场景和非工作场景的数据包捕获进行比较,以查看有何不同以及这些差异是否显著。

重要的是不要对一个问题做太多的假设,即使你正在处理的问题看起来和你之前解决的问题一样。始终验证问题和解决方案,您应该能够应用和删除修复,并可靠地看到问题消失/重新出现。否则,你应该问问自己是否找到了问题的真正根源,或者只是影响了症状。

除非报告的问题明显是系统范围的或特定的服务器问题,否则最好至少在投诉用户的工作站或尽可能靠近该工作站的地方进行初步分析。这具有提供执行以下操作的能力的优势:

  • 查看并验证用户报告的实际问题
  • 测量到目标服务器的往返时间
  • 捕获并查看会话启动时的 TCP 握手过程
  • 捕获并调查登录和任何其他后台进程和流量
  • 查找用户设备遇到的网络问题(数据包丢失和重新传输)的迹象
  • 测量数据下载期间用户工作站的表观网络吞吐量
  • 消除使用捕获过滤器的需要;进出单个工作站的流量不应过大

在用户工作站、服务器或其他设备上进行捕获时,应使用聚合测试接入点 ( 分接头)而非使用交换机 SPAN 端口的(如第 3 章捕获所有正确的数据包中所述,或作为最后手段,在用户工作站或服务器上安装 Wireshark(如果授权)。

排除连接问题

通过确认用户工作站访问本地和远程网络资源所需的网络功能运行正常,可以解决单个用户或小组的连接问题。需要确认的基本要求或项目包括:

  • 启用正确的网络接口(工作站配置)
  • 确认第 1 层(物理)连通性
  • 获取每个接口的 IP 地址、子网掩码和默认网关(DHCP)
  • 获取默认网关或其他本地网络服务(ARP)的 MAC 地址
  • 获取网络服务(DNS)的 IP 地址
  • 连接到网络服务(TCP 握手或 UDP 响应)

我们将依次简要讨论这些问题;虽然前两步不涉及使用 Wireshark,但它们是故障排除方法中的必要部分。如果连接问题影响一组用户或整个办公室,第一步可能不适用。

启用网络接口

虽然网络接口需要启用似乎是显而易见的,但设备启动时默认自动启用(尤其是无线连接)的假设可能是错误的。

在 Windows 上,您可以使用命令行实用工具ipconfig查看网络接口的状态和基本配置(IP 地址、子网掩码和默认网关);在 Linux 或 MAC 设备上,等效的命令是ifconfigip

确认物理连接

如果连接性问题被隔离到单个用户的工作站,则物理连接是可疑的。有几个项目需要检查,可以采取的故障排除步骤如下:

  • 如果从工作站到墙上插座的以太网电缆有问题,您需要用不同的电缆替换。
  • 如果从用户的墙上插孔到交换机端口的布线有问题,您需要临时将用户的以太网电缆插入另一个(已知良好的)墙上插孔。
  • 如果交换机、交换机端口或端口配置有问题,您需要临时将用户的端口电缆插入另一个(已知良好的)端口。请注意,一些网络安全策略要求禁用交换机端口,直到需要它们时,或者将端口配置为与单个特定的 MAC 地址相关联。如果是这样的话,一个端口可能在你插入时无法工作,尽管它本身没有任何问题。

获取工作站 IP 配置

除非工作站是手动配置的,否则它需要从 DHCP 服务器获取 IP 地址、子网掩码、默认网关和 DNS 服务器设置。如果这似乎不能正常工作(在使用ipconfig (Windows)或ifconfig(Linux 或 Mac OS X)检查配置后),您需要在工作站初始化/启动过程中使用 TAP 或 SPAN 端口执行数据包捕获,并调查 DHCP 请求和响应。

有八种 DHCP 消息类型(不要与引导请求和引导回复这两种引导协议类型相混淆):

|

消息类型号

|

消息类型

|

描述

|
| — | — | — |
| one | DHCP 发现 | 客户端广播以定位可用的 DHCP 服务器 |
| Two | DHCP 回复 | 服务器向客户端响应 DHCP 发现以提供配置参数 |
| three | DHCP 请求 | 发送到 DHCP 服务器的客户端消息满足以下任一条件:

  • 请求一台服务器提供的参数,拒绝其他 DHCP 服务器提供的参数
  • 重新启动后,确认先前分配的地址的正确性
  • 延长 IP 地址的租期

|
| four | DHCP 下降 | 发送到 DHCP 服务器的客户端消息,指示提供的地址不可接受 |
| five | DHCP 确认 | 服务器到客户端的配置参数包括承诺的网络地址 |
| six | DHCP 否定确认 | 服务器向客户端指示客户端的地址不正确或已过期 |
| seven | DHCP 版本 | 客户端到服务器释放网络地址并取消租约 |
| eight | DHCP 信息 | 客户端到服务器仅要求本地配置参数 |

对于正在启动并先前在网络上工作的工作站,您通常会看到 DHCP 请求和确认数据包,确认工作站仍然可以使用先前租用的地址。在完全冷启动时,前两个 DHCP 数据包将是 DHCP Discover 和 DHCP Offer 数据包,随后是 Request 和 ACK 数据包。

在 DHCPv6 环境中,典型的数据包序列是 DHCPv6 请求、DHCPv6 通告、DHCPv6 请求和 DHCPv6 回复。

DHCP 响应数据包中要验证的字段(或 DHCPv6 广告数据包中的类似字段)包括以下四个字段:

  • 您的(客户端)IP 地址:这是为该工作站提供的 IP 地址
  • 子网掩码:这是在这个网络上使用的子网掩码
  • 域名服务器:这是 DNS 服务器的 IP 地址
  • 路由器:这是使用的默认网关的 IP 地址

这是任何网络通信所需的最少数据;下面的屏幕截图显示了 DHCP 回复数据包中提供的这些字段的示例:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_01.jpg

您可以应用 Wireshark 显示过滤器来隔离 DHCP 数据包;过滤器是bootp,因为这是 DHCP 的传统名称:

  • DHCP 显示过滤器 : bootp bootp.option.dhcp == 5 (DHCP Message Type 'ACK')
  • DHCPv6 显示过滤器 : dhcpv6 dhcpv6.msgtype == 2 (DHCPv6 'Advertise')

显示滤镜工具栏的文本框中输入滤镜字符串,点击保存,并给按钮分别起一个名字如DHCP PktsDHCPv6 Pkts,就可以将基本的bootpdhcpv6显示滤镜保存为一个滤镜表达式按钮 ( FEB )。或者,您可以在一个按钮中使用一个or ( ||)将两个过滤器结合起来,如下面的屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_02.jpg

您可能希望保存另一个 FEB,该 FEB 使用以下显示过滤器字符串显示异常 DHCP 条件数据包,并调用 DHCP Errors 按钮或类似按钮,如下所示:

bootp.option.dhcp == 4 || bootp.option.dhcp == 6 || bootp.option.dhcp == 7

DHCPv6 的类似异常事件显示过滤器可能包括:

dhcpv6.msgtype == 8 || dhcpv6.msgtype == 9 || dhcpv6.msgtype == 10

如果您需要更详细地分析 DHCP、DHCPv6 和各种 DHCPv6 消息类型,您可以在线或从其他来源进行更多的研究。

获取 MAC 地址

工作站将利用 ARP 协议来获取网络服务的已知 IP 地址的 MAC 地址,例如它的默认网关或 DNS 服务器,如果它位于同一网段的话。ARP 协议及其典型功能已经在第 2 章数据包分析人员网络中介绍过。

您可能希望使用arp显示过滤器语法创建一个 ARP FEB,以便快速轻松地检查那些数据包。

获取网络服务 IP 地址

客户端工作站向 DNS 服务器发送查询,以获得给定主机名的 IP 地址;DNS 服务器以该信息作为响应,或者代表客户端向其他 DNS 服务器请求该信息。

Wireshark 数据包详细信息窗格中显示的 DNS 查询和响应数据包字段的格式相当直观。包含time.windows.com的已解析 IP 地址的 DNS 响应数据包示例,实际上提供了别名time.microsoft.akadns.com的 IP 地址(137.170.185.211),如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_03.jpg

如果客户端工作站无法获得 web 服务或应用服务器的 IP 地址,那么对请求的数据包级调查(请求的是哪个 URL 或主机名)以及来自 DNS 服务器的响应(如果有)应该会揭示一些问题。将失败的查询与其他主机名或来自其他工作站的正常工作的查询进行比较,应该可以揭示问题的根源(如果 DNS 是问题所在)。无法获得 IP 地址的原因可能是 DNS 服务器无法运行、主机名或 URL 不正确,或者用户与网络其他部分的连接出现问题,我们接下来将对此进行检查。

基本网络连接

一些简单的测试可以确认基本网络连接是否正常,或者发现路由问题或其他需要网络支持团队解决的问题。

捕获和分析在以下测试中发送和接收的 ICMP 数据包可能会有所发现;尽管如此,测试结果本身往往足以说明问题:

  • 使用通过使用ipconfig /all (Windows)或ip addr show (Linux)获得的默认网关 IP 地址 Ping 用户的默认网关,以确认用户工作站在本地网络上具有基本连接。

  • Ping 目标服务器的主机名或 URL。如果失败(请求超时消息),尝试 ping 其他主机或 URL。如有必要,在这些测试的数据包捕获中检查 DNS 和/或 ICMP 响应,以确定故障的性质。否则,记下平均往返时间。

  • 如果 ping 通默认网关,但 ping 通其它目标失败,则到目标服务器的 traceroute 可以揭示网络路径中连通性停止工作或被阻塞的位置。

    注意

    视窗中的 traceroute 命令行实用工具是tracert,而对于 Linux/Unix 和麦克·OS X 机器上的 traceroute,该命令是traceroute.在 Windows 操作系统中做 traceroute,打开一个命令提示符 ( CMD )窗口,键入tracert <hostname or IP Address of target>.在大多数其他环境中,打开一个终端窗口并键入traceroute <hostname or IP address of target>.

如果可以 ping 通目标服务器,并且网络连接正常,则可以进入故障排除过程的下一步。如果没有,请注意,有些主机可能配置为不响应 ICMP ping 请求,并且/或者出于安全原因,ICMP 被用户和服务器之间的防火墙阻止。因此,无法 ping 通设备不一定是网络问题的征兆。Traceroute 结果有助于确定网络连接在通往目标服务器的路径上运行的程度;对其他目标的测试也应该是有启发性的。

下面的屏幕截图显示了一个示例,先 ping 默认网关,然后 ping URL,最后执行到目标 URL 的 traceroute:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_04.jpg

连接到应用服务

如果从用户工作站到目标服务器的网络连接正常(如 ping 主机的能力所证明的),连接到该服务器上托管的特定应用的问题可能由多种因素引起:

  • 客户端用来访问应用的 URL 或端口是错误的
  • 用于访问应用的端口被防火墙阻止
  • 应用服务未启动或工作不正常

这些因素中的第一个更有可能是单个用户问题。最后两个因素中的任何一个都会阻止一个组或整个组织中的任何人访问该应用。对试图连接到被阻止的应用的用户进行数据包级分析(从客户端)会产生 ICMP 消息:目的主机不可达目的端口不可达,或者如果 ICMP 消息被防火墙阻止,则根本没有响应。

如果服务器启动,则应用可以运行,但无法访问;客户端捕获不能提供任何可靠的线索,但是来自或靠近服务器端的 TCP 会话设置(如果有的话)的数据包捕获应该能揭示一些问题。

排除功能问题

如果用户能够连接并建立与应用服务器的 TCP 会话,但是应用不能正常工作,或者不能正常工作,那么,有许多方面可以研究。可以结合使用数据包级分析、错误报告和配置比较以及来自其他用户机器的捕获和配置来调查这些方面:

  • 用户凭证:应用功能的特定用户问题最常见的原因是缺乏适当的凭证、授权、权限等。这是首先要检查其他用户是否正常工作。

  • 用户机器上的应用设置:有些应用需要将特定的配置文件放在用户机器的特定位置。应用可能还需要特定于应用的实用工具的特定版本级别,Java。NET 框架等等。通常,应用会提供一条错误消息,至少指出配置问题的一般性质。

  • 应用报告的错误:您可以在响应包内或用户屏幕上查找可能揭示应用错误性质的错误代码:

    • HTTP、FTP 或 SIP 响应包中大于 400 的状态代码
    • SMB 响应包中的错误代码
    • 其他特定于应用的异常、错误代码和消息
  • 网络浏览器的差异:一些网络应用被设计用于特定的浏览器(Chrome、Internet Explorer、Firefox、Opera 等),可能无法在其他浏览器上正常运行或者根本无法运行,并且可能不会提供任何错误消息来表明这种情况。将浏览器类型和版本与其他工作用户进行比较可能会有所启发。

网络连接和应用功能问题的原因可能千差万别,因此不可能为每种可能性都画出清晰的路线图。成功解决这些问题的最佳方法是,在没有用系统的、逻辑的故障排除步骤证明这些假设正确的情况下,不要做出过多的假设,而是尝试找到或创建一个场景,在该场景中,系统或至少系统的一部分正常工作,并将工作环境与不工作环境的适当数据包级细节进行比较。

性能分析方法

分析应用的性能问题基本上就是识别完成特定任务的大部分时间花在哪里,并测量/比较该时间与该类型任务的正常和/或可接受时间。

应用性能不佳的五大原因

一般来说,性能问题可归因于以下五个方面中的之一,按照降低可能性的顺序排列:

  • 服务器处理时间延迟
  • 申请轮次延迟
  • 网络路径延迟
  • 带宽拥塞
  • 数据传输(TCP)问题

客户端处理时间通常是整体响应时间中相对较小的一部分——除了一些计算密集型桌面应用,这些应用将重点放在网络和服务器环境以及任何影响性能的应用设计特征上。

准备工具和方法

正如在准备对连接或功能问题进行故障排除时所做的那样,您需要收集关于应用环境和问题域的正确信息。您还需要确定在分析过程中可能需要使用哪些工具:Wireshark、方便数据包捕获的 TAPs 以及任何其他分析工具。

您还需要确定在哪里执行第一次数据包捕获:

  • 客户端捕获是开始性能分析工作的最佳地方。从这一有利位置,您可以查看和验证用户抱怨的内容,查看呈现给用户的任何错误消息或数据包捕获中明显的错误消息,测量网络往返时间,并捕获性能特征以在数据包捕获中进行研究,而无需使用捕获过滤器,因此您知道您不会错过任何内容。
  • 可能需要服务器端捕获,因为客户端捕获对于远距离的用户来说可能是不可能的,或者分析后端数据库或其他数据源的服务器到服务器的事务。
  • 可能需要在网络路径的某个中间点捕获分组,以隔离过多分组丢失/错误和相关重传的来源。

请记住,使用聚合 TAP 比使用 SPAN 端口更可取,或者您可以将 Wireshark 安装在客户端工作站或服务器上作为最后的手段,但必须以任何方式完成捕获。

执行、验证和保存良好的数据包捕获

在执行捕获并保存批量捕获文件后,确认以下内容:

  1. 检查文件以确保在 Wireshark 专家信息菜单中的【警告】选项卡中没有带有已确认的不可见段消息的数据包,这意味着 Wireshark 看到了已确认的数据包,但没有看到原始数据包;表示 Wireshark 由于错误的分路器或 SPAN 端口配置或过多的通信量而丢失数据包。在任何情况下,如果出现的不止一部分,您将需要在确认捕获设置后再次进行捕获。
  2. 接下来,您需要在对话窗口中查看在 IPv4 中捕获的对话,并对字节列进行排序。用户和应用服务器之间的 IP 对话应该在顶部或顶部附近,这样您可以选择该对话,右键单击它,并在选择的菜单中选择 A < - > B
  3. 在检查过滤后的数据以确保其包含您所期望的内容后,从文件菜单中选择导出指定的数据包,并用文件名保存过滤后的捕获文件,该文件名反映了这是批量捕获文件的过滤子集。
  4. 最后,打开刚刚保存的过滤文件,这样你就可以使用一个更小、更快的文件,而不会有任何干扰与你的分析无关的其他对话。

初始误差分析

在开始分析时,您应该浏览 Wireshark 的专家信息窗口(分析 | 专家信息)的错误警告注释选项卡,以查找重大错误,如过度重新传输、零窗口条件或应用错误。这些非常有助于提供线索,找出所报告的不良绩效的来源。

虽然在大多数数据包捕获中,少量的数据包丢失和重新传输是正常的,并且影响很小,但是过多的数量表明在用户和服务器之间的某个路径上发生了网络拥塞,数据包被丢弃,并且从这些丢失的数据包中恢复可能会损失大量的时间。

专家信息注释窗口中看到大量重复的 ACK 包可能会引起警惕,但也可能会产生误导。在下面的屏幕截图中,对于一个丢失的数据包,有多达 69 个重复的 ack,对于第二个丢失的数据包,计数上升到 89(在下面的屏幕截图中未显示):

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_05.jpg

然而,在 Wireshark 中使用编辑菜单中的设置/取消时间参考功能标记第一个重复 ACK 发生的时间,然后通过点击专家信息屏幕中的数据包编号并检查数据包列表窗格中的相对时间栏,转到该系列中的最后一个重复 ACK,仅过了 30 毫秒。这不是一个显著的时间量,特别是如果选择性确认被使能(如本例所示),并且其他分组同时被传递和确认。在延迟时间较长的网络路径上,重复 ACK 计数可能会高得多;只有当丢失的数据包和需要重新传输的数据包的总数过高时,用户才会注意到延迟。

专家信息注释窗口中寻找的另一个条件包括 TCP 零窗口报告,这是由于客户端或服务器上的接收缓冲区太满而无法接受更多数据,直到应用有时间检索和处理数据并在缓冲区中腾出更多空间。这不一定是错误情况,但它会导致传输数据的大量延迟,这取决于缓冲区释放的时间。

您可以通过用时间参考标记 TCP 零窗口包并查看发送 TCP 窗口更新包之前经过的相对时间来测量该时间,这表示接收器准备好接收更多数据。如果这种情况经常发生,或者零窗口和窗口更新数据包之间的延迟很长,您可能需要检查遇到缓冲区已满情况的主机,以查看是否有任何后台进程对您正在分析的应用产生不利影响。

注意

如果还没有添加,需要在包列表窗格中添加相对时间时差列。导航到编辑 | 首选项 | 来添加它们。添加时间列也在第 4 章、配置 Wireshark 中进行了说明。

您可能会在警告选项卡中看到连接重置(RST)消息。如果这些错误发生在客户端-服务器交换或会话结束时,则不是错误状况的指示;它们是会话被终止的正常标志。

您可能想要添加到 Wireshark 的一个非常方便的过滤器表达式按钮是一个 TCP 问题按钮,使用如下显示过滤器字符串:

tcp.analysis.flags && !tcp.analysis.window_update && !tcp.analysis.keep_alive && !tcp.analysis.keep_alive_ack

这将过滤并显示大多数数据包,您将在专家信息窗口中看到这些信息,并提供任何重要问题的快速概述。

检测和优先处理延迟

由于我们正在解决应用的性能问题,因此第一步是确定数据包流中的任何延迟,以便我们可以关注周围的数据包,从而确定延迟的来源和性质。

识别延迟事件的最快方法之一是对 TCP Delta time 列进行排序(通过点击列标题),以便将最高延迟的数据包排列在数据包列表的顶部。然后,您可以检查这些数据包的信息字段,以确定哪些数据包(如果有的话)反映了影响事件的有效性能,因为大多数数据包并不反映。

在下面的屏幕截图中, TCP Delta time 列按照包间时间降序排列:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_06.jpg

让我们详细地看一下所有的包:

  • 前两个包是 TCP 保持活动状态包,它们只是做它们被称为的事情。它们是客户端(或服务器)确保在一段时间没有任何活动的过去后,连接仍然存在(而不是因为另一端已经断开)的一种方式。你可以忽略这些;它们通常与用户体验无关。
  • 第三个包是 Reset 包,它是会话流中的最后一个包,被发送来终止连接。同样,它对用户体验没有影响,因此您可以忽略这一点。
  • 具有高分组间延迟的下一系列分组是getPOST 。这些是新请求的开始,因为用户单击了应用上的按钮或其他动作而发生。然而,在这些数据包出现之前过期的时间被用户思考时间消耗掉了,这是用户阅读最后一页并决定下一步做什么的时间。这些也不会影响用户的响应时间体验,可以忽略不计。
  • 最后, Frame # 3691 ,是一个 HTTP/1.1 200 OK ,是服务器对之前请求的响应;这是用户等待的 1.9 秒的合法响应时间。如果这个响应时间消耗了几秒钟以上,用户可能会对等待感到失望,而类型的请求和过度延迟的原因将需要进一步分析,以确定为什么需要这么长时间。

本讨论的要点是说明并非您在数据包跟踪中看到的所有延迟都会影响最终用户体验;你必须找到并专注于那些有关系的人。

您可能想给 Wireshark 添加一些额外的列来加速分析过程;您可以右键单击列标题并选择隐藏列显示列来显示或隐藏特定的列:

  • TCP Delta(TCP . time _ Delta):这是从 TCP 会话中的一个包到同一会话/流中的下一个包的时间

  • DNS Delta(DNS . time):这是 DNS 请求和响应之间的时间

  • HTTP Delta ( http.time ) : This is the time between the http requests and responses

    Note

    You should ensure that calculate session timestamp is enabled in the TCP option. You can find this option by navigating to Edit | Reference | Protocol so that the delta time series can work normally.

添加列时,以下内容在性能分析过程中也会有所帮助:

  • Stream #(tcp . Stream):这是 TCP 会话流的编号。您可以右键单击该列中的流编号,并从 Apply as a filter 菜单中选择 Selected ,以快速构建一个显示过滤器来检查单个对话。
  • 计算窗口大小 ( tcp.window_size ):这是计算出的 tcp 窗口大小。当缓冲区大小减少到零窗口条件发生或几乎发生的程度时,此列可用于快速发现数据传递流中的时间段。

服务器处理时间事件

响应时间不佳的最常见的原因之一是过长的服务器处理时间事件,这可能是由应用服务器本身的处理时间和/或对后端数据库或其他数据源的大量请求的长响应时间导致的延迟造成的。

在 Wireshark 中,使用以下方法可以很容易地确认和测量这些响应时间:

  1. 使用上一节讨论的排序的增量时间列方法来识别合法的响应时间事件后,单击可疑数据包,然后单击增量时间列标题,直到它不再处于排序模式。这将导致选中的数据包在数据包列表窗格的中间突出显示,并且显示的数据包恢复到原来的顺序。

  2. 检查前几个数据包,找出导致长响应时间的请求。你会多次看到的模式是:

    1. 用户向服务器发送请求。
    2. 服务器相当快地确认请求(用一个**【ACK】**包)。
    3. 一段时间后,服务器开始发送数据包服务请求;第一个数据包是您在排序的 Delta Time 视图中看到并选择的数据包。

当服务器实际开始发送数据时,在第一个用户请求包和第三个包之间到期的时间是 第一字节响应时间。在这方面,您将会看到由服务器处理时间导致的较长的响应时间。这种影响可以在用户和服务器之间看到,也可以在应用服务器和数据库服务器或其他数据源之间看到。

在下面的截图中,您可以看到一个来自客户端的 GET 请求,随后是 198 毫秒后来自服务器的 ACK 包(在 Delta Time Displ 列中的 0.198651 秒); 1.9 秒后,服务器发送第一个数据包( Info 字段中的 HTTP/1.1 200 OK ,随后是一系列附加数据包的开始,以传送所有请求的数据。在该图中,请求数据包上设置了时间参考。查看 Rel Time 栏,可以看到在原始请求包和第一个字节包之间经过了 2.107481 秒:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_07.jpg

需要注意的是,第一个字节数据包如何在信息字段中汇总取决于 TCP 菜单中允许子处理器重组 TCP 流设置的状态,通过导航到编辑 | 首选项 | 协议可以找到,如下所示:

  • 如果该选项被禁用,第一个字节包将在信息字段显示第一个数据包的内容摘要,如前面截图所示的 HTTP/1.1 200 OK ,后面是一系列数据传递包。这个交付过程的结束没有显著的特征;数据包流会停止,直到收到下一个请求。
  • 如果允许子扇区重组 TCP 流选项被启用,第一个字节包将被简单地总结为重组 PDU 或类似符号的 TCP 段。 HTTP/1.1 200 OK 摘要将显示在本次发送过程中最后一个数据包的 Info 字段,表示请求的数据已经发送。下面的屏幕截图展示了启用此选项的一个示例。这与前面屏幕截图中显示的请求/响应流相同。在 Rel Time 栏中可以看到,从最初的请求到最后一个数据传递包所用的总时间为 2.1097 秒:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_08.jpg

注意

SMB 协议首选项中的重组 SMB 事务有效负载设置将影响 SMB 和 SMB2 响应在信息字段中的汇总方式,类似于 TCP 协议首选项中的相关设置。

在任一情况下,用户所经历的总响应时间将是从客户端请求包到数据传递包结束所经过的时间加上客户端应用处理接收到的数据并在用户屏幕上显示结果所需的(通常)少量时间。

总之,测量从第一个请求到第一个字节包的时间就是服务器响应时间。从第一个请求包到最后一个数据传递包的时间很好地代表了用户的响应时间体验。

申请回合的延迟

下一个最有可能导致响应时间不佳的原因是相对较高的应用周转次数,特别是对于远距离访问应用的远程用户来说。一个应用回合是一个实例,其中客户端应用发出请求,在收到响应之前不会发生任何其他事情,之后会发生另一个请求/响应循环,依此类推。

每个客户机/服务器应用都受到应用转换效应的影响,每个请求/响应周期都会产生一个转换效应。通常由于糟糕的应用设计,应用需要大量的应用来完成一项任务,这可能会导致终端用户在更高延迟的网络路径上响应时间很短,因为等待这些多个请求和响应在网络上来回传输所花费的时间越来越多,而 it 可以很快做到这一点。

例如,如果一个应用需要 100 个应用回合来完成一个任务,并且用户和应用之间的往返时间 ( RTT )是 50 毫秒(典型的越野值),则应用回合延迟将是 5 秒:

100 App Turns X 50 ms RTT network latency = 5 seconds 

除了任何服务器处理和网络传输延迟之外,这种应用转换的效果是额外的等待(响应)时间,总共浪费了 5 秒钟的时间。由此产生的更长的时间不可避免地被归咎于网络;网络支持团队断言网络运行良好,应用团队指出应用运行良好,直到网络参与进来。这种情况还在继续,因此了解应用的转弯效果、其原因以及如何测量和解释它们非常重要。

由于需要下载一个或多个 CSS 文件、JavaScript 文件和多个图像来填充一个页面,Web 应用可能会导致相对较高的应用浏览量。网页设计师可以使用技术来减少应用的周转和下载时间,现代浏览器允许同时使用大量连接,以便可以同时处理多个请求,但在较长的网络路径上,这种影响仍然很明显。许多旧的、传统的应用和微软的服务器消息块 ( SMB )协议也是强加的高应用访问量。

应用转换的存在和影响在数据包捕获中并不直观,除非您知道它们的存在以及如何识别和计数。您可以在 Wireshark 中使用显示过滤器为客户端捕获执行此操作:

ip.scr == 10.1.1.125 && tcp.analysis.ack_rtt > .008 && tcp.flags.ack == 1

您需要将ip.src IP 地址替换为您服务器的 IP 地址,并将tcp.analysis.ack_rtt值调整为用户和服务器之间网络路径的 RTT。应用过滤器后,您将看到代表应用轮次的数据包显示,并且您可以在用户界面底部 Wireshark 的状态栏选项中间部分的【T2 显示的字段中看到应用的总轮次计数。

如果您测量完成一项任务所需的总时间(从第一个请求数据包到最后一个数据传输数据包),并将该时间除以应用周转时间(应用周转次数 X 网络 RTT ),您可以得出一个近似的应用周转时间百分比:

5 seconds app turns delay / 7.5 seconds total response time = 66% of RT 

任何超过 25%的百分比都需要进一步研究如何降低 RTT 延迟(服务器放置)或应用周转次数(应用设计)。

网络路径延迟

高响应时间的第二个主要原因是网络路径延迟,它加剧了上一节中讨论的应用轮换的影响,并影响数据传输吞吐量以及从数据包丢失和后续重新传输中恢复所需的时间。

您可以使用 ICMP ping 数据包来测量客户端和服务器之间的网络路径延迟,但也可以通过测量 TCP 三次握手过程中从客户端 SYN 数据包到服务器的 SYN,ACK 响应之间的时间来确定数据包捕获的延迟,如下图所示的客户端捕获:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_09.jpg

在服务器端捕获中,从 SYN,ACK 到客户端 ACK(三次握手中的第三个数据包)的时间也反映了 RTT。实际上,从任何捕获点来看,从第一个 SYN 数据包到第三个 ACK 数据包的时间都可以很好地表示 RTT,并且假设握手过程中的客户端和服务器响应时间很短。请注意,服务器对 SYN 数据包的响应时间虽然通常很短,但在高负载期间可能会比正常情况下更长,并会影响测量。

高网络路径延迟本身并不是一个错误条件,但显然会对应用在网络上的操作产生负面影响,如前所述。

带宽拥塞

带宽拥塞通过延长在网络路径上传输给定数量的数据所需的时间来影响应用的性能;对于通过繁忙的 WAN 链路访问应用服务器的用户来说,这些影响可能会变得很大。网络支持团队应该能够为路径内 WAN 链路生成带宽使用和可用性报告,以检查这种可能性,但您也可以通过使用正确配置的 Wireshark IO 图来查看较大数据传输期间的网络吞吐量,从而寻找带宽拥塞的证据。

下面的屏幕截图显示了受有限带宽影响的数据传输;2.5 Mbps 标记处的平坦线(本例中的总带宽可用性)清晰可见,因为没有更多的带宽可用于支持更快的传输:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_10.jpg

您可以通过配置 IO 图来确定峰值数据传输速率,单位为比特每秒 ( bps ) ,如下所示:

  • X 轴滴答间隔 : 1 秒
  • Y 轴单位 : 位/节拍
  • 图 2 滤波器 : ip.dst == <IP address of server>
  • 图 4 滤镜 : ip.src == <IP address of server>

这些设置使能够精确显示客户端到服务器(红色)和服务器到客户端(蓝色)方向的网络吞吐量的每秒位数。可以根据需要修改 X 轴面板中的每刻度像素选项、 Y 轴面板中的刻度选项以及其他设置,以获得最佳显示效果,而不会影响测量精度。

请注意,大多数现代应用可能会产生数 Mbps 的短期峰值带宽需求(通过无限制的链路)。网络路径上的 WAN 链路应该有足够的备用容量来满足这些短期需求,否则响应时间将会受到影响。这是一个重要的性能考虑因素。

数据传输

有许多 TCP 数据传输效应会影响应用的性能;这些都可以在 Wireshark 中分析。

TCP 流图

Wireshark 提供 TCP 流图来分析几个关键数据传输指标,包括:

  • 往返时间:该图了从一个数据包到相应 ACK 包的 RTT。

  • 吞吐量:这些是以字节每秒为单位的吞吐量图。

  • Time/sequence(Stephen ’ s-style):可视化基于 TCP 的数据包序列号(以及传输的字节数)随时间的变化。一个理想的图形以一种平滑的方式从左下角流向右上角。

  • 时间/顺序(tcptrace) :这类似于 Stephen 的图表,但是提供了更多的信息。数据包用一个 I-bar 显示屏表示,其中 I-bar 越高,发送的数据越多。还会显示一个代表接收窗口大小的灰色条。当灰色条越来越靠近 I 形条时,接收窗口大小会减小。

  • window scaling : this plots the receive window size.

    Note that

    TCP flow graph is unidirectional. You want to select a packet for the direction of data transmission to get the correct view.

通过在数据包列表窗格中选择 TCP 流中的一个数据包,并从统计菜单中选择 TCP 流图,然后选择时序图(tcptrace) 等选项,可以使用这些分析图。

控制窗口图形类型选项卡中会出现所选择的图形和控制窗口,您可以选择其他类型的分析图形,如下图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_11.jpg

下图所示的时间/顺序图(tcptrace) 描绘了数据传输过程中增加的序列号,以及灰色的接收窗口大小线:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_12.jpg

您可以在图形的某一部分上单击并拖动鼠标来放大某一部分,或者按 + 键放大,按 - 键缩小。点击任何图形中的一个点,会将您带到 Wireshark 的数据包列表窗格中相应的数据包。

IO 图

您还可以通过将 TCP 分析显示过滤器字符串应用到 Wireshark 的 IO 图来分析 TCP 问题对网络吞吐量的影响,例如:

tcp.analysis.flags && !tcp.analysis.window_update

在下面缓慢的 SMB 数据传输的屏幕截图中,可以看到红线中的多个 TCP 问题(在本例中为数据包丢失、重复 ack 和重新传输)对应于吞吐量的降低(黑线):

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_13.jpg

单击 IO 图中的点会将您带到 Wireshark 的数据包列表窗格中相应的数据包,以便您可以调查问题。

IO 图–Wireshark 2.0

Wireshark 2.0 ,也称为 Wireshark Qt,是 Wireshark 版本历史上的一个重大变化,因为它从 GTK+用户界面库过渡到了 Qt,为支持的平台提供了更好的持续 UI 覆盖。Wireshark 的大部分功能和用户界面控制基本保持不变,但 IO 图有所变化。

这些显示在下面的屏幕截图中,其中显示了与前面的屏幕截图中相同的 TCP 问题:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_06_14.jpg

新的 IO 图形窗口具有添加任意多行(使用 + 键)和放大图形行的能力,以及将图形保存为图像或 PDF 文档的能力。

总结

本章涵盖的主题包括故障排除方法、如何使用 Wireshark 对连接和功能问题进行故障排除、性能分析方法、应用性能不佳的五大原因以及如何使用 Wireshark 分析这些原因。

在下一章中,我们将回顾恶意流量的一些常见类型和来源,并介绍安全专家如何使用 Wireshark 来检测这些威胁。

七、安全任务的数据包分析

随着黑客、身份窃贼和企业数据盗窃的威胁日益增加,您需要能够在数据包级别分析网络的安全性。

本章将涉及的主题包括:

  • 安全分析方法
  • 扫描和清扫
  • 操作系统指纹识别
  • 畸形数据包
  • 电话家庭流量
  • 密码破解流量
  • 异常流量

安全分析方法

数据包级别的安全分析基于对可疑流量的检测和分析,也就是说,由于存在不寻常的协议类型或端口,或者不寻常的请求、响应或数据包频率而不符合正常模式的流量。可疑流量可能包括侦察(发现)扫描、呼叫总部行为、拒绝服务攻击、僵尸网络命令或直接攻击或基于病毒或僵尸网络的代理的其他类型的行为。

Wireshark 捕获网络中的战略点,以调查来自特定主机或网段上的可疑数据包,出口点还可以补充任何可能用于向 IT 人员发出可疑流量警报的入侵检测系统 ( IDS )系统。

基线的重要性

如果您对正常情况有一个基准,那么识别异常流量模式的能力将变得更加容易,这些异常流量模式需要调查,而流量是由表现不佳的应用、错误配置或故障设备引起的。基线是与您的主要应用和服务器的典型对话以及它们所在网段上的后台流量的快照。在潜在的安全漏洞情况下,您可以将基准中的正常协议、流量模式和用户会话与当前捕获进行比较,过滤掉正常流量,然后检查差异。

要在安全分析中进行基线比较,您需要定期捕获和存储足够长时间的数据包跟踪文件,以提供典型用户和后台流量模式的良好样本,同时保持文件大小便于在 Wireshark 中使用,例如每个文件 100 MB 到 1 GB。您可以在 Wireshark 的捕获选项窗口中配置环形缓冲区选项,以保存一系列合理大小的文件,用于更长时间的捕获或更繁忙的网段。

虽然您的基准需求和实践将取决于您的环境,但您应该检查的一些流量方面包括:

  • 广播和组播类型和速率:

    • 哪些设备和应用正在使用广播和组播?
    • 典型的广播和组播数据包速率是多少?
  • 应用和协议:

    • 网络上运行着哪些应用?
    • 他们使用的是什么协议和端口?
    • 应用启动序列和典型任务
    • 应用会话是否加密?
    • 是不是所有用户都强制使用加密?有例外吗?
    • 登录/注销顺序和依赖关系是什么?
  • 路由协议和路由更新

  • ICMP 流量

  • 启动序列

  • 名称解析会话

  • 无线连接包括正常的管理、控制和数据帧内容

  • VoIP 和视频通信

  • 空闲时间流量是指没有用户登录时主机与其它主机的通信

  • 哪些备份流程在夜间运行,运行多长时间?

  • 是否有任何可疑的协议或广播/扫描正在发生?

当您检查您的基线捕获时,从 Wireshark 的统计菜单中选择协议层级来查看正在使用的协议的摘要是很有帮助的。例如,在下面的屏幕截图中,您可以看到有一些 互联网中继聊天 ( IRC )流量,以及 普通文件传输协议 ( TFTP )流量,这两种流量在您的网络中可能都不正常,可能是与外部实体进行恶意通信的迹象:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_07_01.jpg

分析正常流量水平和模式的基线也是熟悉您的网络环境及其典型的数据包流和协议的一种很好的方式,这样可以让您更好地发现异常流量。

安全评估工具

安全专家使用几个流行的工具来执行安全评估和漏洞测试。由于这些工具可以生成与黑客和恶意代理可能使用的相同类型的扫描、指纹识别和其他利用活动,因此它们对于数据包分析人员来说非常有用,可以分析他们使用 Wireshark 生成的数据包,从而熟悉不同类型的活动如何出现在数据包跟踪中,还可以构建显示过滤器来检测它们。

最流行的工具之一是 网络映射器 ( Nmap ),一个免费的开源工具,用于网络发现和安全审计。Nmap 运行在所有主要的计算机操作系统上,并提供命令行和 GUI 版本( Zenmap )。

注意

你可以在http://nmap.org找到关于 Nmap 的更多信息,在http://sectools.org可以找到关于其他顶级安全工具的信息。

识别不可接受或可疑的流量

Wireshark 可用于识别网络流量中的异常模式或数据包内容,包括网络扫描、格式错误的数据包以及不应该在您的网络上运行的异常协议、应用和/或对话。以下是可能不可接受和/或需要调查以验证其在您的环境中的合法性的流量类型的一般列表:

  • MAC 或 IP 地址扫描:这些试图识别网络上活跃的主机
  • TCP 或 UDP 端口扫描:这些试图识别活跃的应用和服务

网络管理应用可以生成 IP 地址和端口扫描,以构建或维护要监控/管理的设备和应用列表,但这通常是这些类型流量的唯一合法来源。

  • 明文密码:这些是您可以在 Wireshark 的数据包详情数据包字节字段中看到的密码。这些对于文件传输协议 ( FTP )登录来说是典型的,但在其他地方并不典型或不可接受。
  • 明文数据:这个是数据包有效载荷中可以读取的数据。这是 HTTP 请求和响应的典型情况,常见于应用服务器对数据库的请求和响应,但这些数据库交换应该在隔离的非公共网段上的主机之间进行,或者在物理上安全的环境中进行。
  • 密码破解尝试:这些是重复的、系统的尝试,通常是从一台设备上发现一个工作密码。
  • 恶意形成的数据包:这些是在协议字段中带有故意无效或格式不正确的数据的数据包,旨在利用应用中的漏洞。
  • 呼叫总部流量:这种是来自流氓代理的流量,该代理可能驻留在服务器或工作站上,定期向远程(通常是离网)主机登记。
  • 洪泛或拒绝服务(DOS)攻击:这种是有意以非常高的每秒数据包速率向一台或多台主机发送的流量,试图向主机或网络洪泛大量流量,使其他人无法访问它们的服务。
  • 颠覆性活动:这些包括许多准备和促进中间人攻击的技术,在这种攻击中,设备被诱骗向恶意主机发送数据包以拦截数据。

这只是您可能在网络上看到的恶意流量类型的一个示例;网络安全是日益复杂的攻击和后续对策的不断演变的交换。

随着您安全分析技能的提高,您可能希望在 Wireshark 中构建一个特殊的安全配置文件,其中包括基于显示过滤器的数据包着色规则,以帮助识别可疑或格式错误的数据包,以及一组 过滤器表达式按钮,用于隔离和显示您可能正在寻找的各种类型的可疑流量。

隔离和检查可疑数据包的显示过滤器的一些示例包括:

|

过滤器描述

|

显示过滤器字符串

|
| — | — |
| 检测 ICMP pings 和可能的 ping 扫描 | icmp.type == 8 &#124;&#124; icmp.type == 0 |
| ICMP 目标无法到达过滤器(包括重定向) | (icmp.type >= 3 && icmp.type <= 5) &#124;&#124; icmp.type == 11 &#124;&#124; (icmpv6.type >= 1 && icmpv6.type <= 4) |
| 异常 ICMP 回应请求 | (icmp.type == 8) && !(icmp.code == 0x00) |
| TCP 握手对于检测 TCP 扫描以及检查正常会话设置/拆除/重置非常有用 | (tcp.flags&02 && tcp.seq==0) &#124;&#124; (tcp.flags&12 && tcp.seq==0) &#124;&#124; (tcp.flags.ack && tcp.seq==1 && !tcp.nxtseq > 0 && !tcp.ack >1) &#124;&#124; tcp.flags.fin == 1 &#124;&#124; tcp.flags.reset ==1 |
| 检测圣诞节扫描(设置 URG、FIN 和 PUSH 标志) | tcp.flags == 0x029 |
| 其他可疑的 TCP 设置:TCP SYN/ACK w/ Win 大小大于 1025,SYN、FIN、PSH、URG 位设置,无 TCP 标志设置,TCP 最大段大小设置小于 1460 | ((tcp.flags == 0x02) && (tcp.window_size < 1025)) &#124;&#124; tcp.flags == 0x2b &#124;&#124; tcp.flags == 0x00 &#124;&#124; tcp.options.mss_val < 1460 |
| 网络中继聊天 ( IRC )流量(在你的网络里这正常吗?) | tcp.port == 194 &#124;&#124; (tcp.port >= 6660 && tcp.port <= 6669) &#124;&#124; tcp.port == 7000 |
| 大量 DNS 应答(可能是命令和控制服务器列表) | dns.count.answers > 5 |

扫描和扫掠

恶意程序和流氓进程可能会在发起攻击前使用各种扫描进程调查网络环境中的可用端口和主机。识别这些侦察过程的存在可以在攻击发起前阻止攻击,以及追踪和/或阻止恶意活动的来源——特别是如果该来源在公司内部,其中一些就是如此。

ARP 扫描

ARP 扫描,也称为 ARP 扫描,用于发现网段上活跃的本地主机。ARP 扫描可能很难检测,除非您应用显示过滤器,并观察来自同一设备的稳定、增量扫描,如下面的屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_07_02.jpg

由于 ARP 数据包无法通过路由器传递,进行 ARP 扫描的源设备必须位于发现 ARP 数据包的同一网段。

ICMP ping 扫描

ICMP ping 扫描用于发现本地或远程网段上的活动主机(因为 ICMP 使用 IP 并且是可路由的),使用 ICMP 类型 8 回应请求和类型 0 回应回复一系列 IP 地址。您可以使用显示过滤器icmp.type == 8 || icmp.type == 0轻松检测 ping 扫描。

TCP 端口扫描

TCP 端口扫描允许恶意代理发现目标主机上哪些 TCP 端口是打开的。网络端口是服务器或工作站的入口点;侦听给定端口的服务能够处理来自客户端的请求。恶意代理有时可以利用服务器代码中的漏洞来访问敏感数据或在机器上执行恶意代码,这就是为什么测试所有活动端口对于任何安全验证的完整覆盖都是必要的。

基于 TCP 的服务最常用的一些端口包括:

  • 80 HTTP
  • 443 号
  • 8080 HTTP 代理
  • 8000 HTTP 备用
  • 21 FTP
  • 22 嘘
  • 23 远程登录
  • 3389 微软远程桌面
  • 5900 号
  • 25 SMTP
  • 110 POP3
  • 143 IMAP
  • 3306 MySQL
  • 1433 Microsoft SQL Server
  • 1720 年
  • 5060 小口

TCP 端口扫描设备将向目标主机上的端口发送 TCP SYN 数据包,如果端口打开,该设备将使用 SYN 或 ACK 对做出响应,如果端口关闭,则使用 RST。与 ARP 扫描类似,TCP 扫描可以通过从单个 IP 地址到一系列端口号上的目标 IP 地址的一系列 SYN 数据包来检测。显示过滤器可以使检测这些类型的扫描更加容易:

ip.dest == <IP Address of target host> && tcp.flags.syn

UDP 端口扫描

UDP 端口扫描类似于 TCP 扫描,但它们是针对典型的基于 UDP 的服务运行的,最常见的服务包括:

  • 53 个域名
  • 161/162 SNMP
  • 67/68 DHCP
  • 5060 小口
  • 135 Microsoft Endpoint Mapper
  • 137/139 NetBIOS 名称服务

前面的主题仅涵盖恶意代理使用的最常见扫描的示例。安全分析器应进一步研究这一主题,以识别可能用于利用其特定环境漏洞的所有扫描类型。

操作系统指纹

操作系统指纹识别是一种技术,其中远程机器向目标设备发送各种类型的命令,并分析响应以尝试识别目标设备的操作系统和版本。了解设备运行的操作系统,就有可能利用特定于该操作系统的漏洞。

Nmap 根据一系列端口扫描、ICMP pings 和许多其他测试来检测操作系统,然后根据结果运行一系列后续测试,以进一步定义运行的操作系统版本。

在下面的屏幕截图中,您可以看到 GUI 版本的 Nmap (Zenmap)在完成操作系统检测扫描时的测试结果,以及它对操作系统和版本的最佳估计:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_07_03.jpg

Wireshark 捕获的操作系统检测活动之前描述的作为一个正在运行的操作系统指纹脚本的示例,向目标设备(172.20.0.1)发出一个bogus HTTP 请求,让/nice%20ports%2C/Tri%6Eity.txt%2ebak查看生成了哪种错误响应,这有助于查明操作系统版本:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_07_04.jpg

来自上述请求的 HTML 响应的确切格式可用于识别操作系统和/或 web 服务器版本,如以下 Wireshark 数据包详细信息屏幕截图所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ws-essen/img/4638OS_07_05.jpg

分析这些类型的数据包捕获操作系统指纹识别请求和响应将更容易发现来自恶意实体的类似活动。

格式错误的数据包

恶意的畸形数据包通过故意改变网络协议中数据字段的内容,利用操作系统和应用中的漏洞。这些漏洞可能包括导致系统崩溃(一种拒绝服务形式)或迫使系统执行任意代码。

格式错误的数据包漏洞的一个例子是思科安全顾问思科-sa-20140611-ipv6 ,其中在某个系列的路由器中解析格式错误的 ipv6 数据包的漏洞可能会导致承载网络流量的某个卡的重新加载(重新启动),这可能会间歇性地导致服务中断。

这种漏洞的另一个例子是在一些未打补丁的 Windows 或 Linux 系统中,如果它们接收到一系列片段相互重叠的碎片包,就会崩溃。

畸形数据包的类型和可能性是无穷无尽的,但漏洞通常会在发现时公布,一些漏洞可能会提供数据包的详细信息。您可以在 Wireshark 中构建显示过滤器和/或构建着色规则来检测这些数据包。它还有助于研究和理解不同协议字段正常和合法包含的值的范围,以及 TCP 和其他协议序列通常是什么样子,以便您可以发现数据包流中的可疑内容。

电话回家流量

呼叫总部流量源自设备上的恶意应用,该应用定期连接到远程(通常是离网)主机,以接收更新或命令,或传送从受感染主机收集的数据。大多数呼叫总部流量将是操作系统和病毒防护更新、Dropbox 或其他外部服务,以及类似的授权和适当的服务,因此需要一些努力来识别这种混合的恶意流量。

了解呼叫总部流量可能带来的风险很重要:许多僵尸网络分布式拒绝服务 ( DDoS )攻击得到了被劫持计算机的“僵尸大军”的支持,这些计算机运行的软件可能在一段时间内未被发现,除了与它们的命令和控制 ( C & C )服务器定期通信,等待攻击目标的指令。以类似的方式,击键记录流量将向收集主机发送视频截图和击键数据的定期报告。

识别潜在恶意呼叫总部流量的一种方法是在这些会话启动时捕获并检查 DNS 查询,查看两个不同的区域:

  • 合法服务的主机名通常是可以合理识别的。
  • 对联系 C&C 服务器的非法应用的 DNS 查询通常会返回一长串别名,这些别名的 IP 地址不都在同一个大致范围内(即来自世界各地)。有助于识别具有长响应列表的 DNS 响应的显示过滤器是dns.count.answers > 5

它还有助于建立一个基准,其中包括空闲期流量和已知更新/服务对话框的样本,以便与可疑的捕获进行比较。

破解密码的流量

通过观察从目标主机发送到客户端的大量错误消息,可以检测到密码破解流量反复尝试登录但未成功。有两种常见的密码破解尝试:

  • 字典攻击从常用单词、名称和数字列表开始
  • 暴力攻击使用一系列字符、数字和密钥值

这两种类型都经常被登录安全措施所阻挠,这些措施会在几次失败的登录尝试后锁定一个帐户。

不寻常的流量

虽然很难预料黑客可能会使用什么方法试图渗透网络或主机,但有几件事可能永远不会发生在正常、健康的网络上。由于 ICMP 数据包在测试和传送错误条件方面的有用性,它们很可能成为恶意重定向的目标。由于 TCP 是大多数应用使用的主要传输协议,您应该注意 TCP 报头或有效负载中的异常,这些异常可能是恶意的迹象。

下表讨论了一些需要注意的异常示例:

|

可疑内容

|

描述

|
| — | — |
| TCP 错误标志 | 非法或不太可能的 TCP 标志组合。SYN、SYN/ACK、ACK、PSH、FIN 和 RST 标志在适当的地方使用时是正常的;任何值得调查的事情。 |
| SYN 数据包包含数据 | 初始 TCP SYN 数据包不应包含有效负载数据;它仅用于建立会话。但是,请注意,TCP 中的第三个 ACK 包可以包含数据。 |
| 可疑数据报有效负载内容 | 对操作系统或其他非应用目录、奇怪的可执行文件或其他有效负载数据的引用,这些数据似乎不符合用于发送数据的应用的目的。 |
| 可疑的 ping 负载文本 | 用于填充 ICMP 回应请求数据包有效负载的文本通常是一系列良性的字母和数字或类似的无意义文本。如果该文本似乎携带命令或有意义的数据,它值得调查。 |
| FTP 或 Telnet 会话中的明文密码 | 看到 FTP 被用来传输敏感的商业数据,或者 Telnet 来管理交换机和路由器,不是黑客的恶意企图。这是员工的疏忽行为,因为这两种协议都是通过设计在网络上传输明文登录 id 和密码,即使是不老练的黑客也很容易捕获它们。有 安全 FTP ( sftp )和 安全 Shell ( SSH ) (Telnet 替代)解决方案,适用于网络上的所有平台。 |

总结

本章中关于安全分析的主题包括检测扫描和扫描以识别计划攻击的目标、操作系统指纹识别、检测格式错误的数据包、可疑的分段或乱序发送的数据包、来自恶意代理的呼叫总部流量、识别密码破解尝试以及识别其他异常数据包和有效负载。

在下一章中,我们将回顾 Wireshark 安装中提供的几个关键命令行实用工具,以及几个可以补充您的工具集的附加数据包分析工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值