精通 Wireshark2(一)

零、前言

Wireshark 是 Kali 和 Metasploit 的组合,处理网络协议的第二层到第七层。该书将向您介绍各种协议分析方法,并教您如何进行分析。您将发现并使用一些高级功能,这些功能将增强您的应用的功能。到本书结束时,您将能够使用 Wireshark 2 保护您的网络。

这本书是给谁的

如果您是一名安全专业人员或网络爱好者,对了解网络的内部工作方式感兴趣,并且对使用 Wireshark 有一定的了解,那么这本书适合您。

从这本书中获得最大收益

您需要在 Windows/Linux/macOS 系统中安装 Wireshark。

下载彩色图像

我们还提供了一个 PDF 文件,其中有本书中使用的截图/图表的彩色图像。可以在这里下载:https://www . packtpub . com/sites/default/files/downloads/mastering wireshark 2 _ color images . pdf

使用的惯例

本书通篇使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄。这里有一个例子:“所以,pcapng是下一代的pcap文件扩展名。”

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

nslookup wireshark.org 8.8.8.8

Bold :表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个例子:“我们可以在地址解析协议(请求)选项中看到目标。”

警告或重要提示如下所示。

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

取得联系

我们随时欢迎读者的反馈。

总体反馈:发送电子邮件feedback@packtpub.com,在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发邮件至questions@packtpub.com联系我们。

勘误表:虽然我们已经尽力确保内容的准确性,但错误还是会发生。如果你在这本书里发现了一个错误,请告诉我们,我们将不胜感激。请访问 www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交表格链接,并输入详细信息。

盗版:如果您在互联网上遇到我们作品的任何形式的非法拷贝,如果您能提供我们的地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com联系我们,并提供材料链接。

如果你有兴趣成为一名作家:如果有你擅长的主题,并且你有兴趣写书或投稿,请访问 authors.packtpub.com。

复习

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!

更多关于 Packt 的信息,请访问packtpub.com

一、安装 Wireshark 2

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

  • 安装和设置
    • 在 Windows 上安装 Wireshark
    • 在 macOS 上安装 Wireshark
    • 在 Linux 上安装 Wireshark

安装和设置

在本节中,我们将了解在 Windows 上安装 Wireshark 以及在 macOS 和 Linux 上安装 Wireshark。

在 Windows 上安装 Wireshark

您需要执行以下步骤:

  1. 进入https://www.wireshark.org/网页:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 当你到达那里,向下滚动主页并点击下载。
  2. 将会看到最新版本的 Wireshark。为您当前运行的 Windows 版本选择安装程序。

Most people on a modern computer, on a modern version of Windows, will be running 64-bit.
If you happen to be running an older version of Windows on 32-bit or older hardware, make sure you select the 32-bit version. If you’re not sure which one to use, do the following:
Open your Control Panel, go to System and Security, and click on the System link. In the System section, you’ll see that it says System type: 64-bit Operating System. If you have a 32-bit, it’ll show that here as well.

  1. 返回到下载 Wireshark 页面,下载您需要的版本,并运行该文件;现在,单击“下一步”开始设置。

  2. 阅读许可协议,单击我同意,然后选择您希望包含的 Wireshark 功能。大多数人包括所有的默认设置。您将在这里看到我们有主要的 Wireshark 应用;我们有 Wireshark 的经典接口版本;我们还有 TShark,它是运行 Wireshark 的命令行版本;以及一些插件、用户指南和一些附加工具:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我们将接受默认值,然后单击“Next”。在此窗口中,我们可以自定义显示哪些快捷方式,以及文件扩展名是否与 Wireshark 关联。我们将关闭 Wireshark 传统快速启动图标和 Wireshark 传统开始菜单项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 继续操作,单击“下一步”,并选择 Wireshark 的安装位置。我们也将在这里选择默认值。

  2. 而在这里的下一页上,写着:安装 WinPcap?如果您没有安装 WinPcap,请保持选中状态,它会在安装过程中安装它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

WinPcap 是允许 Wireshark 与您的网卡连接的驱动程序。WinPcap 是查看所有数据包所必需的。

  1. 点击下一步。

您也可以安装 USBPcap,它允许您查看 USB 连接上的流量。大多数人不需要这个,所以我们不选中它。

  1. 点击“安装”, Wireshark 将开始安装。
  2. 安装进行到一半时,WinPcap 安装程序将会运行,我们将继续并单击“Next”。
  3. 阅读许可协议,然后单击我同意。然后,您可以决定是否希望 WinPcap 驱动程序在启动时运行。大多数人允许它这样做。我们将保留默认设置,并单击“Install”。
  4. 那会很快结束;然后点击完成。
  5. Wireshark 安装将继续。当文本窗口显示已完成时,继续操作并单击 Next 然后您可以选择是否要在此时运行 Wireshark,并单击 Finish。

一旦 Wireshark GUI 加载完毕,您就完成了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下一节中,我们将介绍如何在 macOS 和 Linux 上安装 Wireshark。

在 macOS 上安装 Wireshark

要在 macOS 上安装 Wireshark,请执行以下步骤:

  1. 首先进入 https://www.wireshark.org/的网页。
  2. 当你在网页上,向下滚动主页,点击下载。将显示 Wireshark 的最新版本。
  3. 下到 macOS 10.6 以及更高的 Intel 64 位。dmg,点击下载:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 此时,我们可以选择将文件保存到我们的下载文件夹中,然后打开它,或者直接用 DiskImageMounter 打开它(默认)。

  2. 继续并点击确定。它下载文件并打开它。

  3. 然后我们可以双击PKG文件,并点击继续:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 阅读许可协议,再次单击继续,然后单击同意以表明您同意许可协议。

如果您希望更改安装位置,现在就可以这样做。

  1. 点击安装。

  2. 输入您的管理员凭据,然后单击安装软件。

  3. 安装成功后,单击关闭。

  4. 如果您转到右下方的应用列表,向下滚动,您应该会在列表底部看到 Wireshark。您可以选择 Wireshark,您可以看到它现在已经加载:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦 Wireshark 启动并运行,就大功告成了。

在 Linux 上安装 Wireshark

根据您使用的发行版,在 Linux 上安装 Wireshark 会有所不同。在这里,我使用最常见的发行版之一:Ubuntu。要安装 Wireshark,请执行以下步骤:

  1. 我们将进入 Ubuntu 软件应用;继续点击,我们将搜索synaptic:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新立得是一个类似于 Ubuntu 软件应用的软件包管理器,但是它给了你更多的控制权。

  1. 只需点击安装;输入您的管理员密码(您的 root 密码),软件将被安装:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 继续点击新立得软件包管理器来打开它。再次输入我们的凭证,现在我们已经加载了 Synaptic 应用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 这也非常类似于 Ubuntu 软件应用,但是不那么漂亮。
  2. 单击“搜索”按钮,我们将搜索 Wireshark。输入wireshark并点击 Search,您将看到名称或描述中包含 Wireshark 的所有内容现在都显示在包列表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我们将向下滚动并选择主 wireshark 包,只选择标有 Wireshark 的包,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 所以我们会选择它。点击它,并选择标记为安装。然后它会问你是否可以安装其他需要的软件包。我们可以说当然,那很好;标记它们以便安装。因此,现在我们所有的依赖项也将被安装:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 然后,我们可以上去单击“Apply ”,它会告诉我们将安装以下软件包。再次点击应用,新立得将继续下载并安装我们选择的所有程序:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此时,您将收到一个弹出窗口,询问您非超级用户是否应该能够捕获数据包。我建议选择是。这将允许您将根用户与标准用户分开,但仍然允许您作为标准用户捕获数据包。

  1. 一旦一切都完成了,你会收到一个应用的变化窗口。它会说:已成功应用所有更改。你现在可以关闭窗口了。
  2. 只需单击“Close ”,您就会看到这里用绿色标记的所有东西都已安装完毕,包括 Wireshark:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 因此,在这一点上,我们可以关闭这个程序以及 Ubuntu 软件。接下来,点击界面左上角的搜索按钮,我们输入wireshark。它自动显示 Wireshark 在这里。我们只需点击它,它就会加载 Wireshark。
  2. 此时,一旦 Wireshark 加载完毕,您就大功告成了。

摘要

在本章中,您已经学习了如何在 macOS 和 Linux 上安装 Wireshark,特别是 Ubuntu。

第 2 章Wireshark 入门中,我们将了解 Wireshark 2 的新增功能,包括捕获流量、保存和导出数据包、注释和打印数据包、远程捕获设置和远程捕获使用。

二、Wireshark 入门

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

  • Wireshark 2 的新功能
  • 捕获流量
  • 保存和导出数据包
  • 注释和打印数据包
  • 远程捕获设置
  • 远程捕获使用

Wireshark 2 有什么新功能?

Wireshark 推出了新版本,这是一个新的主要版本,具有许多有趣的功能。在这里,您可以看到新的 Qt GUI:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它看起来非常类似于传统的 GTK 图形用户界面,只有一些小的改动。这里的主菜单栏已经更改并删除了一些图标;通用界面更简洁一些。不过,所有的通用功能都是一样的。捕获选项位于左上角,由齿轮图标表示。当您单击齿轮图标时,您会看到输入选项、输出选项和常规选项的多个选项卡:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当您点击编辑|首选项时…,您可以看到首选项窗口,如下图所示。“显示至”等选项使导航和查看您需要查看的内容变得更加容易:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如下面的屏幕截图所示,在左侧,您可以看到根据您的选择显示的相关数据包图表。因此,如果你选择不同的包,这将改变大小和形状;你所选择的可能出现在你面前。这使得挑选彼此相关的包变得容易,而不必遵循 TCP 或 UDP 流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在菜单栏中的 Statistics 菜单下,许多统计选项现在都有一个外观相似的窗口,如下面的屏幕截图所示。如果您看一下按钮、过滤器和通用接口是如何设置的,它们现在都是标准化的,看起来彼此非常非常相似,我相信这使那些从事 Wireshark 代码工作的人更容易编写代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击统计|输入输出图表;现在您可以看到 Wireshark IO 图。在左下方,您可以单击加号图标,向 IO 图中的图表添加多个项目,并且您可以不限次数地执行此操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,您在此所做的任何更改都会保存到您的个人资料中。在此图表中,您还可以单击另存为…并选择不同的文件格式以供选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击分析|跟随| UDP 流;您可以看到“跟随流”对话框已经更新,现在它允许您选择是整个对话还是一次仅一面。它还允许您在以下范围内搜索文本:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前面的截图中,您可以看到上下文感知提示在起作用。在这个流中,如果您查看底部,您会看到一些信息,如客户端数据包、服务器数据包等,这些信息会根据您悬停的对象而变化。主捕获窗口将变为实际数据包。

这对于浏览数据和查看与整个捕获相关的数据非常方便。

现在让我们看看如何捕获流量,并在主窗口中获取第一个数据包。

捕获流量

我敢肯定,您在 Wireshark 中想做的第一件事就是开始捕获一些流量,这样您就可以习惯该实用工具,并可能诊断您自己网络上的一些问题。在本节中,我们将具体讨论:在哪里捕获流量以及如何捕获流量。

Wireshark 需要以某种方式接收数据包,以便您可以开始分析数据并执行网络诊断。在 Wireshark 中有几种方法可以做到这一点。一种方法是在通过 GUI 安装了 Wireshark 的本地设备上开始捕获。您也可以选择通过命令行这样做。例如,您可以从安装在管理计算机上的 Wireshark 进行远程捕获。它可以使用特殊的驱动程序安装来检索从网络上的其他设备接收和发送的数据包。您还可以在线捕获流量,这意味着您可以在需要诊断的数据路径上放置一个名为测试操作端口 ( TAP )的设备,然后它会将数据发送回您的诊断实用工具,其中一个可能是 Wireshark。最后,我们将了解如何在网络设备(特别是 Cisco 路由器或交换机)上本地存储数据包,以便作为pcap文件导出到 Wireshark。

如何抓取流量

为了捕获 Wireshark 的内联通信量,您需要在线路上放置某种设备,使其能够看到发送和接收的通信量,然后将该通信量复制到您的诊断机器的其他端口,例如,这些诊断机器可能正在运行 Wireshark。我们可以在运行半双工的旧网络中使用的早期设备之一是集线器。这是交换机的前身,它有一个非常基本的功能,即看到通过线路发送的电信号,并将这些电信号复制到它拥有的所有其他端口,而不关心这些实际端口上有什么。基本上,这只是一个分离器。这对一个较慢、较老的半双工网络来说非常好;但是对于一个现代的、交换式的、全双工的网络,你将需要一些更好的东西。你可以使用的一种设备是水龙头。

有四种不同的抽头可用:

  • 非聚集龙头
  • 聚合点击
  • 再生水龙头
  • 链路聚合抽头

每个水龙头都有不同的功能。我提到了交换端口分析 ( SPAN )端口或端口镜像。在现代交换网络中,这是一种非常常见的接收流量的方式。如果您有一个被管理的交换机,如 Cisco 交换机或其他任何交换机,您可以进入交换机,告诉它将它在一个端口上看到的流量复制到另一个端口。然后,此端口可以连接到您的 Wireshark 机器来捕获流量。它对现代网络非常有用,因为不需要其他硬件。您只需进入交换机,告诉它将数据复制到您的监控系统。为了捕获无线通信,您需要知道有多种模式可以使用。我们将讨论两种模式:

  • 监控模式:该模式接收指定通道上的所有数据包。例如,在美国,我们有 11 个 2.4 GHz 的频道。您可以告诉您的网卡或无线网卡接收 3 号信道上的所有流量,然后它将捕获 3 号信道上任何 SSID 和任何网络的所有流量。
  • 混杂模式:这种模式在您的无线驱动程序中更常见,它允许您在连接的网络上接收连接的 SSID 上的所有数据包。如果您连接到您的工作网络或家庭网络——无论您试图诊断的是什么——它都会捕获通过该网络名称和 SSID 的任何内容。但是它会忽略同一频道上的任何其他频道,当然也会忽略任何其他频道上的任何其他频道。

在下面的截图中,我们可以看到 Wireshark 正在运行。您可以看到我这里有一个接口列表,包括一个本地连接和一些虚拟适配器。我这台电脑上没有任何无线适配器,否则它们也会出现在这里。以及您可能拥有的任何其他额外的网络接口控制器 ( 网卡)卡——有线卡,没关系——它们都会显示在这里的列表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您还会看到 Wireshark 继续绘制的图表,它向我们显示了它在每个连接上看到的数据量。这实际上非常有用,尤其是如果您有一台具有许多不同接口的诊断计算机——不同的 SPAN 端口,或者任何可能的接口。也许您打开了接收大量数据的特定端口的 SPAN,但您不知道它连接到监控系统的哪个端口。你可以看看这里。接收最多数据或预期数据量的端口可能是您想要尝试和捕获的端口。所以我发现这在拥挤的系统中很有用。

为了捕获流量,在最新版本的 Wireshark 中,您只需双击它,它就会开始捕获您的流量,您可以看到流量开始滚动。在这台电脑中,我实际上并没有做什么非常有趣的事情,考虑到有多少流量被发送和接收,但有一些服务正在后台运行,可能有最小化的网络浏览器,诸如此类。但是你会看到在一台标准的空闲计算机上有相当多的通信:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要停止此捕获,您只需进入顶部并单击停止图标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你会注意到数据包在滚动并实时更新。嗯,这在某些情况下是有用的——可能不是对所有人都有用。因此,如果您的系统正在接收大量数据,例如,可能是每秒千兆比特,或者如果您试图在一台非常旧且非常慢的计算机上运行这些数据,这可能不是一个理想的情况,尤其是如果您使用 GUI。

所以你可以把它关掉,这样它就不会使用显卡和处理器来尝试实时更新屏幕。为此,请执行以下步骤:

  1. 点击齿轮图标,如以下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 转到选项,您可以看到这里有一些复选框,我们可以将其关闭。因此,您可以实时看到数据包的更新列表。如果我取消选中该选项,它将阻止列表继续接收数据包,并且我可以在实时捕获期间关闭自动滚动。你会注意到右边的滚动条一直到了最底部。如果我在实时拍摄过程中关闭自动滚动,它会保持在顶部。所以,正如我提到的,如果你在一台旧电脑上运行,禁用这两项非常有用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 您也可以选择多个接口。如果您返回到选项选择并查看输入选项卡,您可以使用 Shift 键选择多个接口;或者,使用 Ctrl 键,您可以单独选择它们,然后单击开始,它将在您选择的所有接口上进行捕获。根据您的情况,这可能是一个有用的功能。

在本节中,我们讨论了一些不同的捕获数据包的方法;如何让他们进入你的 Wireshark 捕获系统。接下来,我们将保存这些数据包,并以各种方式导出它们。

保存和导出数据包

在本节中,我们将了解以下子主题:

  • 如何保存数据包捕获
  • 如何保存数据包的选定部分、单个数据包和数据包范围
  • 如何将数据包导出为其他格式
  • 如何从您选择的捕获中导出原始数据包数据

现在我们已经启动并运行了 Wireshark,让我们捕获一些流量。我们将选择本地连接,我们可以双击我提到的连接,也可以从顶部开始捕获。我们会收到一些包裹。现在,如果我想保存这个捕获(整个捕获—我刚刚捕获的所有数据包),我将转到文件|另存为…;从这里,我可以简单地选择一个文件名。所以,我们就叫它packets。您会看到在保存类型中,我选择文件为pcapng:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,pcapng是下一代的pcap文件扩展名。它是与 Wireshark 1.8 一起发布的,所以它相对较新,并且包括一些额外的特性,我们将在以后的章节中讨论这些特性。但是你应该知道,.pcapng文件扩展名是新的标准,所以如果你看到一个结尾没有ng.pcap文件,那是一个旧的捕获文件,你当然可以把它保存为.pcapng,因为这是现在的默认设置。但是,请注意,如果您将一个pcapng文件保存为原始的pcap文件,您将会失去ng格式的一些功能。所以,我的建议是坚持使用ng格式。几乎所有使用pcap文件的插件和附加软件现在都支持ng格式,所以你可以继续使用它。您还会注意到这里不同的长采集扩展。您已经列出了.gz,对于pcapng,您还有.gzntar.gz等等。为了达到这个目的,你必须选择用 gzip 压缩选项。所以当你选择用 gzip 压缩时,就像把文件放入一个 zip 文件一样,它会获取你的捕获文件,并试图压缩它使它变得更小。因此,如果是大规模捕获,请记住数据包捕获包括从您正在捕获的网卡穿越网络的所有数据。因此,如果您在执行捕获时传输大量数据,所有这些数据都将保存在您的捕获中。传输的数据将是 1:1 的比例,因此可能非常大。gzip 对你来说可能是有意义的,因为那样的话,你硬盘上的文件会小得多。此外,如果您尝试将文件传输到您的网络,那么这可能会节省传输文件的时间,因为传输的文件会更小。但是,大多数时候它是不被使用的,尤其是如果你过滤掉你只需要在一个捕获中看到的东西,并且你最终只保存了你需要的东西,那么它们通常是非常小的。

现在,我们将保存该捕获。说到过滤掉你想看的东西,缩小捕获范围,我们就这么做吧。

这里有一些 HTTP 流量,我们将右键单击它,然后单击“Follow | TCP Stream”。这样,我们就有了某种流,可以过滤掉数据包捕获中的所有其他数据。所以我们选择了七个包。如果我只想将这些数据包保存到一个新文件中,我将转到文件|导出指定的数据包…我们称之为packet small,您会看到这里有一个单选按钮,可以在显示和捕获之间进行选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如此捕获的是整个数据包捕获。这几乎增加了2870个数据包。Displayed 将只保存当前过滤的内容和我的数据包列表视图中显示的内容。因此,如果我在所有数据包中显示了选中,这将把所有七个数据包导出到一个新文件中。此外,我可以选择选定的数据包。因此,您会看到我当前选择了数据包编号16;这里的颜色略有不同。如果我选择选定的数据包,这只会将一个数据包保存到一个新文件中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我也可以选择一个范围。现在,范围现在不会显示任何内容,因为我们有自己的小过滤器,但我可以做的是清除这个过滤器。我们将返回导出指定的数据包…并保存数据包范围。我们可以说数据包5200。所以有196包将被保存到packets range文件中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,您可以通过转到文件|导出数据包剖析来导出数据包剖析,然后选择您想要的格式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以我们选择纯文本…,我们就叫它packet dissect。我们将只处理选定的数据包,这里有我们的packet dissect文本文件,您可以看到它包含数据包编号、数据包进入的时间、源和目的 IP 地址、协议是什么、有关协议的任何信息,以及您可以在数据包详细信息部分看到的基本信息;这些现在都保存在文本文件中,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您的数据包捕获碰巧捕获了任何安全流量,如任何 HTTPS、SSL 或 SSH 流量,您可以使用文件|导出 SSL 会话密钥…,然后保存这些 SSL 密钥,以便将来在其他应用中使用。

您可能已经注意到了一个灰色的附加导出:导出包字节…:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了使其成为可选择的,您需要在您的包中选择应用数据。在这里,我们选择了 HTTP 数据包数据。如果我们回到文件,您会看到导出数据包字节…现在可以选择。如果我选择了这个选项,我现在可以用原始的二进制格式从我的包中导出我的数据。如果你正在用一个十六进制编辑器做一些事情,或者把这些部分结合起来用于一些其他的应用,它可能是有用的。

在本节中,您学习了如何保存和导出数据包:整个数据包捕获、数据包捕获的子集(如过滤视图)、单个数据包,以及将原始数据导出为不同格式(如文本文件)。

注释和打印数据包

在本节中,我们将了解以下子主题:

  • 如何使用新的注释功能,也称为注释
  • 如何找到带有注释的包,有多种方法可以找到
  • 如何打印数据包

现在,让我们用一些包来工作。我要开始快速抓拍了。

要为数据包捕获(整个捕获本身)创建注释,您可以在 Wireshark 的左下角完成。您可以看到下面有两个图标:一个是圆形图标,称为专家信息,我们将在以后的部分中介绍;还有一个铅笔图标,带有数据包捕获图标。如果你把鼠标放在铅笔图标上,它会说打开捕获文件属性对话框:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单击它,将会打开一个弹出窗口,为您提供一系列不同的捕获信息。这里有一个底部部分,称为文件注释,您可以在这里为整个数据包捕获输入任何类型的描述。所以也许这就是,Capture from the management PC to the server. Data appears slow.。单击“保存评论”按钮,这将为您保存评论:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我单击 Save Comments 时,您还会看到文件注释出现在顶部窗格的底部。

您还可以为单个数据包创建注释,为此,您可以选择要为其创建注释的数据包,右键单击它,然后转到数据包注释…您会看到有一个小弹出窗口供您输入数据包注释,比如说,This packet looks bad.或您可能想输入的任何内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击确定。当您这样做时,您会看到在数据包详细信息区域中,会弹出数据包注释部分,并且是漂亮的亮绿色,因此您可以看到这一点。如果你展开它,它会显示你输入的评论:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果我选择不同的数据包,它不会显示。因此,如果我返回到我选择的数据包,它会再次显示。现在,您可能想知道:如何在捕获中找到带有注释的数据包?有多种方法可以做到这一点。其中一种方法是右键单击详细信息区域中的数据包注释字段,我们将转到应用为列。当您单击它时,它会创建一个列,显示该数据包是否有注释:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,我还可以点击左下角的“专家信息”按钮。当你点击它时,它会给我们一大堆关于我们捕获的信息,我们暂时忽略这些信息。但在最底部,有一个注释部分,它会说,7 号数据包有一个注释,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有趣的是,如果我将它移到一边,选择另一个数据包,我们会一直走到底部,选择数据包 60,然后如果我单击数据包 7 中的注释,您会看到数据包列表会自动跳转到数据包 7,为我选择它,并显示注释。这不是很好吗?

查找数据包注释的第三种方法是右键单击数据包注释,然后转到应用为过滤器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当你这样做时,它会通过pkt_comment过滤你的数据包列表,这是一个字段名称,表示一个数据包中是否有注释。在这里,您会看到数据包编号7现在是唯一显示的数据包,因为这是我们唯一添加了注释的数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果我清除它,我们在另一个数据包Comment 2上添加另一个注释,如果我对数据包注释重新应用过滤器,我们可以看到这里有两个数据包。所以,这是另一种能够在其中找到评论的方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要打印您的捕获或打印单个数据包,您可以转到文件|打印…您会看到这里有许多选项,看起来类似于保存和导出对话框。我们可以为每个数据包打印一个摘要行,如果您取消选中此选项,您将看到预览会随着您的操作而改变,因此您可以看到文件的外观。有一个总结行,它为我们提供列表中每个数据包的信息,总结行看起来有点像数据包列表视图。因此,将会有一行是数据包1及其相关信息,然后是另一行是数据包2及其相关信息的摘要,以此类推。所以这实际上是一个很方便的选择。

详细信息:将向您显示有关不同协议的信息的数据包详细信息列表,因此我们可以打开或关闭它。如果我关闭它,基本上只会显示数据包列表视图。我要让它开着。如果需要的话,我还可以包含字节。对于许多数据包,您不会想要这样做。显然,您的打印会非常大,但是您可以看到,如果我打开它,它会显示实际的字节信息,如底部的字节所示。所以我现在先把它放下。您会注意到在底部,就像我们在导出对话框中一样,您可以选择选项“仅选定数据包”或“所有数据包”。您也可以只选择标记的数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传How to mark packets
What you can do is right-click on a packet and mark it, or do Ctrl + M. And you can mark a whole bunch of them, and they can be anywhere in the capture, it doesn’t matter where-they don’t have to be contiguous; and we’ll mark up a bunch.

我们将打印这个,您可以在这里看到我们打印的文件。我把它打印成了 PDF 文件,这样你就可以很容易地看到它。您可以看到这里显示了每个数据包的摘要行。摘要行基本上是数据包列表行,包括数据包到达时的数据包编号、源和目的地、协议等等,以及我们希望它打印的详细信息。这是关于它捕获的数据包中涉及哪些协议的最基本信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,在本节中,您学习了如何为数据包捕获创建注释和注释,以及为单个数据包创建注释或注释,如何在界面的不同位置查看和查找它们,例如在列或过滤器上,或在数据包详细信息视图中,专家信息,以及如何打印数据包。接下来是远程捕获设置。我们将讨论如何通过 Wireshark GUI 从远程机器上捕获数据,并在远程机器上运行libpcap

远程捕获设置

在本节中,我们将了解使用远程捕获的先决条件,特别是 WinPcap,它是libpcap库的一个 Windows 端口,以及远程设备上远程数据包捕获的配置。

先决条件

第一个先决条件是安装pcap库。我在这里使用一台 Windows 计算机作为我们的测试机器,所以我将安装WinPcap库,这是最初为 Linux 编写的libpcap库的一个 Windows 端口。所以我要做的就是去 https://www.winpcap.org/的下载WinPcap库。一旦它完成下载,我将继续进行,只需点击安装程序的下一步,没有必要定制任何东西。

当您捆绑下载 Wireshark 时,安装的WinPcap库也会随 Wireshark 一起提供。因此,如果您已经在系统上安装了 Wireshark,很可能您也已经安装了pcap

下一步是设置一个本地管理员帐户,该帐户将成为运行在这个远程系统上的远程服务pcap的服务帐户。当我们添加远程接口时,它用于运行 Wireshark GUI 的系统的身份验证。为此,我们将执行以下步骤:

  1. 按下 Windows 键+R;它将调出运行命令。
  2. 输入control userpasswords2
  3. 继续并点击确定。
  4. 我们将转到“高级”,再次单击“高级”。
  5. 转到“用户”,我们将创建一个新用户…;我们称之为pcap
  6. 我们会说它是一个Service Account并给它一个密码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我将取消选中第一个选项,强制用户创建新密码,因为这是一个服务帐户。我们还将防止它改变其密码,永远不会让它过期。我们当然不希望服务帐户的密码被更改,因为我们正在尝试使用它。

  2. 现在我们有了自己的pcap服务帐户,我们需要给它管理员权限。因此,我们通过右键单击 pcap 来实现这一点。转到“属性”|“成员”|,我们将单击“添加”…键入Administrators,然后点击 Check Names,这将告诉它验证是否正确键入了组 Administrators:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 单击“OK ”,我们可以继续并再次单击“OK”。

  2. 现在,pcap服务帐户拥有管理员权限。设置远程WinPcap服务的最后一步是再次按下 Windows 键,然后按下 R 。我们将调出我们的运行提示并键入services.msc

  3. 继续按进入或点击 OK,我们将向下滚动,直到我们看到远程数据包捕获协议 v.0(实验)。虽然它说的是 v.0 和实验性的,但这是一项已经提供了很长时间的服务,我从未遇到过任何问题。

  4. 继续并右键单击它。转到属性并单击登录选项卡。

  5. 我们将选择此帐户:单选选项并浏览…给pcap用户,或者你给你的用户起的名字。输入并点击检查姓名。它会验证拼写是否正确,并找到帐户。

  6. 然后我们会输入我们给它的密码。好吧。点击确定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它会说它被授予了服务权利;那很好。此时,我们可以告诉它启动服务。

你可以通过点击顶部的小播放图标来完成;点击那里的开始快捷方式;或者右键单击该服务,直到它启动。

此时应该显示正在运行。为了以防万一,我喜欢做的是在顶部点击“刷新”——只需刷新几次;确保服务根本没有崩溃。

至此,一切都已准备就绪,可以使用了。最后要检查的是确保 Windows 防火墙关闭,或者启用端口2002通过 Windows 防火墙。为了简单起见,我们将关闭它,所以按下 Windows 键,调出 Windows 开始菜单,我们将搜索firewall。所以在 Windows 10 中,你只需输入,它就会开始搜索。我将转到 Windows 防火墙中的控制面板,您将在这里看到它当前处于启用状态。我们将单击“打开或关闭 Windows 防火墙”,我将关闭它。单击“OK ”,我们可以关闭:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是建立一个远程系统的全部内容。因此,在本节中,我们已经讨论了远程系统的所有配置和安装需求。接下来,我们将了解远程捕获的用法,以及如何在 Wireshark GUI 中设置远程捕获,并开始从远程设备捕获流量。

远程捕获使用

在本节中,我们将了解如何在远程系统上使用我们用 WinPcap 设置远程数据包捕获软件。

为了使用在远程系统上运行的远程 WinPcap 服务并从中捕获数据包,我们需要将它添加到我们的本地 Wireshark 接口中,以便我们能够捕获它。为此,我们将执行以下步骤:

  1. 我们将继续操作,并单击“Capture options”图标。
  2. 点击管理接口…您会看到这里有“远程接口”选项卡;点击那个。
  3. 点击左下角的加号图标。
  4. 输入该远程系统的主机 IP 地址。
  5. 单击 Password authentication 单选按钮,输入我们创建的服务帐户的凭据。我在这里用了pcap。然后,您可以输入用户名和密码,并单击确定。此时,它应该向我们显示它在另一台设备上看到的远程接口。你看,这是我的5.25设备,这是它检测到的接口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果此时您没有看到这一点,或者您得到一个弹出窗口,说您有某种连接错误或者它不能连接到远程主机,或者类似的事情,请确保该服务正在运行。请记住,当我们在远程系统上设置服务时,它是手动的,而不是自动的。所以很有可能服务器停止了或者系统重启了,或者类似的事情。转到那里,确保服务已启用。

  1. 因此,我们继续操作,并单击“OK”。您会看到它显示在我们的界面列表中。然后,我们可以点击“开始”:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是全部了。

摘要

在本章中,您已经学习了 Wireshark 中的许多技能,包括 Wireshark 2 中的新功能,以及我提到的 1.8 中的一些功能,即如何在本地 Wireshark 安装中捕获流量;如何通过不同的方式将数据包发送到 Wireshark 系统,例如 SPAN 端口;以不同的方式保存和导出这些数据包;对数据包捕获和单个数据包进行注释或添加注释,并打印它们或它们的选集;最后,在远程 Windows 系统上使用 WinPcap 设置远程数据包捕获,并在本地 Wireshark 安装中使用远程系统的数据包捕获。

第 3 章过滤流量中,我们将讨论过滤流量的各种方式,既有捕获过滤器,也有显示过滤器,还会看看其他过滤方式。

三、过滤流量

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

  • 柏克莱包过滤 ( BPF )语法
  • 捕获过滤器
  • 显示过滤器
  • 跟随溪流
  • 高级过滤

Berkeley 包过滤(BPF)语法

在本节中,我们将了解一下 BPF、它的语法和一些历史。

那么,让我们来谈谈 BPF 的历史。许多年前,每个操作系统都有自己的包过滤 API。这方面的例子很多,如 Sun、DEC、SGI 和 Xerox。他们都有自己的操作系统,每个操作系统都有自己的 API 来捕获和过滤数据包。因此,当您需要进行网络分析时,您必须使用内置于操作系统中的特定软件,以及他们设计的 API 中的特定过滤功能。这使得事情变得非常困难,因为根据您的网络实施情况和所涉及的不同操作系统,您必须了解所有这些不同的 API 和所有这些不同的过滤规则,才能完成任何事情。因此,在 1993 年,Steven McCanne 和 Van Jacobson 发布了一篇名为BSD 数据包过滤器(BPF) 的论文,他们概述了 BPF 背后的规则和思想,并解释了它如何成为过滤捕获流量的标准化方法。恰好它流行起来,变得非常受欢迎,特别是当libpcap、WinPcap 和其他库开始使用 BPF 作为它的标准化过滤系统,尤其是现在使用 Wireshark 的时候。

为了编写 BPF,您需要创建一个表达式,它包含一个或多个原语,包括一个 ID,如名称或号码、一个 IP 地址或一个以太网地址加上一个限定符。限定符包含以下三个部分:

  • 类型
  • 方向
  • 草案

对于一个类型,它可以是一台单独的主机、一个网络、一个端口或一个端口范围。方向可以是源或目的地,也可以是源和目的地。协议可以是以太网、FDDI、无线局域网、IP、现在的 IPv6、ARP、RARP、DECNET、TCP 或 UDP。您需要定义您想要的这些不同的部分,以及您想要如何限制您的流量和与之相关的值——与这些限定符相关的 ID、名称或编号。所以,我有一些例子给你,这样它可以让你明白如何创建一个 BPF 表达式。第一个是ip host 192.168.1.1。IP 是协议,主机是类型,ID 是 IP 地址。这将过滤该 IP 地址的流量,无论它是源还是目的地。这个 host 关键字为我们做了这两项工作。

接下来,我有了ether src AA:BB:CC:DD:EE:FF和一个虚构的 MAC 地址。这和 IP 主机的思路是一样的。我们将以太网定义为我们的协议,将源定义为方向,并将 MAC 地址定义为我们正在寻找的地址。

如果您碰巧捕获到具有多个 VLAN 的流量,例如跨越一个作为交换机中继端口的端口,您可以指定 VLAN,例如vlan 100

下一个例子是ether broadcast,这个例子有一个特殊的关键字用于广播,告诉 BPF,如果它是某种类型的广播,我们要在第 2 层过滤我们所有的流量。

而我的最后一个例子是tcp port 80。因此,我们将过滤该流量,寻找最有可能的 HTTP 流量,仅寻找任何源目的地的端口80

接下来是捕获过滤器,我们将把这种 BPF 语法应用于 Wireshark 中的接口。

捕获过滤器

在本节中,我们将了解如何在使用 BPF 语法捕获流量之前对其进行过滤。因此,我们将在捕获接口上过滤流量。

在 Wireshark 中,有两个地方可以输入捕获过滤器。

第一个就在下面的主屏幕上。在正中间,我们有捕获部分,它说,…使用此过滤器:输入捕获过滤器。所以,我们实际上可以在主屏幕上这样做。尝试输入一个捕获过滤器,然后它将开始捕获应用的过滤器。您还会看到有一个绿色的书签图标,如下图所示。如果你将鼠标悬停在图标上,它会显示管理保存的书签。如果我们单击它,Wireshark 中已经内置了许多保存的书签。因此,如果您想要筛选某个常用功能,它可能已经在列表中了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是您也可以转到顶部,单击“管理捕获过滤器”。这将为您提供所有预定义的捕获过滤器和您自己保存的任何过滤器的列表,因此您不必一次又一次地输入相同的捕获过滤器。您可以创建一个并保存它。所以,你需要做的就是点击那个加号图标,然后你就可以输入你想做的任何事情。所以我们可以做ip host 192.168.5.25,我们现在已经创建了一个新的捕获过滤器。然后,我当然可以重新命名。如果我双击它,它将允许我重命名,我可以说My Host:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果我回头看,它现在会是可见的。

您也可以通过先选择一个接口,然后输入您想要的内容来保存捕获过滤器。如果输入有效,你会看到它变成绿色。然后,单击书签图标,然后单击保存该过滤器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您单击它,将会弹出预先填充的“管理捕获过滤器”窗口,这样您就可以随意命名了。然后,使用这个捕获,我只需双击我的界面,开始捕获该流量。您将会看到,我正在过滤以太网广播,因此只显示第 2 层的广播流量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入捕获过滤器的第二种方式是通过齿轮图标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单击“Capture options ”,您会在底部看到“Capture filter for selected interfaces”选项。您可以像在上一个窗口中一样进入捕获过滤器,并管理您的书签。所以,我们可以在ip host 192.168.5.25进入。现在,选择接口,它会变成绿色,我可以开始捕获了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,它会显示进出我的网关的所有流量。

我们的下一部分是显示过滤器,我们将在捕获已经开始或已经保存之后过滤我们的流量,而不是在捕获本身期间过滤流量。这是一种非常常见的方法,这样您可以捕获网络上的所有流量,然后只查看您需要的部分。

显示过滤器

在本节中,我们将讨论显示过滤器。关于显示过滤器,我们将讨论如何筛选大型数据包捕获。因此,捕获流量的常用方法是不使用捕获过滤器,而是捕获接口可以看到的所有内容,然后简单地过滤掉您想要查看的内容,因为其他一些数据包可能有助于诊断某种问题。我们还将讨论快速访问过滤器按钮。因此,如果您的环境中有一个经常需要过滤的东西,您可以创建一个快速访问按钮,只需单击它,而不必每次都键入显示过滤器。您可以使用许多筛选器运算符来组合多个筛选器,以创建一个完整的表达式来表示您希望具体筛选的内容:

  • eq/==
  • le/<=
  • or/||
  • not/!
  • and/&&
  • ne/!=
  • gt/>
  • contains
  • It/<
  • matches
  • ge/>=
  • ()

因此,您可以将 IP 地址过滤器与端口号过滤器相结合,或者与 TCP 相关的过滤器,或者与两个 MAC 地址相关的过滤器。您可以使用这些过滤运算符以不同的方式组合或排除它们。您可以使用操作符的 Word 版本,它在/之前,或者您可以使用在/之后列出的任何东西,它就像 Word option 的数学等价物。还有一个括号,所以你也可以把过滤器和它们的操作符结合在一起,有点像数学方程。所以,你可以有一定的比较,比如两个 OR 语句,先进行比较,然后把它和别的东西作为加法,比如 and 语句。

因此,要使用显示过滤器,让我们先获得一些流量。我将在没有任何捕获过滤器的情况下在我的主界面上开始捕获。因此,我们将有一些数据包传入,这些数据包是我的系统中目前空闲的数据包。

您会在屏幕顶部看到一个应用显示过滤器输入框。它也有书签图标,就像捕获过滤器一样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么,让我们来看一些数据包。我将在我的主界面上开始捕获,不输入任何捕获过滤器。因此,我们将捕获我的系统上发生的一切;目前无论背景是什么?因此,在我们有了大量的流量后,你会注意到在顶部有一个文本框,上面写着应用显示过滤器,它的工作方式就像捕获过滤器文本框一样。我们可以输入我们想要的显示过滤器。左侧还有书签图标,就像捕获过滤器一样。如果我单击它,它会显示我保存的过滤器。我可以列出一大堆,如下面的屏幕截图所示——这些是 Wireshark 预构建的常见工具:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就像捕获过滤器一样,如果我在文本框中输入一个过滤器,我可以保存它。或者,我可以进入并管理我的显示过滤器,也可以手动添加和删除它们,就像使用捕获过滤器一样。

让我们从过滤开始。那么,让我们做ip.host,也就是eq 192.168.5.25,这就是我的入口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我可以点击右边的箭头来应用它,或者按下进入。当我这样做时,所有的流量都进出我的网关5.25:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还可以根据来源或目的地进行过滤。我们将使用关键字host,因此我们将输入ip.host

Host 是一种快捷方式,可以包含在特定 IP 地址的源流量和目的流量中。

我们也可以按来源过滤,即src,但是如果我们这样做,我们将只得到来自5.25的流量;我们不会有回程流量。如果我们对目的地dst做同样的事情,我们将得到返回流量,但不是原始流量。

那么,我们如何获得这种流量呢?我们可以用一个操作符把它连接起来,就像我提到的。因此,我们将告诉 Wireshark 我们希望这两个目的地都包含在源流量中。我们已经在那里了。所以,我们要做的是把它和一个 OR 结合起来。如果你记得的话,你可以输入or,或者两个竖线符号。我们将键入ip.src ==,并输入我的网关的 IP 地址。

现在它是一个有效的显示过滤器,它变成了绿色。我只需按下回车就可以了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们有两个方向的流量,就像我输入ip.host一样。因此,你可以看到如何使用这些快捷方式,你知道在显示过滤器选项可以让事情变得更快。

我们可以做的另一件有趣的事情是,假设我们需要解决 TCP 传输缓慢的问题。所以我们想看看窗口大小,所以我们输入tcp.window_size_value < 10。所以,让我按下键,输入,我们开始。所以,我们有一包。记住,我们没有定义任何种类的 IP 地址。Wireshark 捕获的窗口大小小于10 的任何数据包都会显示给我:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们展开 TCP 细节,您会看到窗口大小;肯定是小于10:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,让我们用我提到的括号创建一个例子。因此,我们将再次根据我的网关进行过滤。我要做的是快速访问我最近使用的一个显示过滤器。所以,我就打ip。现在,如果你看那里,最近用过的在最上面。所以,我将使用向下箭头,选择我想要使用的那个,然后按键进入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们会给它加上一些括号。现在,我再加上dns。因此,我希望看到进出我的网关的任何流量,这是一个 DNS 条目。所以我将键入&&(dns),这是 DNS 协议的快捷方式,然后我按键输入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们可以走得更远。所以我们可以说&& ip.len <= 72。现在,我已经将它缩减到所有进出我的网关的长度小于72字节的 DNS 数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,你可以看到这是多么的强大,以及你如何修剪掉你想要看到的东西。这是一个非常强大的功能,里面有很多过滤器。事实上,两千个协议有上万个过滤器。因此,如果你去https://www.wireshark.org/docs/dfref/查询显示过滤参考,它会显示你可以使用的所有不同的字段。我们要做的是,单击 I 并查找 ip。我们走吧。让我单击它,然后它会告诉我们可以筛选的所有子字段。所以,ip是协议。现在,我们可能对地址或校验和、目的地、来源、标志类型、GeoIP 信息等感到好奇。因此,这是搜索您想要筛选的内容的一个很好的参考。现在,我们将讨论的最后一个显示功能是创建快速访问按钮。所以,如果你看右边,我们有一个加号图标,它说添加一个显示过滤器按钮:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果我们单击它,我们就可以创建一个标签并输入一个筛选器进行保存。所以,假设我想为我的Gateway做一个。我就说ip.host == my gateway做个过滤。单击“确定”后,您将看到一个“网关开始”按钮。因此,如果我捕获了成百上千个数据包,我只需点击我的网关按钮,它就会立即应用过滤器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果您希望删除一些按钮,最简单的方法是再次单击加号图标,然后在左侧有一个按钮,上面写着“过滤表达式首选项”…这将带您直接进入 Wireshark 的首选项部分,然后您可以编辑或删除您需要更改或不想要的任何按钮:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,在本节中,我们复习了显示过滤器的基础知识,并创建了快速访问过滤器按钮。接下来,我们将讨论 TCP 和 UDP 流的过滤,并展示数据包捕获中的特定对话。

跟随溪流

在上一节中,我们讨论了如何使用显示过滤器来限制您在数据包捕获中看到的内容。在这一节中,我们将在此基础上继续学习。这意味着,在本节中,我们将按照 TCP 和 UDP 流来挑选数据包捕获中的会话,以便我们可以查看每个 TCP 通信或每个 UDP 通信之间的特定通信。因此,我们有一个打开https://www.cisco.com/主页的数据包捕获。默认情况下,【https://www.cisco.com/】的主页没有使用 SSL 加密,因此我们可以看到其中的所有 HTTP 通信,而不必添加某种 SSL 密钥来解密:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一开始,我们可以看到 DNS 对 Cisco 的查询和响应,然后是 TCP 握手的开始。然后,我们开始检索一些文件和一些用于检索 HTML 的 HTTP 流量。现在,我们当然可以应用我们在上一节中学到的知识,到顶部为作为主机的 web 服务器和 TCP 协议创建一个显示过滤器,并使用一些其他参数来尝试过滤掉我们想要查看的内容,但我们仍然会有大量数据。你可以看到这是一个非常大的捕获,仅仅是为了加载一个网页。

那么,我们如何在这个数据包捕获中挑选出单独的通信呢?因为你要注意的一件事是,在一个网页中,你有多个文件,图形,CSS 文件,JavaScript,或者任何它需要检索的东西。为了建立你所看到的网页,它需要拉取许多不同的文件。其中的每一个都有自己的通信和 TCP 流。因此,我们在跟踪 TCP 或 UDP 流时需要做的是在捕获中选择我们希望查看的流中的数据包。因此,对于这个网页中的每一个文件,每一个都将成为它自己的 TCP 流。因此,我们需要在其中选择一个数据包,然后跟随数据流。

所以,让我们选择一个图形。我们上spinner.gif吧。如下面的屏幕截图所示,我们将右键单击 HTTP 数据包,然后转到 Follow | TCP Stream:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认情况下,数据以 ASCII 格式显示,这通常对您很有帮助,因为您可能正在查看的许多流量都是基于文本的。但是当你跟随水流时,你可能希望改变这种情况。你可以在底部这样做,它说显示数据为 ASCII。您可以更改下拉框并选择您想要任何数据格式。我们将把它保留为 ASCII,因为我们看到一些 HTTP 流量中传输了 GIF。你可以看到这里有红色和蓝色的线。红色是客户端,蓝色是服务器,您可以在底部看到,这里显示 16 个客户端数据包,228 个服务器数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还可以更改此下拉框,选择我们希望查看的信息。当我们在此数据视图中向下滚动时,您会看到蓝色和红色的客户端和服务器来回发送数据包。您可能已经在前面的章节中注意到,如果您单击数据,它将跳转到数据包视图中的数据包。遵循 TCP 的一个附加功能是您可以打印或另存为…你的包裹。所以你可以把它们导出,保存成你认为的任何文件格式。

您还可以跟踪 UDP 流。

不过,UDP 流更难跟踪,所以它可能不总是完美地工作,但是 Wireshark 尽了最大努力。TCP 和 UDP 的区别在于 TCP 是可靠的,UDP 是不可靠的通信。

现在,您可以执行与跟踪 TCP 流量相同的操作,即右键单击一个数据包,然后转到 Follow,您可以看到 UDP 流可供我们单击。

选择 UDP 流,它会做完全相同的事情。它将在顶部窗格中显示数据。可能有用也可能没用,就看是什么数据了。它将允许我们执行所有与跟随 TCP 流相同的功能。

在本节中,您学习了如何跟踪 TCP 和 UDP 流,并在数据包捕获和数据流中挑选出特定的会话。接下来,我们有高级过滤,我们将在数据包捕获和数据包中挑选出更细微的部分,以增强您过滤流量的能力。

高级过滤

我们将讨论如何过滤数据包中数据字段的流量,如何在数据包中的特定字段上创建列并对其进行排序,以及如何使用这些您可能还没有注意到的隐藏方法进行过滤。

我们将进入我们的数据包捕获,打开https://www.cisco.com/。我们要做的是展开为我们提供数据包详细信息的部分。我们将向下滚动,找到一个我们希望进一步研究的数据包。

我们所能做的是展开这些部分,这将使我们能够轻松地查看数据包不同层中的不同数据字段。因此,如果你熟悉我们在网络中使用的 OSI 层,你会觉得很熟悉。因此,我们的帧和以太网包含第 2 层信息,IPv4 包含第 3 层信息,TCP 包含第 4 层信息,等等。

因此,让我们单击 TCP 来展开它,我们将深入到窗口大小值。现在,窗口大小是一个重要的字段,我们稍后会更详细地讨论,但我们要做的是将其视为一列。因此,让我们右键单击窗口大小值,然后单击应用为列。

这将在我们的数据包列表中添加一个新列,其中包含每个数据包的窗口大小值。现在,您会看到它是右对齐的,与信息相对,有点难以看清。那么,让我们右键单击上面的标题,然后转到“居中对齐”并单击它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单击该标题,它将对我们的数据包进行排序,从最小到最大或从最大到最小。现在,这是非常有用的,因为很多时候在传输问题上,你会有一个窗口大小的问题。因此,以这种方式进行排序并根据数据包寻找任何非常小的窗口大小可能对您有所帮助。不是每个窗口小的包都是坏事,但是它是有用的,你可以看一看。现在,你几乎可以对任何东西这样做;我们可以做几乎任何东西的柱子。

此外,我们可以删除列。我们将右键单击并转到“Remove”来删除此列。

我们可以进入 TCP(或任何这些领域),并根据我们看到的内容创建过滤器。因此,这比进入显示滤波器领域并试图找到您想要做的事情要容易得多,因为正如我之前向您展示网站时提到的那样,您可以寻找成千上万种不同的东西。因此,您可以用这些数据包的详细信息来直观地选择您想要过滤的内容,而不是那样做。那么,让我们过滤源端口。我们将右键单击源端口,然后转到准备过滤器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将在顶部准备一个过滤器,选择源端口信息。所以点击它,它有tcp.srcport == 50031 (这是源端口的简写):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果我们应用它,它将只显示完全是50031的源端口。如果我们想改变这种情况呢?我当然可以返回并更改源端口,就像您之前在操作符中看到的那样。然后,我们可以继续应用它。现在,我列出了源端口小于或等于50031的所有数据包。

我们再找一个吧。我们再来看看 TCP。我们将向下滚动,查看标志,并进行校验和检查。因此,让我们右键单击“确认”,我们将转到顶部以应用为过滤器,然后单击“选定的”:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“准备为过滤器”和“应用为过滤器”之间的区别在于,前者将过滤器放入顶部字段(显示过滤器字段),但不应用它,而后者两者都做。所以,如果你确切地知道你想要什么,你可以直接选择应用为过滤器选项。

现在,我们已经列出了所有的 TCP 确认数据包。现在,我们也可以扩展它,让我们往下找另一面——让我们找另一面旗。因此,有一个确认,我们将添加 Push。因此,我们希望看到所有确认数据包,但同时也是推送数据包。我们将右键单击“推送”,然后转到“应用为过滤器”|…并被选中。您可以看到,它应用了实现这一功能所需的所有语法。因此,创建过滤器需要做大量繁重的工作。现在,我们正在查看所有设置了推送字段的确认数据包。

让我们看看另一个特征。我们要做的是,再次为我的网关创建一个过滤器。所以,有ip.host == my gateway,我们应用它;现在,这是进出我的网关的所有流量。

我们按编号排序,这样才有意义。如果我不想看到 DNS 怎么办?我能做的就是去 DNS,右击它,然后去应用为过滤器|…并且没有被选中。

这将会否定选择。所以我选择它,你可以在语法中看到它返回&& !(dns):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,任何时候您在某个内容前面加上感叹号,都会告诉 Wireshark 您不想看到它。

因此,我强烈建议您花时间浏览这些数据包的详细信息,了解它们在哪里,您想要查找什么,习惯使用应用为过滤器和准备过滤器,并了解它们如何协同工作。实际上,您可以捕获包含成百上千个数据包的数据包,并将其精简为您真正关心的几十个。

摘要

在这一章中,我们学习了 BPF 语法及其历史,以及如何创建 BPF 语法。我们还了解了如何使用 BPF,然后将其用作捕获过滤器,并减少我们最终在捕获接口上捕获的数据包。然后,我们看到了如何创建和使用显示过滤器,将数据包捕获中的内容精简为我们只需要看到的内容。此外,我们还看到了如何跟踪流,包括 TCP 和 UDP 流,以便我们可以查看数据包捕获中的特定对话,并在需要时导出数据。我们还看到了如何进入不同的数据包字段和长度以及数据包报头中的所有不同数据片段,并能够基于它们创建过滤器。

第 4 章定制 Wireshark 中,我们将开始调整 Wireshark,并实际定制它,创建我们自己的首选项和配置文件,以便我们可以制作我们自己的 Wireshark。

四、自定义 Wireshark

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

  • 偏好;喜好;优先;参数选择
  • 轮廓
  • 给流量着色

偏好;喜好;优先;参数选择

要访问 Wireshark 的首选项,请转到编辑|首选项…;这将打开首选项窗口。在左侧,您会看到有许多类别可供选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

出现

第一个类别是外观,您可以在其中更改许多设置,包括您最常从中打开文件的默认文件夹以及过滤器条目和最近使用的文件值。过滤器条目更改显示过滤器部分下拉框中显示的过滤器数量。所以,现在有10,一旦我们关闭它,你就会看到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以改变它,让它显示更多,这就是偏好设置的作用。此外,我们还有最近的文件,这是基于文件菜单。如果您将该值更改为更高的值,那么您的“打开的最近”将显示额外数量的最近文件。在这一部分的底部附近,你会看到主工具栏样式,它现在只显示图标。如果你是 Wireshark 的新手,你可能会注意到在顶部有一个工具栏,上面有所有的图标;除非你把鼠标移到它们上面,否则它们不会告诉你它们是什么。你可以改变它,使其显示为仅图标、仅文本或图标和文本。

这对刚接触 Wireshark 的人很有帮助。它会告诉你所有这些按钮是干什么的,而不必花时间在每个按钮上移动鼠标。

布局

其中一个有用的部分是外观下面的布局部分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在布局部分,您可以更改 Wireshark 中默认视图的外观。您可能已经注意到,正如我在本书前面所做的捕获一样,布局部分将 Wireshark 中的默认视图分成三个窗格,这三个窗格相互重叠。最上面的是数据包列表,中间的是所选数据包的详细信息,最下面的是字节。如果你不喜欢这样,你想改变它的外观,无论是整个组织或删除这些窗格之一,你可以在这里做;你可以在顶部看到很多选项,来决定你希望事情如何分解。您还可以更改哪些信息放在哪个窗格中,以及是否希望显示任何信息,因为有些人并不真正关心包的字节,而只关心列表和细节。如果你不需要的话,你当然可以关掉包字节。

现在,在第 3 章过滤流量中,我们介绍了如何在 Wireshark 中创建列,这是另一种创建和编辑这些列的方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,虽然您可以右键单击数据包详细信息中的某个字段来创建列,但是您也可以在这里创建自己的自定义字段,或者重新排序或删除已经存在的不同字段。

字体和颜色

当然,您可以在 Wireshark 中自定义字体和颜色,但这些与我们将在本节稍后讨论的着色规则是分开的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

捕获

在捕获类别下,您可以选择默认接口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,正如你之前注意到的,我的系统上有很多接口。你可以选择你最喜欢的界面,或者你最常用的界面,如果你经常使用的话。

您也可以打开和关闭pcapng格式,但是我强烈建议您保持启用,因为这是现在新的标准格式;但是,如果出于某种原因,对于一些遗留软件或类似的东西,您需要以旧的pcap格式捕获,您当然可以这样做。

要提高 Wireshark 的性能,您可能需要关闭以下两个选项:实时更新数据包列表和实时捕获中的自动滚动。你已经注意到我们到目前为止在捕获中所做的。当你点击 Capture 时,它就开始在数据包列表中滚动,向你显示当时进来的所有东西。现在,这对于小捕获和快速捕获很有用,但是如果您有一个接收大量数据的系统(可能是一个频繁使用的中继上的 SPAN 端口,或者系统很旧,可能会因为没有处理能力而丢弃数据包),您可能需要关闭它以保持 Wireshark 的性能。

过滤器按钮

首选项中的下一部分是过滤器按钮:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是所有这些表达式按钮将出现的地方。

名字解析

我们的下一个类别是名称解析,Wireshark 允许您将我们在 Wireshark 中看到的许多不同的地址解析为不同的名称,使我们人类更容易理解我们正在查看的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,默认情况下,它允许将 MAC 地址解析为 MAC 地址的前一半。如果你知道 MAC 地址和它们是如何工作的,MAC 的前半部分是网卡的制造商。因此,Wireshark 内置了这些已知制造商和 oui 的列表,这是 MAC 的前半部分,它会尝试为您解析它们。这就是为什么您可能会看到Realtek:,然后是 MAC 地址的另一半或Cisco:和 MAC 地址的后一半。那是因为这个复选框。

您还可以解析传输名称,即 TCP 和 UDP 端口以及 IP 地址。现在,如果您选择“解析网络(IP)地址”选项,请注意它不会引用 Wireshark 中的静态文件,如 MAC 地址和传输名称。它会在你采集的时候尝试进行 DNS 解析。对于 Wireshark 来说,这可能是一件非常不利的事情,尤其是当您在进行大量数据捕获时。您可能会有成千上万的 DNS 解析请求从您的捕获系统发出,堵塞了工作。我的建议是,当您有一个捕获时,您可以右键单击一个 IP 地址,并使用该特定 IP 地址进行解析,而不是解析所有内容。现在,下面的部分,它说启用 OID 解析和抑制 SMI 错误,是 SNMP 解析。在 SNMP 中,您有 MIB,它基本上是 OID 位置的单词翻译,您可以在 Wireshark 中解决这些问题。

如果您正在捕获 SNMP 流量,并且启用了 OID 解析,则可以将这些 OID 字符串解析到 MIB 中。

协议

我们的下一个类别是协议,当您扩展协议类别时,您会看到 Wireshark 支持的所有协议的庞大列表,以及您可以调整的所有相关配置选项。

现在,大部分这些你可以不去管它们的默认值,一切都会很好。在你职业生涯的某个时刻,你可能会想要调整两个,那就是 IP 和 TCP 如果算上 IPv6 的话,现在是三年。如果要调整的话,IPv4、IPv6 和 TCP 可能是最常见的。我们要做的是,转到 IPv4,您会看到有一个名为“如果可能,验证 IPv4 校验和”的复选框,默认情况下该复选框处于禁用状态:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,默认情况下会启用此功能,因此根据您运行的 Wireshark 版本,如果您使用的不是最新版本的 2.0,可能会启用验证 IPv4 校验和功能。当这样做的时候,它有时会出现在你的系统上,带有大量的错误校验和。其原因是,许多较新的系统,尤其是服务器,已经开始执行校验和卸载,即软件不执行校验和创建,而硬件执行,就在校验和被发送到网络之前。但是 Wireshark 看不到这一点,所以它总是认为校验和不匹配,因为它看不到硬件在它被放到网络上时创建校验和。这是需要检查的一件事,因为现在大多数网卡都在进行校验和卸载,所以如果可能的话,你最有可能想要验证 IPv4 校验和。

统计数字

我们的下一个类别是统计数据,这里没有太多您想要更改的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我会让大部分保持原样,除非你想改变 RTP 播放器的频道数。

先进的

我们的最后一个类别是“高级”,其中列出了 Wireshark 中的所有首选项和设置,为您提供了一个很大的列表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果您需要更改某些内容,但无法更改,或者您遇到了问题或类似情况,并且您在网上找到了更改值的答案,但不知道它在界面中的什么位置,您可以通过转到高级类别来进行此类更改。更好的是有一个搜索功能。如果你需要改变一些东西,你可以过滤它,确定某个设置在哪里。

轮廓

我们现在来看看如何创建配置文件,将这些首选项打包成可用的配置文件,您可以根据自己所处的情况在这些配置文件之间进行切换。

当您使用 Wireshark 时,您对它所做的任何更改,无论是您可能正在更改的首选项、您可能正在创建的显示过滤器或捕获过滤器,或者任何其他内容,它们都在所谓的默认配置文件下。当您创建新的概要文件时,它们将作为默认概要文件的副本。因此,建议您对默认配置文件进行最小的更改。你也许可以对你的环境做一些过分的改变,但不要做任何具体的事情,而是为你可能需要的不同具体情况做一个配置文件。您可以在 Wireshark 界面的右下角进行操作。如您所见,这里选择了“Profile: Default ”,如果您单击它,将允许您在系统上的不同配置之间进行选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认情况下,Wireshark 中包含经典和蓝牙配置文件。您可以看到我们目前使用的是默认配置文件。如果您希望管理和创建这些配置文件,您可以右键单击 Profile: Default。现在,您将看到一个弹出的新窗口,允许您管理或创建个人资料:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不过,他们会带你去同一个地方。因此,我们要做的就是进入管理配置文件…,您可以看到我们当前拥有的配置文件列表。要创建个人资料,我们只需点击加号:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

或者,如果您在之前的窗口中,您可以简单地单击“新建”…它会把你带到同一个窗口。但是,相反,它自动为你点击了加号。我们可以在这里命名我们的个人资料。我们称之为New Profile,你会看到它的右上角写着根据默认设置创建:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到它是如何复制默认设置的,无论您已经在系统中配置了什么。现在,它正在为我们创建一个新的配置文件,如果我们单击“确定”,它将创建它;您会看到界面中有所变化,右下角显示“个人资料:新个人资料”,我们现在正在使用它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以做的是右键点击配置文件:新的配置文件,并前往编辑…,您会看到它有配置文件的路径:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Wireshark 将配置文件存储为文件夹,因此单击该链接将打开New Profile文件夹。然后,我们将返回到profiles文件夹,您会看到在profiles文件夹下,您创建的每个新个人资料都会显示为一个新文件夹:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您甚至后退一步,即在Wireshark文件夹中,您将会看到在 Wireshark 安装中创建的默认文件,并且会有不同的文件,这取决于您可能进行了哪些更改:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如,这里有cfilters,这是您的捕获过滤器,我们可以展示一下。请记住,这些捕获过滤器在您的捕获选项下,如果您点击这个书签,这是一个简单的方法。然后,您可以管理您的捕获过滤器。记住,我以前曾经做过一个定制的。这就是为什么它保存了。此外,我们有io_graphs偏好;现在 Wireshark 支持多种语言,我们有了language选项;我们有recent文件和preferences,就像我们在上一节中使用的一样。如果我创建了显示过滤器,另一个就会出现;还有一个dfilters文件,它可以定制显示过滤器。现在我们可以做的是编辑这些文件。这些是文本文件。你能做的就是右击任何文件并编辑它。

我建议使用 Notepad++这样可以正确显示回车的工具,因为如果你用 Notepad 打开它,它可能会因为使用的回车类型而不能正确显示。

现在,如果您希望与其他人共享您的个人资料,您可以进入个人资料文件夹,只需为您希望共享的任何个人资料复制新的个人资料文件夹。也许您有一个 802.11 无线网络、一个 TCP 分析网络、一个公司网络或一个重大错误网络,不管您有什么,您的组织中有多个 it 管理员或分析人员。您可以通过在不同的计算机之间简单地复制和粘贴这些文件夹来相互共享这些配置文件,并且您可以将其共享为 ZIP 文件或任何最适合您的文件。

给流量着色

在本节中,我们将了解如何创建着色规则,如何删除它们,如何创建自己的着色规则,如何为对话着色,以及如何根据应用的着色规则过滤流量。我们开始吧。

我调出了之前的一个截图——加载一个网页。我们将以此为例讨论着色规则。您可以在这里看到它已经在 Wireshark 中默认着色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我之前在 Preferences 部分的配置文件中提到的,Wireshark 中有默认设置,包括着色规则。Wireshark 试图让您更容易查看您的流量,即使只是标准安装。当然,你也可以自定义它来显示你想看的内容。

除了 Wireshark 会自动为您的流量着色这一事实之外,从基本观点来看,您首先需要知道的是,您可以一键启用和禁用规则。在窗口顶部,您可以单击“使用您的着色规则绘制数据包”按钮,该按钮看起来像彩虹颜色的线条,您可以单击它来批量启用或禁用着色规则:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我单击它并禁用,现在一切都变成白色,并且当前没有应用任何颜色规则:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您再次点击“使用您的着色规则抽取数据包”按钮,将会重新启用着色规则。

为了了解着色规则,我们将转到视图|着色规则…:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击着色规则…选项将打开着色规则窗口,您可以看到默认选择的着色规则是由 Wireshark 在安装时创建的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以看到默认规则在最上面有一些真正有活力的颜色规则。这些是一些你需要注意的令人讨厌的东西,这就是为什么它们有黑色的背景。这样,他们在这个默认的彩色系统中突出了其他流量。你可以看到大多数其他正常的东西,如 ARP、ICMP、SMB、HTTP 和 UDP 它们都是很好的柔和型颜色。然后突然之间,你会看到黑色的背景和红色的文字,你知道这显然是不好的事情。你有黄色显示;你有 TCP 重置和中止的亮红色;您会看到带有红色文本的黑色校验和错误。他们应该是故意突出的。关于这一点需要知道的另一件事是,你会看到坏的规则是如何在顶部的:规则是自上而下处理的,所以它是基于一个匹配的系统。如果首先匹配,那么它将被应用。如果你有两个非常相似的规则,也许你有 IC——两个寻找 ICMP 的规则,但由于某种原因有不同的颜色——顶部的一个将首先应用,后面的一个将被跳过,因为它已经被着色。

此外,在所有这些颜色规则的左侧是一组复选框,这些复选框启用和禁用这些单独的颜色规则。这样,您就不必使用我刚才展示的按钮来同时启用或禁用所有这些功能。因此,您可以简单地关闭您想要或不想要的复选框。

例如,我们可以做的是,我们可以关闭 HTTP,这是一种很好的浅绿色,如果你看滚动条,你可以在整个捕获过程中看到。我们所有的包都是绿色的。所以我会关闭 HTTP 然后,我们将单击“OK”。当我这样做的时候,你可以看到它们都变成了紫色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么它们会变成紫色?让我们回到视图|着色规则…看一看。如果我们检查一下,TCP 是浅紫色的。所以在这里,所有的通信,所有的数据包,都是 TCP 数据包。

还记得我说过,在这个列表中,事情是如何首先匹配到顶部的吗?因此,很明显,HTTP 流量更具体,因为这是一个更高级的协议,首先匹配,因此应用为绿色。然后,当它与 TCP 匹配时,它被忽略,因为它已经被着色。您可以看到如何将更具体的内容放在顶部,然后将更通用的内容放在底部,您可以看到这种方式是如何打破的,所有这些非常具体的过滤器都在顶部,然后基本的过滤器在底部,如 TCP 和 UDP。

当然,你也可以自己创造。在左下角,就像我们已经看到的其他窗口一样,您可以单击加号来创建一个新的颜色规则。你可以看到它也把它举向顶端,这很好。在这里,您可以输入任何类型的显示过滤器来创建颜色。我们可以说ip.host是我的入口,我们可以选择前景和背景颜色。你可以在底部看到,我们可以选择前景色和背景色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,让我们做一些完全荒谬的事情。前景将是明亮的粉红色,背景将是可怕的黄色。先改名吧。我们会说Gateway,然后点击 OK。那肯定很突出,不是吗?请看下面的截图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,您可以看到引用我的网关的所有数据包现在都变成了亮黄色。

到目前为止,我们一直在尝试找出哪个着色规则适用于特定的数据包,我们是通过查看|着色规则来完成的…试着靠我们自己找出答案。现在,你不必那样做;有一种更简单的方法。

如果您单击想要调查的数据包,并找出它为什么是绿色的,我们可以查看数据包的详细信息,在“Frame”部分,我们可以向下查看帧信息的底部,它会向我们显示应用的着色规则。因此,着色规则名称是 HTTP,适用于我们选择的数据包的字符串是 http || tcp.port ==80 || http2:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果你在你的特定情况下为你的特定公司制定了一整套自定义颜色规则,你完全可以导入和导出这些规则,与同事分享。让我们回到视图|着色规则…,您可以在窗口的右下方看到我们已经导入…和出口…按钮,可将其导出或导入为文本文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,我们可以为对话着色。我们要做的是,在这个对话中随机选择一个数据包,然后右键单击它,进入彩色对话。然后,我们可以分解我们需要的对话以及 OSI 模型的哪一层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我想向您展示的一个很酷的功能是,您可以继续实际筛选颜色规则。让我们选择一个数据包,一个 HTTP 数据包,我们将再次进入数据包详细信息中的帧部分。我将右键单击应用于该数据包的着色规则,然后我可以转到应用为筛选器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我正在根据着色规则进行过滤,因此不仅仅是因为它是 HTTP 流量,还因为它应用了着色规则。

所以我们也可以对另一个这样做。我们将右键单击应用于所选数据包的着色规则,然后选择“Apply as Filter | Selected”。现在我们已经根据着色规则过滤掉了这段对话。

着色流量的示例

我们将通过一些例子来说明如何利用着色规则在不同的数据包捕获中挑出不好的东西。

示例 1

在这个例子中,我们将需要打开一个网页,该网页指向麻省理工学院网站上一个不存在的位置,所以这里应该有一个来自 HTTP 的响应代码,声明404,它找不到那个文件。我们要做的是创建一个着色规则,它将很容易地向我们显示数据包列表中的错误消息:

  1. 让我们转到视图|着色规则…我们将通过单击加号图标为 HTTP 响应代码创建一个定制的颜色规则。

  2. 在过滤器栏中输入http.response.code > 399:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所有高于400的 HTTP 响应代码都是服务器和客户端错误,分别在400500范围内。

  1. 因为我们想用非常鲜明的颜色看到所有的错误,所以我们将背景设为亮粉色,前景设为黑色。你会看到它就在我们列表的最上面,所以它会首先被应用。让我们点击确定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我们将向下滚动列表,寻找那个亮粉色的包。它很容易出现,对我们来说非常明显。如你所见,它显示 HTTP/1.1 408 请求超时(text/html):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我们可以通过点击底部的超文本传输协议来扩展它的细节。然后我们会看到408的状态代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例 2

现在,在第二个例子中,我们来看看 NS。比方说,您的网络出现了某种问题,如果某些 DNS 响应在您的 DNS 服务器中找不到某个资源的任何记录,无论是网页还是本地服务器,它们都会返回;不管是什么,它找不到 DNS 条目。我们可以应用一个着色规则,每当有 DNS 响应说找不到记录时,它就会生动地显示出来。

让我们继续创建一个新的捕获,我将查找一些不存在的随机网页,我们将使用 Google 的 DNS。我们将得到一条消息,表明它不存在:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们将停止捕获,我们将不会看到任何真正弹出的内容。会有一些红色的东西从一些 TCP 重置和一些黑色的,但没有别的。都是 TCP 流量和 DNS。让我们继续创建一个着色规则:

  1. 点击查看|着色规则,创建新的着色规则…;我们就叫它DNS No Records

  2. 在过滤器信息中,我们将输入dns.flags.rcode,这是响应代码。如果响应码等于3,则表示没有记录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 我们将选择前景为黑色,背景为黄色。

现在,让我们继续浏览我们的数据包捕获,看看是否能找到这个响应代码错误。我们可以看到我们的Standard querie response 0×0002 No such name A记录,然后是我们输入的随机乱码。当然,它也支持 IPv6。quad A 记录AAAA也适用于 IPv6:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你在底部看一下我们的框架信息,有我们的着色规则:DNS No Records。它正在使用一个字符串,如果我们深入研究 DNS 信息,您会看到标志,它会说Reply code: No such name (3)。这就是我们刚刚过滤的3的值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到应用着色规则对进行网络分析和协议分析的人非常有帮助,因为它可以很容易地从大量数据包捕获中找出问题所在。

摘要

在本章中,我们学习了如何在 Wireshark 中应用首选项,并根据您的需求进行定制。我们还学习了如何为不同的分析需求创建概要文件,并在它们之间切换。例如,我们刚刚看到的着色规则可以放入专门针对 DNS 或 HTTP 的配置文件中。我们已经学会了如何创建这些着色规则,如何导入和导出它们,以及如何将它们应用到现实世界的例子中。

第 5 章统计中,我们将深入探讨 Wireshark 中的统计,这是一个似乎很少有人使用的强大功能。

五、统计

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

  • TCP/IP 概述
  • 时间值和摘要
  • 跟踪文件统计
  • 专家系统使用

TCP/IP 概述

在本节中,我们将了解 TCP/IP 的基础知识,如何构建数据包,以及现有的解析过程,如 DNS 和 ARP。

在网络中,我们有两种常用的模型:OSI 和 TCP/IP。如下图所示,左侧是 OSI 模型,右侧是 TCP/IP 模型,我尝试将它们匹配起来,以便您可以看到每个模型的不同层是如何相互匹配的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们使用 Wireshark 时,我们通常关注 OSI 模型的第 2 层到第 7 层。最常见的情况是,当您使用 Wireshark 时,可能是因为正在发生与应用相关的事情,或者系统正在运行某个应用。最常见的是,您会发现自己在使用 Wireshark 来诊断上层的问题,尤其是第 7 层。但是您当然可以使用它来排除第 3 层或第 2 层设备之间的连通性问题。虽然有许多 TCP/IP 服务和协议可以帮助我们通过网络进行通信,但请注意,我们引用的是基于 OSI 模型的协议所在的层,而不是实际的 TCP/IP 模型所在的层。

我想做的是运行一个包的构建,这将让您了解如何将不同字段的值输入到包中。由于我们正在 Wireshark 中查看这些字段,了解这些信息当然是件好事。所以我所做的是,在浏览器中,我打开了一个到http://www.pbs.org/的连接。我们要做的是跟踪这个连接,展示它如何找到资源,然后向它发送第一个数据包。

您的系统需要解决的第一件事是使用什么端口号。当你打开网页浏览器,进入http://www.pbs.org/,根据你如何在浏览器地址栏输入地址,浏览器的应用会知道你是否要使用80端口;默认情况下,它知道 HTTP,或者 SSL 的端口443,或者其他自定义端口。因此,您的计算机马上就知道它需要在哪个端口号上开始通信。因为我去 http://www.pbs.org/时没有任何 SSL 连接,它默认知道必须使用端口80。它要做的下一件事是找出服务在哪里。于是我去了http://www.pbs.org/,但是我的系统不知道http://www.pbs.org/驻留在哪里。

DNS 处理域名到地址的解析。因此,我的系统查看了本地系统上的 DNS 缓存,这是一个已经解析的地址滚动缓存,它寻找 http://www.pbs.org/ T2。它发现http://www.pbs.org/在缓存中不存在,所以它说它需要把它发送到我的 DNS 服务器,希望得到一个关于资源位置的响应。我的 DNS 服务器正好在我的网关上,是0.6;这在标准家庭网络中很常见。它可能不在那里;它也可能是一个远程资源,比如 Google DNS 服务器或 open DNS,或者其他。如果这是我尝试连接的远程 DNS 服务器,那么我的系统将查看我的路由表,并确定它需要去哪里才能访问该 DNS 服务器。因此,如果它是远程的,在我的网络之外,它会查看我的路由表,并意识到它必须通过我的网关才能与 DNS 服务器对话。

当它这样做时,它将检查我的 ARP 缓存,看看是否有我的网关的第 2 层地址,以便它可以向网关发送帧。如果我的系统没有我的网关的 ARP 缓存条目,那么我的系统将会发出一个 ARP 数据包,寻找192.168.0.6的物理地址。我的系统碰巧在它的 ARP 缓存中有它,因为我经常访问那个 IP 地址,所以我们在这里看不到 ARP 数据包。这里我们可以看到的是,第一个包是一个 DNS 包,所以我的系统看到0.6是我的 DNS 服务器,它知道这是一个本地资源。它检查了我的路由表,意识到它在我的物理接口上,我们已经连接到了0网络,并且我已经有了一个0.6的 ARP 缓存条目。所以它不需要这些信息,它会自动构建 DNS 包。在 IPv4 中,我们可以看到我的目的地是0.6:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它构建了所有这些,而无需生成任何其他数据包来查找这些信息。所以我的系统随后发出了它的 DNS 请求,要求得到 http://www.pbs.org/ T2。现在,如果我们往下看 UDP 部分,您可以看到我们正在使用端口53,这是用于 DNS 的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们扩展 DNS,我们可以查看查询,发现我们请求的是http://www.pbs.org/:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们必须等待 DNS 响应。然后,我们看到 DNS 的下一个数据包。我们收到一个针对 http://www.pbs.org/的的标准查询响应。如果我们在数据包详细信息窗格中查看 DNS,我们可以看到此数据包中的答案。您会看到http://www.pbs.org/有一个针对地址r53-vip.pbs.orgCNAME 条目,然后在 IP 54.225.198.196有一个A记录条目:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A记录条目是我们所关心的。所以现在我的系统有了一个 http://www.pbs.org/ T2 的 IP 地址,这样我就可以和 http://www.pbs.org/ T4 的网络服务器建立 TCP 握手,这样它就可以开始来回传输 HTTP 数据了。如果我们看看队列中的下一个数据包,我们有我们的 syn:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,前面屏幕截图中突出显示的数据包是 TCP 三次握手中的第一个数据包。如果你熟悉 TCP,它会有SYNSYN, ACKACK;这就是你的三次握手来打开一个连接。所以我的第一个包的目的地址是205.185.216.10。如果我们查看 DNS 中返回的响应,为A记录提供的地址是205.185.216.10。所以现在我的系统知道该为哪个 IP 地址制作 TCP 包。我们现在有了我的本地系统的一个源和它接收到的http://www.pbs.org/的服务器的一个目的地,然后它发出它的握手请求。然后它得到一个SYN, ACK响应,说是的,我看到了你的连接请求;让我们建立联系。然后我的系统回应说,是的,听起来很棒;我承认。最后,我们开始我们的第一个 HTTP 数据包。我的系统向同一个服务器发送一个 HTTP 包,并说GET / HTTP,所以它说请向我发送你的开始index.html和 HTTP 资源的任何其他数据。同样,它知道它需要使用未加密的端口2869 HTTP,因为当我们将它输入浏览器时,浏览器应用让堆栈知道它正在使用端口2869。这是 TCP 包构建的基础,你的系统从某种服务器或其他设备请求资源。

时间值和摘要

在本节中,我们将了解如何更改数据包的时间设置,以及如何使用时间列进行故障排除。

我们又有了 PBS 数据包捕获,我打开浏览器,进入http://www.pbs.org/。如果您注意到数据包捕获,第二列显示时间:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间列是一个带小数的数字,当您向下滚动数据包捕获时,它会一直向上计数。默认情况下,在 Wireshark 中,这是捕获开始后的时间。拥有自捕获以来的时间可能很有用,这样您就可以知道与您捕获的整个数据流相关的某些数据包何时到达,但对于尝试诊断某个问题(在将您尝试捕获的流量返回到系统的某个服务中可能存在延迟)来说,这并不十分有用。

为了计算出捕获的数据包之间的延迟,您必须查看时间列,并根据毫秒、微秒和纳秒来计算,这对人类来说并不太好,因为我们在数学上并没有那么好。因此,我们可以转到视图|时间显示格式,我们有大量时间显示格式可供选择。我推荐的最有用的方法是使用自上次显示数据包以来的秒数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样,如果您对您的流量应用过滤器,例如跟随 TCP 流,它将根据应用的过滤器向您显示每个数据包之间的增量差异。如果您使用自上次捕获数据包以来的秒数,那么如果您有从您正在查看的视图中过滤出来的数据包,它将不会与您正在查看的完全一致;这让我有点难以理解。因此,我建议选择自上次显示数据包以来的秒数。

现在,如果我们看一下,时间列已经改变,每个数据包之间有0秒,每个数据包之间有几分之一秒的延迟:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们要做的是向上滚动到顶部,您可以对时间列进行排序。如果你把它从高到低排序,你可以看到哪些包延迟最长。现在,如果您选择该数据包,然后按编号列重新排序,您将被直接带到该数据包,无论它在您捕获的已编号数据包中的什么位置。您可以查看数据包的任何一面,以了解可能发生的情况。

您还可以添加其他列。因此,我们可以转到数据包详细信息,展开帧信息。你会看到有很多时间域。我们可以做的是为其中一个时间字段添加一列。因此,我们首先要做的是,通过转到视图|时间显示格式格式|自捕获开始以来的秒数,将显示切换回自捕获开始以来,我们将为每个显示帧之间的增量添加一列。我们将通过从帧信息中选择前一个捕获帧的时间增量来实现这一点。我们将右键单击并选择应用为列:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们将时间增量从先前显示的帧列拖到另一个时间,这样会更容易一些。

因此,从采集开始到每个显示帧之间的时间间隔。您也可以转到查看|时间显示格式,并根据您想要查看的内容更改秒的分数。所以,也许你不需要看到纳秒,你只关心毫秒。您可以通过选择毫秒选项来手动更改:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你现在可以看到它是如何修剪我们的时间栏的。

您也可以通过转到编辑|首选项来添加列…然后到 Appearance | Columns 区域,您可以通过单击加号手动添加您想要的任何列:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,如果您转到统计|捕获文件属性,您将看到基于数据包捕获的信息列表。如果向下滚动,您会注意到捕获本身有一大堆统计数据,包括数据包数量、时间跨度、此数据包捕获的秒数、平均每秒数据包数、平均字节大小、已捕获的总字节数、平均每秒字节数和平均每秒位数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当比较在基准测试期间完成的捕获(当一切正常运行时)和当存在性能问题时执行的数据包捕获时,此摘要会很有用。您可以查看汇总统计数据中是否有这些值发生了剧烈变化。

跟踪文件统计

在本节中,我们将了解如何在 Wireshark 中显示有用的统计信息,以及利用这些统计信息可以解决的一些问题。

解析的地址

要访问 Wireshark 中的统计数据,请单击统计数据并转到已解析的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“解析的地址”窗口将在您的数据包捕获中解析的所有 IP 地址和 DNS 名称的顶部给您一个列表。这样,您可以了解在数据包捕获中访问的所有不同资源:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

协议层次结构

接下来,我们将看看协议层次结构。您需要点击统计数据并进入协议层级:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它会根据它看到的最流行的协议的数据包的百分比给你一个细分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如你一开始看到的,所有进来的东西都是一个框架。该帧中的所有内容都是以太网帧。在这其中,我们对以太网进行了细分。所以我们有一些互联网协议版本 6;我们有一整套互联网协议版本 4,还有一点地址解析协议:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们展开 Internet 协议版本 4,我们会发现我们收到的最大数量的数据包是 SSDP 数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这很有用,因为您可以看到所有到达的不同类型的数据。例如,如果您不希望看到无连接的轻量级目录访问协议或 NetBIOS UDP 帧,这是很有用的,特别是如果它在数据包数量中的百分比高于它在捕获中看到的百分比。或者让我们说,也许,你不应该看到任何中小企业流量,但你确实看到了很多中小企业流量;这可能是某种突破。

会话

你需要点击统计数据并进入对话:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在对话中,我们列出了在此数据包捕获中发生的所有不同的以太网、IPv4、IPv6、TCP 和 UDP 对话:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,在所有这些选项卡上,都有一个持续时间列,这非常有助于了解在您的对话中哪些人的发言时间最长、最多。您可以通过单击“持续时间”列按持续时间排序,并查看哪些发送的数据量最大:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

端点

我们现在将转到端点。单击统计并转到端点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

端点类似于会话,但它只是所有端点的列表;不仅仅是端点之间的连接,例如哪个 IP 与哪个 IP 对话,或者哪个 MAC 与哪个 MAC 对话;它只是每一层上所有设备及其相关信息的列表。我们不关心对话,只关心端点:所有的端点加在一起。

例如,您可以在 TCP 下看到,对于 IPv4,我们有211449,这是因为当我打开浏览器并尝试进入 PBS 时,我的主机打开了一大堆端口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据包长度

接下来,我们将讨论数据包长度。点击统计数据并转到数据包长度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据包长度有助于确定您的数据包长度是否很小,尤其是当您遇到窗口大小问题,并且您的许多数据都小于应有的长度时。您想要寻找的是您的大部分数据是否在数据包长度的1280-2559范围内,因为最大 MTU 是1500:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果您看到您的大部分数据(我们可以看到我们有1.60%)在范围1280-2559内,这意味着您的大部分数据正在被正确地发送和接收。如果这里的百分比较小,并且有很大比例的数据包长度较小,那么可能会有问题。

请注意,您将看到非常小的数据包长度中有很大一部分,因为您将有许多 AK 和控制数据包。

输入输出图

现在让我们来看看 I/O 图。点击统计数据并转到输入/输出图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

I/O 图形是从开始到结束流经数据包捕获的数据量的一个很好的图形表示。我点击了抓图上的开始。然后,我去我的浏览器打开它,输入http://www.pbs.org/,然后按回车。然后,我们看到了流量的峰值,并从 PBS 的内容服务器中获得了这些数据。然后交流结束了,我停止了捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如,如果您正在进行一致的文件传输,并且由于某些问题而处于低 I/O 状态,您可以在 I/O 图中看到这一点,我们将在以后的章节中详细介绍这一点。

负载分布

HTTP 的一个有用的统计信息是,如果您通过导航到 Statistics | HTTP | Load Distribution 进入 HTTP 部分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将为您提供在数据包捕获中提供 HTTP 流量的所有服务器的视图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您将能够看到有多少服务器被服务,所以如果您试图诊断内容分发网络的问题,您可以在主题/项目列下看到;或者,如果您试图找出哪个服务器负载最大,因为它有最多的连接,您可以在 Count 列下看到。如果需要,也可以在显示过滤器中添加过滤器。

DNS 统计

如果您需要对 DNS 流量进行大量分析,您可以转到统计,然后转到 DNS:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它将为您提供一个 DNS 中返回的所有不同代码的列表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您的响应有问题,或者当您不希望收到任何错误时,您会得到很多错误,您可以轻松地查看这些错误,而不是通过 DNS 流量进行过滤并逐个数据包地通过所有这些错误。

流向图

最酷的统计数据之一是流量图。

我们要做的是通过这个 TCP 流过滤我们的流量。因此,我们将右键单击一个 TCP 数据包,然后转到跟随| TCP 流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们将为此创建一个过滤器。我们只截取了一小部分流量,接下来我们要做的是转到统计数据,然后单击流量图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认情况下,它显示我们的数据包捕获中的所有数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们滚动时,您会看到所有的流,所有的 TCP 握手——也就是说,SYNSYN, ACKACK——以及所有的请求和响应。一切都在这里,在一个很好的图形格式,你可以用来诊断你的流量。例如,这对于 SIP 流量非常有用。

我们可以做的是更改左下方显示“Show”的位置,并在此处选择显示的数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一改变将针对屏幕后面的过滤器。当我请求数据时,您可以看到从我的计算机到服务器的通信,比如一个SYN:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一种非常有用的方式来图形化表示数据包捕获中发生的数据流。

专家系统使用

在这一节中,我们将看看 Wireshark 中的专家系统,这是一个很棒的功能,没有多少人知道,它允许您轻松地发现数据包捕获中的问题。

您可以通过从 Wireshark 网站下载相同的内容来了解我将使用的捕获。他们的 wiki 中有一个很棒的部分叫做 SampleCaptures,允许您下载社区提交的捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们要做的是搜索错误,第一个出现的是cmp-in-http-with-errors-in-cmp-protocol.pcap.gz。如果您下载并解压该文件,您可以打开pcap文件并按照以下步骤操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里,我们有来自 wiki 的pcap文件,有两种方法可以访问专家系统。第一种方法是从分析菜单。我们点击分析,然后转到专家信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二个方法在左下方。正如您在下面的屏幕截图中看到的,它是一个黄色图标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图标颜色将根据数据包捕获中的错误而变化。如果是黄色,则此数据包捕获中的最高问题是警告。如果是红色,则此数据包捕获中最大的问题是错误。如果它是蓝色的,它是聊天信息或信息。如果你点击它,它会显示专家信息。如您所见,这里列出了 Wireshark 在数据包捕获中自动发现的所有问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

聊天记录通常只是你不需要看到的普通信息数据,所以我们可以把它们最小化。在您的数据包捕获中,如果您有警告或错误,这些是您想要处理的事情。错误是最关键的。这些是实际 TCP 通信中的问题,或者数据包中以某种方式存在问题。存在格式错误问题或 CRC 失败。警告通常是应用问题、奇怪的响应以及类似的怪异事情。Wireshark 会注意到这一点,并通过这个专家信息窗口提醒您。它不仅向您显示它发现的错误和警告的类型,还告诉您它适用于哪个包号,您可以点击它。如果我们单击数据包编号14295,它将在数据包列表中向下跳转到14295,选择它,然后向我们显示它正在谈论的内容。如果我们向下滚动查看,我们可以看到它符合传输控制协议:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再举一个例子,我们可以看看 SampleCaptures,如果你搜索x400,我们得到的第一个是这个x400-ping-refuse.pcap:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以下载前面截图中突出显示的文件,并使用 Wireshark 打开它。如果我们进入专家信息,您可以看到数据包10上有一个警告。有一个Connection reset (RST),我们可以点击它。它把我们带到了包10,并突出了到底是什么问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

摘要

在这一章中,我们已经复习了 TCP/IP 的基础知识以及数据包是如何构建的。我们已经看到了如何利用数据包捕获中的时间信息,以及如何添加时间列和更改时间设置。此外,我们已经了解了如何在 Wireshark 中查看数据包捕获的不同统计数据,以帮助了解捕获包含的内容以及如何使用专家系统,这是 Wireshark 中一个很好的隐藏功能,可以向我们准确显示 Wireshark 知道的数据包捕获中的问题。

第六章介绍分析中,我们将看到对不同协议分析的介绍。

六、初步分析

以下是我们将在本章中涉及的主题:

  • DNS 分析
  • ARP 分析
  • IPv4 和 v6 分析
  • ICMP 分析

我们将会看到其中每一个是如何有用的。我们开始吧!!

DNS 分析

让我们来看看 DNS 在基本层面上是如何工作的,以及如何使用 DNS 执行常见任务,例如查看 Wireshark 捕获。

我们将从刷新计算机上的 DNS 缓存开始,这将清除设备上的任何缓存条目,这样,如果我们试图解析它们,它将必须从互联网上的服务器获得新的解析。为此,我们将输入以下命令:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

既然我们已经清除了,让我们做一个标准的决议。

在我们做解析之前,DNS 做的就是把域名和这些域名的不同记录解析成 IP 地址。这是它的主要目的。

DNS 用于各种用途,下面列出了其中一些:

  • 以任何方式浏览互联网,例如使用 web
  • 如果你试图解决 FTP 服务器或游戏服务器
  • 如果您试图在本地网络中运行域上的活动目录
  • 如果你想运行 VMware

各种不同的服务都使用 DNS 其中有一个常见的口头禅,即使你认为这不是 DNS,但每当出现问题时,通常都是 DNS。让我们来看看正常的 DNS 解析是什么样子的。

为此,我们将在命令提示符下键入以下命令:

nslookup wireshark.org 8.8.8.8

我们将强制该查询直接发送到 Google。如果我按下回车,我们得到如下输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,在这个结果中,您可以看到响应我们查询的服务器,8.8.8.8,我们还可以看到该服务器地址的 DNS 名称。您还可以看到该服务器上该设备的答案,您可以看到我们有 IPv6 和 IPv4 地址。

如您所见,IPv6 地址的格式与 IPv4 非常不同。

如果您不熟悉 IPv6,可以看看 Packt Publishing 提供的关于 IPv6 的其他书籍。

我们想从数据包的角度来看一下这个问题。为此,我们将再次刷新 DNS 缓存:

ipconfig /flushdns

接下来,我们将在本地接口上开始捕获,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在捕获运行的同时,我们继续输入之前使用的相同命令:

nslookup wireshark.org 8.8.8.8

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们将停止捕获。如果您向下滚动,可以看到有一大堆 DNS 和一些其他协议。所以我们要做的是,我们将使用一个过滤器,只需在显示过滤器中键入dns。这将消除我们不想看到的任何其他垃圾:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以看到第一个请求。因此,我们有一些由系统产生的其他 DNS 请求。我们来看看前面截图中突出显示的第一个查询。

您可以在查询中看到它在请求8.8.8.8,因此它实际上是在请求域服务器的域名。你也可以看到它有一个1Transaction ID

如果我们查看发生的下一个查询,wireshark.org,您会看到它有一个2Transaction ID:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们查看响应查询的数据包,它们将有一个匹配的事务 ID。

一个很好的例子说明了为什么这很有用,如果您看到许多响应,甚至是查询,它们在您的网络中循环,并在您的数据包捕获中一次又一次地显示相同的事务 ID,那么您的网络中可能有一个环路;例如,这可能指出生成树的问题。

对于我们来说,能够确定从查询到响应哪些包是匹配的,这通常也是有用的。正如您所看到的,Wireshark 会自动向我们显示两者之间的相关数据包,这一点我们在前面的章节中已经提到过。

我们在数据包的 DNS 部分还有一行告诉我们这是数据包622中的响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们双击中的 Request,它会将我们带到相应的数据包。然后,当然可以在两者之间来来回回。所以,事务 ID 非常有用。

让我们继续第二次查询实际的wireshark.org,打开标志。我们可以看到有一面旗帜打开了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们启用了一个1位,它表示需要递归:递归查询。这意味着查询请求服务器询问其他服务器,以防它没有我们的查询的答案。DNS 服务器可以配置额外的指针,或者设置额外的转发器,以寻找 DNS 查询的答案。因此,这个查询标志表示“是的,继续为我们做吧”。

让我们来看看数据包669,系统从 Google 请求wireshark.org A记录。我们可以看到数据包670上的响应。然后,我们深入研究这些标志,在下面的屏幕截图中给出了突出显示的响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1被使能,所以高亮显示的部分是响应消息。它使Recursion desiredRecursion available有效。

现在,我们将向下滚动,看到我们有答案 RRs: 2,因此我们对此有两个响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将看到查询,当我们转到答案时,我们将看到有两条wireshark.org记录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,wireshark.org似乎正在使用某种负载平衡系统,因为我们有一个104.25.219.21104.25.218.21A记录。如果你去https://www.wireshark.org/,它会把你带到这两个地址中的任何一个。您还会看到有一个生存时间值,其中您有一个299的 TTL,这是该记录在请求新记录之前在我的系统中保留的秒数。这里的 TTL 值非常短,这很可能与他们使用负载平衡器的事实有关。如果地址有任何变化,它希望我们尽快得到更新。它不希望我们将坏 IP 地址的缓存版本保留很长一段时间。比如很多默认是 8 小时或者 24 小时;所以,换算成秒,你可能会看到 86400 秒左右。

DNS 请求失败的例子

让我们来看看一个会失败的 DNS 请求。

为此,我们将创建某种随机域,并放入胡言乱语,jhadgug384r8.com,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,您需要开始新的捕获。继续按下进入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,你需要停止抓捕。

我们可以看到我们有请求,像以前一样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有8.8.8.8域名,我们有实际的请求。就像使用wireshark.org一样,你可以看到我们已经收到了一个A记录以及一个 quad A记录。这是因为系统同时请求 IPv4 和 IPv6。你可以在我们做wireshark.org时的命令行输出中看到这一点。

因此,我们有一个A记录,即 IPv4,还有一个四元组A记录,即 IPv6。但是你可以看到,我们有一些莫名其妙的域名,它显然在命令行中作出了回应,说它找不到结果。所以我们发出了一个查询,要求jhadgug384r8.com,我们收到了来自谷歌 DNS 服务器的回应,说No such name。如果我们去看一下旗帜,我们有Message is a responseNo such nameReply code: No such name

如果您还记得“筛选”部分,我们可以右键单击任何标志,然后根据可用选项选择“应用为筛选器”来应用筛选器,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以我们只是根据 DNS 中的错误代码No such name来过滤我们的显示过滤器。这是一个很好的过滤器,如果你在有某种连接问题的地方进行数据包捕获,你可以使用它。您可以查找失败的 DNS 查询。

ARP 分析

在本节中,我们将了解 ARP 是如何工作的,将地址从 IP 解析到 MAC,并了解 Wireshark 中的 ARP 问题。ARP 所做的是将 IP 地址(第 3 层地址)解析为 MAC 地址(第 2 层地址),这些地址在本地以太网总线上使用。我们需要这些信息来构造封装数据包的帧,这样我们就可以将它发送到网络上。当用户或应用从第 3 层上的特定 IP 地址请求数据时,我们的系统必须计算出该 MAC 地址是什么,如果它的缓存中还没有它的话。我们可以检查我们的系统在其 ARP 缓存中已经知道的 MAC 地址。就像 DNS 缓存本地已知信息一样,ARP 也缓存在本地。

所以我们能做的是在 Windows 机器中键入以下内容:

arp -a

如果您按下 Enter ,您将获得第 3 层中与物理地址匹配的所有已知 IP 地址的列表,物理地址是第 2 层的 MAC 地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前面的截图中,您在第三列中看到的是,正如它所说的,Type static

所有这些地址都是我的系统知道的,因为此时它们已被编码到操作系统中。因此,这些地址是系统默认知道的组播地址。它还知道一些 VMware 接口、IP 和 MAC 地址,以及一些已经存在的东西。

如果我们向上滚动,我们可以看到一些动态学习的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,您可以看到一些静态已知的信息——接口192.168.77.159的一些多播。

您可以看到主接口,其中有该接口已知的静态信息,我们还动态学习了地址。Physical Address下的地址都是针对特定 IP 发现的 MAC 地址,并且缓存了特定的一段时间。然后,如果我需要在第 2 层再次访问该设备,它将再次发出 ARP 请求。

现在,我们要做的是捕获一个正常的、良好的 ARP 请求的数据包。

我们将开始捕获并 ping IP v4 上的一个已知良好的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我们所看到的,我们收到了许多回复。系统已经使用互联网控制消息协议 ( ICMP )向该设备发送了四次 pingss,并收到了对所有四次 ping 的响应。在能够做到这一点之前,它必须弄清楚该设备的本地物理地址是什么,MAC 地址是什么,然后才能做出第一个响应或第一个请求。

接下来,我们将停止捕获,并对arp进行过滤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样,我们只能看到我们的 ARP 流量,我们将跳过一些信息。网络上有一些其他设备也在尝试进行 ARP 请求,但是如果我们检查前面的截图,我们有AsrockIn接口,这是我们正在使用的计算机的主板。

在信息栏,你可以看到Who has 192.168.77.97? Tell 192.168.77.159。这是我们现在使用的系统的 IP 地址。我们得到一个响应,说,192.168.77.97 is at 00:1f:33:eb:0e:3e MAC 地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前面的屏幕截图显示了我们网络上的一个 Netgear NAS 设备。

如果我们进入“packet details”窗格中的 ARP 信息,我们可以看到与前面的屏幕截图中显示的信息相同的信息,但都是摘要形式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一个以太网响应。帧中的发送方 MAC 来自 Netgear。它从 Netgear 的 IPv4 地址发送到最初的请求者,然后通过 IP 192.168.77.159发送到我们的系统。

但是,有一点要小心。如果我们看一下我们做 ARP 请求的地方,你可以看到它是从我们的系统发出的,带有 MAC 地址00:25:22:fb:46:d1和 IP 地址192.168.77.159,但是它被发送到00.00.00_00:00:00,因为它不知道它要发送给谁,但是它知道 IP 地址。在初始请求(ARP 请求)中,发送方是发出请求的设备。然后,在响应中,发送方就是正在响应的设备。注意这些类型的人字拖。您还会注意到,在 ARP 请求中,它是一个广播,我们可以从它显示 Destination:Broadcast on Ethernet II 的地方看到这一点,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它要去一个广播地址。因此,当我们的系统试图在本地以太网总线上找到具有第 3 层显示的 IP 地址的设备的 MAC 地址时,它不知道该与谁交谈,所以它向每个人发出广播。然后,碰巧知道该信息的设备接收它(因为每个人都有一份拷贝)并作出响应。类似地,对于 DNS,如果您在这里看到一堆重复,特别是响应帧,它们一遍又一遍地循环,它们只是不断地出现在您的捕获中,这可能再次指向您的网络中的环路。你不应该一遍又一遍地看到这些。

ARP 请求失败的一个例子

让我们看一个 ARP 请求失败的例子。

我们将开始新的捕获,这次我们将 ping 一个不存在于我的网络中的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们会看到Destination host unreachable出现。我们会这样做几次。因为我们正在尝试 ping,所以它将在 Windows 系统上执行四次。如果你用的是 Linux 或 macOS,它可能会不停地运行,这取决于你用的是什么。

去吧,停止抓捕;我们这里有大量的信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到前面截图中突出显示的请求:Who has 192.168.77.124?

我们可以在地址解析协议(请求)选项中看到目标。我们只是一遍又一遍地要求它。我们拼命想找到谁有那个 IP 192.168.77.124的 MAC 地址,但是它不存在。它只是不断尝试,不断尝试,不断超时,不断失败;这将显示在我们的结果中,正如您在命令行中看到的,是不可到达的。

IPv4 和 IPv6 分析

我们现在来看一下 IPv4 和 IPv6 之间的区别,并了解一些问题和特性,例如这些数据包的碎片、广播风暴以及 IPv4 和 IPv6 报头中的标志。

我们从数据包捕获中获得的一些数据被发送到一个加密的网站,这就是我们在协议信息中看到大量 TLS 的原因:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到 Info 列中有Application Data,这是所有来回传输到 web 服务器的加密数据。转到数据包详细信息中的 IPv4,展开它,我们可以看看 IPv4 报头中的信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,就在互联网协议版本 4 之后,它在说它是Version: 4;否则会显示Version 6。它还有Header Length,也就是报头中的字节数。有时,Header Length会波动,因此它定义了报头有多大,以便应用知道报头和数据包中实际数据之间的区别点在哪里。我们还有一些用于服务质量目的的 DSCP 信息和数据包的总长度。如果你熟悉 MTU,比如设置路由器或计算机接口的 MTU,这就是它发挥作用的地方。Total Length是该数据包的总大小。如果数据包的总大小太大,它就会分段。

此外,我们可以看到旗子里面写着Fragment offset。如果展开我们的标志,我们可以看到标志中有碎片设置。所以我们有即将到来的More fragments,或者说Don't fragmentFragment offset告诉 IP 堆栈从哪里获取即将到来的额外数据,以便将其组合成一个大数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还有一个 TTL,它通常是某种默认数字,比如2460,或者类似于128的东西。当它在整个互联网或您的本地网络中的不同路由器之间跳跃时——无论它的目的地是哪里——当它通过每个设备时,它将减 1。如果它在路由器上收到时达到 1,如果它的 TTL 为 1,那么路由器将丢弃该数据包。如果主机收到一个 TTL 为 1 的数据包,它会处理它,因为它不需要实际将它路由到某个地方。TTL 防止数据包在网络中永远循环。如果它循环通过 60 个设备,那么它将被丢弃;所以,不会永远卡在那里。

我们还有一个协议定义:它是 TCP 数据包、UDP 数据包还是其他类型的协议。我们有一些校验和信息来确保报头没有被以任何方式操纵。请注意,它不是整个数据块的校验和,例如封装该数据块的帧末 FCS,但它是报头校验和,以确保报头本身不被操纵。当然,我们还有分别来自和去往的源地址和目的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们来看看一个被分割的数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们实际上可以看到,我们有一个 IPv4 数据包,它在 Wireshark 中显示为Fragmented IP protocol;它知道这是一个碎片包。我们在数据包细节中看到,它的长度为1300字节,在标志中,它为更多的片段打开了 1 位。它说有一个碎片出现了。还有一个额外的包。下一个数据包是其中的一部分,所以我们可以将它们组合起来。我们可以看到Protocol是一个UDP数据包,它是用128的 TTL 生成的。由于源是我们的本地机器,并且它要发送到互联网,我们知道这是生成的 TTL,因为它在发送它的设备上被记录和捕获。所以,我们的系统实际上默认细节为128

下一个数据包是前一个数据包的延续:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到Fragment offset1280,所以它知道它需要与之前捕获的数据包组合。您可以看到,如果您深入查看数据包的详细信息,Wireshark 实际上会将它们合并到详细信息的这个小信息部分中。如果我们展开[2 个 IPv4 片段(1358 字节):#2818(1280),#2819(78)],它表示涉及两个数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以选择第一个和第二个数据包。点击它们,您可以看到以下信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Wireshark 很聪明,知道这一点。它会查看标题信息并为您提供详细信息,如前面的屏幕截图所示,这样您就不必自己计算了。它甚至还能显示一次传输中有多少个分段的数据包,并提供额外的信息,如重组数据的总长度。应用可以定义它是否是碎片化的。因此,当应用想要进行通信时,它会告诉堆栈是否设置Don't fragment位。根据应用及其需求,它可能会说不希望其数据被分割。也许这是一个加密的数据包,如果你把它分成碎片,就会破坏加密。因为它不希望信息被分割,所以它将打开表示Don't fragment的位,以便两端的 IP 堆栈知道它们不需要分割数据。如果你注意到,最初发送的数据包——将被分段——有一个标识3c78。如果我们看这个系列中的第二个数据包,我们会看到它的标识也是3c78

还记得我们讨论 ID 字段的时候吗?它会根据每个会话或发送的每个数据包而变化。如果标识是相同的,这表明数据包是碎片。这就是 Wireshark 如何将它们组合在一起,并意识到它们是一个系列的一部分,因为 ID 是相同的,但其中的数据是不同的。它不是一个副本,而只是一个碎片数据的延续。现在,在 IPv6 数据包中,您会看到报头有点类似于 IPv4:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它实际上有点简化了。它有Payload length;它告诉你里面是什么样的数据:是 TCP 还是 UDP 它有一个 TTL(他们称之为Hop limit);它也有源地址和目的地址。请记住,IPv6 中的地址看起来不同,因为它使用十六进制。

ICMP 分析

在本节中,我们将了解 ICMP 如何对网络工程师有用,以及 ICMP 的不同类型及其含义。

我们要做的第一件事是创建一些 ICMP 数据包。为此,我们将创建一个 ping 请求,这是一种 ICMP。

那么,让我们开始捕获,我们将继续再次 ping Google:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个回复都是一系列 ICMP 请求和响应。

停止捕获,我们将应用icmp显示过滤器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如前面的屏幕截图所示,这些是我发送和接收的所有 ICMP 数据包,我们可以看到我们有多个请求和回复。这与我们在命令行中看到的四个回复相吻合。

如果我们深入头部,深入到数据包细节的最底部,即互联网控制消息协议,我们可以看到有TypeCode:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TypeCode是 ICMP 中的两个重要部分。我们看到我们有Type 8: (Echo (ping) request)。然后,在下一个数据包中,我们有Type: 0 (Echo (ping) reply)TypeCode给了我们网络中正在发生的事情的信息。现在,这是一个非常简单的例子,请求轮询设备并从设备获得响应,以查看它是否处于活动状态。这基本上就像按一个设备的门铃,看看它是否在那里。

ICMP 中还有其他类型和代码,它们对我们网络上的设备很有用,对我们这些工程师也很有用。一个非常简单的例子是一个回应请求,你可以通过回复来查看某个东西是否可访问,以及它是否被设备允许,比如防火墙;他们可能会阻止请求,但这是一件非常有用的事情。我们还可以看看其他类型和代码。

如果你去维基百科上的 ICMP 页面(https://en . Wikipedia . org/wiki/Internet _ Control _ Message _ Protocol),我们可以向下滚动,看看所有这些类型和代码。你可以看到有许多不同的类型,每种类型中都有代码。

你可以看到有类型 8 - Echo 请求,用于 ping 并键入 0 - Echo 回复。但是我们这里也有这些额外的类型,比如类型3——目的地不可到达:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

路由器可能会将 ICMP 数据包发送回设备,让设备知道它无法访问特定的网络或主机。您可以看到它必须向请求设备描述的所有不同类型,为什么它不能到达它试图到达的特定资源。

其他常见的类型有路由器广告和路由器请求。这些协议允许主机请求并接收路由器来访问特定网络。此外,我们有类型 11 次超过。还记得我们在讨论 TTL 时,它是如何从某个数字开始的,比如60128之类的数字,然后随着它通过网络和互联网中的不同路由器而递减吗?当路由器收到 TTL 为1的数据包时,它会将其丢弃,同时生成一个 ICMP 数据包并将其发送回原始源设备,让它知道 TTL 已超出,需要将其丢弃。它将通过类型11和代码0这样做。

我们可以在下面的截图中看到这样的例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Wireshark 中,默认情况下会突出显示黑色数据包。它们都超过了 TTL。所以有 TTL,当他们在互联网上的时候,用完了。它们陷入了循环或类似的情况,丢弃它的路由器向我发回了一条消息,让我知道我的数据包已被丢弃——它们没有到达目的地。

现在,这些数据包有点不同,因为它们是片段。我们看到另一个是代码0,前面截图中显示的数据包是代码1,但这是相同的概念。它发回一个类型11给我们,让我们知道这个包超过了 TTL。这实际上就是 traceroute 的工作原理。它使用具有不同 TTL 的 ICMP 数据包,以确定从源到目的地的路径上有哪些路由器。

使用 traceroute

我们将开始新的捕获,然后跟踪路由。在 Windows 中是tracert。我们会追踪到互联网上的另一台设备。

我们将跟踪路由到我们信任的谷歌 DNS 服务器;为什么不呢?然后,我们将按下 Enter ,我们会看到路径开始显示在这里:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到,它在通过每台不同的路由器时都收到了大量响应。偶尔你会注意到它得到一些超时的响应。根据它通过的路由器或防火墙,它们可能不会向我们发回信息。这就是为什么有时你会在你的路径上有间隙,但你可以看到,当它找到另一个至少对我们做出响应的路由器时,它会再次恢复。因此,我们仍然通过互联网,通过路由器,最终到达我们的目的地。如果你注意到了,每一跳都要跳三次。因此,它给出了特定路由器平均三次尝试的平均响应时间——从一台路由器到另一台路由器。

如果我们看一下 Wireshark,我们应该看到每个路由器有三个请求。在我的系统中,当它创建跟踪路由时,它首先向我的目的地发送一个 TTL 为1的数据包,而不是12860或类似的东西:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以它会去我们的路由器,路由器会得到它,并说,“我不能用这个做任何事情;我需要丢弃它"*。*TTLs 将转到0。然后我们的路由器会给我发回一个 ICMP,让我们知道我的 TTL 已经超过了。我们可以看到的是,这正是所发生的。我们发出了一个 ping 请求,一个 TTL 为1的 echo 请求。我们的路由器回应说“哦,不好意思;我做不到”。然后,我再做第二次尝试。我们得到的回应是“不,我做不到”。这也是第三次。然后,它创建一个 TTL 为2的回应请求:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它通过我们的路由器,因为我的路由器看到它是一个2;它将其递减到1并转发它;这完全成立。然后它会到达链上的下一个路由器,在威瑞森,我们看到了。那个路由器看到它;它看到这是一个1的 TTL 它必须丢弃它并发回一个响应说“不,对不起;我做不到;您的 TTL 已超过”。我再做一次,它就有反应了。现在,我们创建一个3的 TTL:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它继续为 TTL 4这样做,以此类推。这就是 traceroute 能够映射从 A 点到 B 点的路由器的方式,因为它使用 ICMP TTL 超出错误来找出该设备。这是因为它知道 ICMP 数据包是由路由器作为错误代码返回给我们的。幸运的是,我们可以使用该 IP 信息来绘制出为了到达目的地我所经过的跳数。非常聪明。

摘要

在本章中,您学习了 DNS 的工作原理,并看到了一些 DNS 分析。我们看到了 ARP 是如何工作的,然后继续解析 MAC 地址。我们讨论了 IPv4 和 IPv6 报头,并了解了如何查看报头中的一些细节,包括 ICMP。我们也看到了为什么 ICMP 对我们这些网络工程师有用。我们介绍了 traceroute 的工作原理,以及其中的报头。

第 7 章网络协议分析中,我们将开始更深入的分析,看看一些附加的协议和应用。

七、网络协议分析

在本章中,我们将了解以下主题:

  • UDP 分析
  • TCP 分析
  • 绘制 I/O 速率和 TCP 趋势图

UDP 分析

我们将看看 UDP 是如何工作的,它是什么,以及 UDP 头中有什么。UDP 协议是一种无连接协议,它非常轻量级,只有非常小的报头。

如果你想了解更多关于 UDP 协议的知识,看看https://www.ietf.org/rfc/rfc768.txt:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是原始规格。如果你浏览所有的 RFC,就会发现它从 1980 年 8 月 28 日就开始更新了,但是最初的规范是768。如果您想了解 UDP 的所有细节,这些相对来说比较简短,您可以通过前面截图中显示的文件来完成。

让我们来看看 Wireshark 中的 UDP:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们只捕获了几秒钟的数据,以及应用和协议的完整组合。我们能做的就是简单的根据udp进行过滤。如果你按下键进入,现在它只显示 UDP 数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到我们列出了一些附加协议,其中包括使用 UDP 进行传输的应用,例如SSDP。我们可以在数据包详细信息中查看 UDP 部分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 UDP 报头中,字段很少。UDP 的报头中总是有 8 个字节,只有 4 个字段。我们有一个源端口;目的港;长度,即数据包的总长度,包括报头和数据;和验证报头信息的校验和。但它并不像您所期望的那样包含所有数据,帧中的 FCS 位于帧的末尾。您可以看到我们有一个unverified校验和。默认情况下,Wireshark 中不启用此选项。

现在,转到编辑|首选项…|协议| UDP,并打开“如果可能,验证 UDP 校验和”选项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到,现在校验和显示为correct:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果标题中有任何问题,并且它在传输中被操纵,我们将能够在这里看到它,并且它将被标记。然后,如果您展开校验和,它会告诉您它正在计算的校验和信息是什么。

UDP 传输通常不会有什么问题。他们要么工作,要么不工作。它们不保证任何连接性,如果需要,应用将执行任何类型的重新传输,内置于应用中。它不像 TCP 那样在堆栈中处理。因为它有一个非常小的标题和非常少的字段,所以可以打开和关闭的选项非常少。这里没什么东西。它的本意是非常简单和轻量级的,这对于 voiceover IP 或流媒体视频来说非常棒;诸如此类的事情,这是非常时间敏感的。它在途中发送数据,并希望数据到达目的地。如果是,那就太好了;如果没有,那么:哦,你错过了一两个包。

如果您在查看数据包列表时不确定数据包是否是 UDP,您可以做的一件事是创建一个基于 UDP 的列。因此,我们右键单击用户数据报协议,Src 端口:40097,Dst 端口:1900,并选择应用为列:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们有了一个新的列,写着用户数据报协议;这是一个 UDP 数据包。如果我们删除我们的udp过滤器,我们可以看到我们现在有一个勾选标记和空白列表贯穿我们的捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一种很容易看出什么是 UDP 包,什么不是的好方法,这取决于您是否有不同的着色规则或类似于大型包捕获中的规则。

UDP 可能遇到的少数问题之一是 UDP 连接尝试后的目的地不可达响应(如果您记得的话,这些是 ICMP 数据包)。如果您尝试进行 UDP 连接,并且在下一个数据包以及随后的数据包中持续收到 ICMP 目的地不可达,则表明您可能存在某种连接问题,需要进行调查。因为 UDP 不发送响应,所以这确实是您将得到的唯一一种响应。设备本身可能会发送一个响应,告诉您网络不可用或类似情况,因此目的地不可达。但是,除此之外,UDP 本身不会告诉你任何事情。这就是为什么在数据包捕获中很少会看到 UDP 问题,因为 UDP 中没有内置的东西来告诉您存在问题。

TCP 分析 I

在这一节中,我们将了解 TCP 如何工作,TCP 报头中有什么,以及一些标志和选项。

如果你想了解更多关于 TCP 的知识,你可以看看 IETF 的 RFC,网址是https://tools.ietf.org/html/rfc793:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你正在寻找 TCP 的 RFC: 793 ,它是 TCP 的原始规范。

在前面的截图中,您可以看到 IETF 中的不同部分,它们提供了一点点交互性。您可以点击更新了 TCP 规范的不同 RFCs 如果你向下滚动,它还会给你一个漂亮的小目录。RFC 显示了 TCP 报头的一个小图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有源端口目的港序号确认号数据偏移;一些保留的位;窗口大小;报头校验和;一个紧急指针;和选项,这是一个可扩展部分。我们有一些填充,然后是实际数据

进入 Wireshark,我们来看一个 TCP 数据包。我们可以看到,有些 TLS 流量碰巧通过 TCP 运行。我们可以右键单击传输控制协议,然后选择应用为列:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前面的截图中,你可以看到勾号,这意味着它确实在使用 TCP。如果我们展开传输控制协议,您会看到我们刚才在 RFC 中看到的字段。

我们有源端口和目的端口,您可以看到我的计算机中的系统正在访问端口443上的 web 资源,并访问其他字段,您很可能在查看的其他数据包中注意到了这一点。任何带方括号的东西都是 Wireshark 创建的;它们实际上不是标题中的字段,所以我们可以跳过它们。我们有序列号和确认号。如果你注意到的话,这些是相对数字。我们之前提到过,在这个例子中,他们从1开始。实际的原始数字不是 1。Wireshark 将它显示为1,并且作为一个相对数字,以便于您查看。否则,这是一个非常长的数字,人类更难观察和诊断。

接下来,我们有标题长度。它告诉我们报头有多大,因为报头在 TCP 中可以改变大小,不像 UDP,所以我们必须告诉它它有多长。我们有一些标志,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前面的截图中,您可以看到我们有一些拥塞信息;紧急的部分;确认和推送;以及 Reset、Syn 和 Fin。许多这类东西看起来都很熟悉,比如 SYN、Acknowledgment 和 FIN 创建连接和完成连接。我们还有窗口大小值,它告诉我们在必须进行确认之前可以传输多大的数据块:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有一个校验和,也是unverified,和一个紧急指针。

如果需要,我们可以转到编辑|首选项…|协议| TCP 并启用验证 TCP 校验和(如果可能),如果您愿意:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,我们现在有了一个correct校验和。

让我们继续创建一个新的捕获,我们将看看一个连接的握手创建和断开。

让我们开始一个新的捕获,我们将产生一些流量。此外,打开一个新的网页,重新下载我在 IETF 网站上展示的 RFC 的所有信息。我们将向下滚动,寻找连接的起点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看起来像是正在传输的网站。这是在 HTTPS 上空,所以看到 TLS 流量是我们可以期待的。我们将右键单击 TLS 流量,然后转到 Follow | TCP Stream:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们将回到主数据包列表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到tcp.stream eq 27的过滤器列在过滤器选项中。这是我们到 IETF 网站的链接。如前所述,TCP 是面向连接的。它保证数据包的传送。因此,如果您丢失了一个数据包,确认系统会内置并重新传输它。因此,我们从服务器向请求设备发送一段数据。我们发送一个确认收到的信息。我们还发送另一个数据包,随后是一个确认,表明我们已经收到它。

有时,根据驱动程序中网卡中 TCP 堆栈的选项和功能,您可能会允许一些多年来出现的增强功能,如选择性确认和一些增强功能,以使您更有效地使用这种确认系统,从而减少额外开销。我们可以看到 TCP 握手的创建是一个SYN,它表示“让我们同步”:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们建立联系。我们在标志中有一个Syn,即Set。这是我的系统请求 IETF 网站创建一个 TCP 连接。他们用一个Syn和一个Acknowledgment回应;然后,我们反过来也发回一个确认。于是我们有了SYNSYN, ACK;以及ACK—与 TCP 的三方握手。在这之后,我们开始通信来检索 HTTP 流量,在本例中,它恰好位于 TLS 之下。我们可以看到 TLS 连接的创建和一些数据的传输,如密钥交换等:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,在通信结束时,在发送和接收我们想要的任何数据时,例如正在检索的网站,我们的系统将最终确定这一点,并使用隐式方法说:“让我们终止这一点;没有更多的数据要发送或接收”。我们将用一个最终的语句来结束这个 TCP 连接。

所以我们做的是,在标志中,我们有FINFIN, ACK。有时在列表的末尾,你还会看到一个重置。所以使用FIN的最后一个方法是隐式的,表示这个连接应该被终止;没别的要传了。但是它没有被明确告知要删除连接,所以两端的系统最终可能会保持这个连接——这取决于它们。

如果您在 FINs 之后的连接结束时看到重置,那么这是一个设备明确表示:“是的,终止此数据包”的方式。这是一种露骨的说法:“扼杀联系;重置它;取消它”。

如果您在 FINs 之前看到重置,则这可能表示连接中存在问题,此时服务器或请求设备解决了问题并重置连接以重试。

我们还有一些选项,它们是报头中的扩展,允许我们扩展 TCP 的功能。我们能做的是过滤options,因为如果你注意到通过标题看,我们看不到任何写着options的内容。如果我们想找到任何有options的东西,我们需要对其进行过滤。

在显示过滤器中,键入tcp.options:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们在报头中显示所有启用了options的流量。如果我们向下滚动数据包详细信息区域,我们会看到一些有关选项的信息。我们可以跳过不手术的部分。我们想看看我们更感兴趣的东西,比如 TCP 选项- SACK permitted 和 TCP 选项- Window scale:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如,下面的屏幕截图显示了具有 TCP SACK 的数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择性确认 ( SACK )允许您在确认流量的同时仍然请求丢失的流量,而无需向您重新发送整个数据包块。比如说,如果在你发送确认之前,一次有五个数据包发送给你,其中一个丢失了,在没有选择确认的情况下,所有五个数据包都需要重新发送给你。因此,发送给您的数据包数量之间的确认间隔越远,效率就越高,因为您不会将所有带宽浪费在开销确认数据包上。但是,如果你遇到问题,那么更多的数据必须重新传输。选择性确认是一种两全其美的方法,这样你就可以有大量的数据包发送给你,而不必每次都确认它们,但是如果你错过了一个,你可以请求只重新发送给你一个;您仍然可以确认所有其他数据包。如果您看到 TCP 选择性确认,这意味着两台设备都允许选择性确认,并且它们对此达成一致。双方都必须允许启用该功能集,以便利用它。

我们也有窗秤。窗口缩放,如前面的截图所示,允许我们超越初始窗口大小。最初的窗口大小最大为 65535 字节,这已经不是很多了,所以我们想要更多。我们可以使用窗口缩放来实现。窗口缩放允许我们将窗口大小乘以一个因子。例如,无论窗口大小是多少,你都可以说是 65535 倍。然后,你可以得到一个非常非常大的窗口,以便最有效地利用你的带宽。

TCP 分析 2

在本节中,我们将了解对许多不同 TCP 报头字段的过滤,以及根据我们所查看的一些字段,我们可能会发现什么样的问题。

因此,我们可以在下面的截图中看到的是打开的网站的数据包捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到,我们仍然启用了 TCP 列,因此我们可以向下找到一个 TCP 数据包,我们将再次看到字段信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与我们研究过的许多其他协议一样,我们可以右键单击任何字段,然后将它们用作过滤器。我们可能想要做的是展开标志,并查找设置了紧急位的任何内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

紧急位不常使用。我们唯一能想到的是使用 Telnet,它基本上是对数据包进行优先级排序。我们可以右键单击紧急位,然后应用过滤器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将看到过滤器已经创建,但它是基于0的。所以我们就改成1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们将查看是否有任何设置了紧急位的数据包。我们看到没有,这很好。我们可以做的另一件事是将过滤器删除回tcp.flags,如果我们按下回车,它现在会根据启用了标志的每个数据包进行过滤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,我们有许多启用了标志的数据包。所以在这个数据包中,捕获可能不是很有用。根据您看到的流量类型,这可能有助于了解哪些有标志,哪些没有。在这里,它有太多的数据包带有标志,使其成为一个有用的过滤器。我们可以做的是定制它,并寻找任何可以重置的东西。通常,复位要么发生在一个良好连接的末端,如前所述,要么表示一个故障。我们要做的是更改我们的显示过滤器,使其成为tcp.flags.reset == 1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到,我们有相当多的数据包进行了重置。我们可以看看其中的一个,看看复位周围的流量,看看这是否表明有问题。因此,让我们选择一个数据包并右键单击它,然后转到跟随| TCP 流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关闭这个,我们看到它看起来像某种证书转移:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有三次握手;我们有一个客户端和服务器 hello—它看起来像是一个 TLS 协商。然后是一些应用数据包。此外,系统发送了一个FIN, ACK,因此我们最终确定了连接。这是一个隐式终止,随后是一个显式终止,即重置。所以这其实很好。系统说:“我完成了这个连接,然后我们将重置并完全终止这个连接”。这实际上很好,但是你可以看到它是多么的有用,能够取出所有重置的东西。

我们还可以做的是查看窗口大小,为此我们将输入tcp.window_size < 50并按键输入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到有相当多的数据包的窗口大小小于50。通常,小窗口表示有问题。在重置数据包中,这不一定是个问题,因为我们无论如何都要终止连接,但是如果您看到标准数据传输数据包中的窗口大小值很小,那就有问题了。这是网络堆栈中的线性设备的某种缓冲问题。此外,Wireshark 有一些我们可以使用的分析过滤器,我们将展示一个与窗口大小相关的过滤器。为此我们将进入tcp.analysis.zero_window。如果我们在那上面按回车,你会看到下面的截图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这实际上是所有窗口大小为0的数据包,这是一个问题。所以这些都是潜在的问题。这些是系统对各种不同服务器的确认,系统声明它没有可用的缓冲区空间。它收到缓冲区已满,并向服务器发回零窗口响应,说:“请慢下来”。所以这是系统的一个潜在问题。

我们可以做的另一件有趣的事情是查看报头长度。如您所知,TCP 报头的大小会有所波动,让我们右键单击报头长度,然后转到准备过滤器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里我们没有使用 Apply 作为过滤器;这样,它不会马上应用它。

在过滤器选项卡中,我们将输入tcp.hdr_len > 20,我们开始:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到弹出的第一个头长有32 bytes。这是一个寻找包含选项的数据包的好例子。

如果我们向下滚动,我们可以看到标题长度比标准的20要长,因为它在某个地方内置了选项。在这里,您可以看到此数据包具有选择性确认和窗口缩放。您也可以通过对选项进行过滤来做类似的事情,所以右键单击选项并转到准备过滤器|选定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们准备一个滤镜,输入tcp.options。这是每个数据包中启用的选项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图表 I/O 速率和 TCP 趋势

在本节中,我们将了解如何使用图表来帮助可视化数据包和趋势,尤其是在 TCP 通信中。这里我们有一个文件传输的数据包捕获,它发生了可怕的错误:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,我们有各种各样的黑条出现,这是 Wireshark 中的一个很大的警示信号,表明有什么地方出错了。你还可以看到一个条纹图案。这是一个很大的迹象,表明有一堆重新传输。所以,我们要做的是用这个作为我们制图的基础,并且能够挑出一些问题。

吞吐量

我们要做的第一件事是进入统计| TCP 流图|吞吐量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们单击“Throughput”时,我们会看到一个图表出现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

无论是绘制进入该部分的 I/O 速率图、TCP 流图,还是任何类似的图,所有的图都是单向的。根据我们选择的数据包,它会向我们显示该数据包的吞吐量或 I/O 速率,或者我们正在绘制的任何数据,这是针对单向传输的。如您所见,我们将从192.168.6.76转到公共地址,因为我们正在尝试获取 HTTP。如果您在图表中没有看到您要查找的内容,请单击切换方向按钮:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这会给我们提供相反的方向。我们在这里可以看到,我们通过端口5938(服务器)从公共地址获得吞吐量,该吞吐量将到达我们的私有地址(web 浏览器)。我们可以看到,我们绘制了吞吐量图。我们有段长度,我们有以比特每秒为单位的吞吐量。在最新版本的 Wireshark 中,您可以拖动图表以便更有效地查看,或者使用滚轮放大。或者,您可以使用键盘右侧或小键盘区域的加号或减号。我喜欢使用滚轮,因为它很方便,几乎每个鼠标都有。

还要注意的是,你可以改变你跟随的流。如果我们想要查看多个流,我们可以更改我们所在的流编号。在这里,我们将其保留为1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Wireshark 中图表的另一个很好的功能是,我们可以单击图表中的任何一点,它会将我们带到该数据包。让我们单击吞吐量中的小缺口,我们可以看到 Wireshark 将我们带到了数据包的那个部分。

如果您注意到,当我们转到统计| TCP 流图时,有几个选项可供选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您不必关闭此窗口,然后返回统计窗口并再次打开它;您只需选择想要的类型,就可以轻松地在它们之间切换。

我们来看时间/顺序(史蒂文斯):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以看到在我们的时间序列中有一条漂亮的对角线。这向我们展示的是序列号在数据包之间不断递增。有时,您可以通过查看序列号的下降或一条平线来查看数据包捕获中的序列号问题,在这条平线上,序列号不会在 y 轴上向上递增,而只是在 x 轴上继续。如果您看到除对角线之外的任何东西,这表明您的数据包捕获中存在问题。所以我们在这里看到的看起来相对较好。我们可以关闭它。

输入输出图

现在,让我们转到统计| I/O 图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

I/O 图是 Wireshark 中一个非常强大的功能,它向我们显示了每秒的所有数据包,所有这些都是可定制的。您可以更改间隔,也可以更改它是线性刻度还是对数刻度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据您所关注的数据包捕获的需求,您想要绘制的一些不同数据流之间可能存在非常显著的差异,或者我们想要应用的过滤器之间可能存在一些差异,因为您可以在本部分对过滤器进行分层。你可能想用对数来表示。这完全取决于您需要什么样的数据包捕获。默认情况下,当你打开它时,Wireshark 会显示每秒的数据包数量,然后每一次滴答都是一秒。我们有许多可以定制的附加层。您可以看到我们有一个名称列,您可以在其中命名层。我们有一个显示过滤器,其中包括颜色,您可以在其中更改颜色和样式类型,无论是线形图还是条形图。您可以更改 y 轴代表的内容。您可以打开平滑;您可以在这里对您的 I/O 图进行许多不同的调整,使它根据您的需要进行定制。

在您知道有问题的传输的数据包捕获中,一个需要寻找的强大功能是 TCP 分析标志。我们将为第二层这样做。为此,我们将为 TCP 分析标志创建一个显示过滤器,并将其放在 I/O 图中。我们要做的是双击第二个显示过滤器,这样我们就可以输入一个显示过滤器。它的工作方式就像您在主数据包列表区域调整显示过滤器一样。我们将添加tcp.analysis.flags:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们应用此功能时,它会在图表上创建第二层,用红线图表示任何对标志进行了分析的数据包。Wireshark 查看了这些标志,发现发生了一些事情,并对此提供了一些见解。就像我们在左下方看到的专家信息一样,这个显示过滤器使用与专家信息相同的功能。

但是,我们不想包括窗口更新,因为窗口更新是好的。只要不是窗口大小为0并且我们的缓冲区已满的零窗口情况,我们就不想包含所有有窗口更新的数据包。

接下来,我们将从此否定窗口更新。我们会加上tcp.analysis.flags &&。如果我们使用感叹号,那将否定我们将要包含的任何内容。会是tcp.analysis.flags && !tcp.analysis.window_update

当你完成后,只需点击离开,它会应用过滤器。

现在,您可以看到左侧有复选标记,用于启用或禁用以下层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果我们禁用第一个数据包选项,每秒钟就会有一个数据包被丢弃。如果我们启用第二个,这将显示我们所有的 TCP 分析标记问题。你会发现有许多问题。

我们能做的是,让这更容易查看,并真正让它突出出来,尤其是在有大量数据的情况下。如果我们有很多额外的层,有时你可能想使某些层突出。我们能做的就是把它改成酒吧的风格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦我们把它改成条形,你会发现它更粗一点,更突出。

如果你放大的话,你可以看到粉红色,它非常突出,就像一个疼痛的拇指。然后,我们可以单击这条线上的任何位置,它将带我们找到问题所在:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们可以看到所有的 TCP 分析问题。我们可以做的是,单击该数据包并验证它。如果我们单击其中一个黑色数据包,展开 TCP,然后查看分析部分,它会告诉我们有一个重复项。这是前一个确认的重复,这显然是一个表明问题的问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,请注意,这些不同的层是在彼此之上的,所以顶层是最靠近前景的层,然后靠近底部的层是朝向背景的层。如果您在前景图层上有大量数据,它可能会在视觉上重叠和覆盖背景图层上的数据,因此请注意这一点。例如,考虑将此样式更改为条形图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你会看到它使我们用分析标志创建的第二层变得无用,因为它现在控制了整个视图。所以要小心你改变和使用不同图层的方式。

摘要

在本章中,您了解了 UDP 协议及其无连接能力——它的非常小的报头、TCP 报头中的所有不同字段以及其中可用的选项。

我们还研究了面向连接的协议 TCP,以及某些数据的保证传输。我们查看了标题,了解到它有不同的标志和不同的选项来扩展其功能。我们还了解了 Wireshark 中的图形功能,以及您可以添加多个层并更改折线图和条形图的工作方式,以便从中获得最有用的图形。

第 8 章应用协议分析 I 中,我们将了解 HTTP 和 FTP,以及一些您在日常生活中会遇到的常见应用。

八、应用协议分析 1

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

  • DHCP 分析
  • HTTP 分析 I
  • HTTP 分析 II
  • FTP 分析

DHCP 分析

在本节中,我们将了解 DHCP 的工作原理,DHCP 协议中的一些字段,观察客户端检索 IP 地址的过程,并了解当客户端请求地址并接收响应时,DHCP 会发生什么。

让我们开始数据包捕获。我们现在要做的是释放我电脑上的地址,然后更新它。

在 Windows 电脑上,在命令提示符下输入ipconfig /release来释放我们的地址,然后如果我们输入ipconfig /renew,它会给我们一个新地址。

现在,如果我们键入ipconfig /all,我们应该能够看到我们的地址被分配了。我们现在停止抓捕。我们只想挑选出 DHCP 流量。所以你可以假设你可以去显示过滤器并键入dhcp,就像我们对其他协议所做的那样,然后按进入,它就工作了。但是我们可以看到上面有一个红色的条,表示dhcp无效:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是因为显示滤镜其实是bootp。DHCP 是基于bootp的。bootp是 DHCP 的前身协议,所以在 Wireshark 中他们使用前身的协议过滤器。因此,您想使用bootp。如果我们使用bootp,我们将看到我们的 DHCP 版本,并发现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第 264 个包是Release。我的系统已经有一个 IP 地址,它想摆脱它。它给 DHCP 服务器发了一个包,是4.1,它说:“请去掉我的地址。”如果我们在“packet details”部分查看我们的 DHCP 详细信息,您可以看到它显示引导协议(这就是bootp的来源),我们向下滚动到底部,您会看到选项,如果您查看选项53,它显示我们有一个Release:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是它请求删除地址的地方。此时,系统没有地址,本地客户端从网络接口卡上的信息中删除 IP 地址。

之后,我启动了 DHCP renew 命令,告诉它获取一个地址。现在我这样做是因为我的系统已经启动,并且已经在bootp获取了一个 DHCP 地址。通常,系统会在操作系统启动时从 DHCP 服务器检索 IP 信息和其他配置选项。但是由于我的系统已经有了一个地址,我不得不删除它,然后用那个/renew命令强制告诉它获得一个新的地址。当一个系统请求一个地址时,它首先发出一个Discover请求。您可以看到,discover(在选项53 Discover的数据包详情下方)将其发送到广播255.255.255.255。那是因为客户端没有 IP 地址,你可以看到它以0.0.0.0为源。

它不知道需要去哪里与 DHCP 服务器对话。因此,它将它发送到一个广播地址,希望有人会响应它对 DHCP 服务器的请求。我们可以看到Discover数据包正在请求 DHCP 服务器。它说:“我正在尝试发现一个服务器。”如果您在一个子网上有多台服务器,您可能会不时地获得不同的服务器产品。这有时会导致问题,具体取决于您的网络设计。如果您有一个简单的网络,如家庭网络,并且您有两台 DHCP 服务器,其中一台很可能是偶然的。当人们把无线路由器或类似的东西带到工作场所,而他们没有关闭 DHCP 服务器时,你可能会面临这个问题;会造成这样的问题。

寻找Offer包有时在包捕获中是有用的,因为你可能不一定想看到它们;这可能是一件坏事。如果您碰巧从一个根据您的网络设计没有任何意义的服务器地址看到了Offers,那么这是一个危险信号。当然,您可以右键单击 DHCP: Offer (2)并转到准备过滤器|所选:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样,您可以根据Offer过滤所有的数据包捕获。如果我们有一大堆来自不同服务器的Offers,这可能是个问题。

如果我们回到标准的bootp过滤器,你会看到在Offer之后,服务器正在响应我们的广播。然后我为我的客户发出一个请求。您可以在选项的数据包详细信息中看到,我实际上是在请求一个特定的地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这在刚启动的新系统上通常是看不到的,但是因为我的系统,客户端,已经知道它有一个以前的地址,所以它保存了那个信息,即使它没有在网卡中配置。它请求该特定地址来更新它并将其放回其配置中。您可以看到,现在它也知道了服务器。所以它把它发送到服务器,但它不是来自第 3 层 IPv4 地址,因为它还没有一个;它在请求它。因此,它仍然将它发送到广播。

您可能会在前面的屏幕截图中看到其他选项。这些选项号反映了您可以在 DHCP 中配置的一大堆不同的东西;不仅仅是为了 IP 地址。你会看到这通常与 voiceover IP 电话一起使用,因为你可以传递不同的选项,例如选项43,并实际告诉它它需要属于哪个 VLAN,并强制它属于另一个 VLAN。您还可以告诉它 TFTP 服务器在哪里,以检索固件信息和各种不同的东西,您可以发送到设备以自动配置它。这就是为什么他们称之为动态主机配置协议:它不仅仅是为了 IP。如果你想了解更多,你当然可以看看 RFC。

DHCP 的 RFC(记住,这是bootp的升级版)是2131,你会看到这是一个相当长的文档(【http://ietf.org/rfc/rfc2131.txt】T2):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前面的屏幕截图中显示了相当多的信息,它包含了 DHCP 的许多功能。现在,它不会包括每一个选项和您可以配置的每一件事情,因为其中一些是特定于供应商的;当然,自 1997 年以来,DHCP 一直在扩展,增加了附加功能。

我们还看到写有DHCP Inform的数据包,这些是我的客户的请求:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在它有了第 3 层 IPv4 地址,它正在向服务器请求额外的参数,您可以在数据包的详细信息中看到这些参数。以下屏幕截图显示了附加参数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是 DHCP 的基本知识。这是一个非常简单的协议。它比 DNS 稍微复杂一点,但是仍然相对简单并且非常有用。有一个 IPv6 版本的 DHCP,以及许多其他寻址 IPv6 主机的方式。接下来,我们将在 HTTP 分析 I 中了解 HTTP。

HTTP 分析 I

在本节中,我们将了解 HTTP 是如何工作的(HTTP 中有哪些代码,数据包中有哪些内容),源和目的地信息以及其中的一些选项,以及服务器和客户端如何交互并显示服务器和客户端之间的连接。

我们要做的是开始另一个数据包捕获并打开一个网站。在这个例子中,我打开了一个给https://www.npr.org/的网页,这恰好是一个未加密的网站。默认情况下,它使用普通 HTTP,这样,通信就不会隐藏在 TLS 加密之后。这样,我们可以看看 HTTP 头中实际发生了什么。

如果我们向下滚动,可以看到我们有了www.npr.org DNS 解析、我们的答案和 TCP 连接的SYN, ACK三次握手的开始:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还会看到一些akamai DNS 解析,这是因为如果我们看一看www.npr.org,它实际上是由一些akamai服务器托管的,这是一个分布在世界各地的内容分发网络,所以它的响应速度非常快。因此,随着我们的发展,it 必须解决一些额外的服务器。

我们可以看到,我们有一个到实际服务器的初始 TCP 请求,然后我的系统请求sections /news,因为我正在打开https://www.npr.org/上的新闻部分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们向下滚动,我们会看到有一个 HTTP 协议和一些 TCP 重组段的东西。这是很多 TCP 和我看不到任何 HTTP。这是为什么呢?这是因为我们在选项中启用了重新组装。如果您正在进行 HTTP 分析,这可能是您想要关闭的。

转到编辑|首选项…|协议| TCP 并关闭允许子分配器重组 TCP 流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您关闭它,您可以看到我们现在对 HTTP 有了一些了解,它实际上显示在 Info 列中,HTTP 流量的来回命令是什么。您可以看到,它们现在会在协议列中正确显示为 HTTP,它会说这是 HTTP 的延续,因为它将所有网站信息从服务器传输到我的客户端。您可以看到,实际上也使用了窗口大小。我们有一个漂亮的大窗口,然后我们有一个数据包列表,然后我们确认:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们看一下这里的 HTTP,我的系统77.160发出了一个GET请求。HTTP 有两个我们使用的主要命令:GETPOST。一个GET请求检索信息,而一个POST请求发送信息。因此,你知道如何在某些网站的某些表单中,或者如果你在一个配置文件中对 web 设置进行了更改,你正在向服务器发送数据,告诉它改变服务器上的某些东西:你用POST来做。我们正在询问信息。因此,在这个例子中,我正在获取/sections/news,并且我正在通过版本HTTP 1.1请求它。有一个新版本的 HTTP,最近已经投入使用,它是基于谷歌的 SPDY 协议,这是他们以前创建的。

如果你想了解更多关于 SPDY 协议和它是什么,你可以在维基百科或者 https://www.chromium.org/上看看——他们也有关于这个的页面。它实际上是一个加速流量的实验性协议,后来被弃用,取而代之的是 HTTP 2.0,后者现在已经成为标准。因此,SPDY 中的思想已经被合并到 HTTP 2.0 标准中。

它所做的基本上是优化 HTTP 头信息和通信,以便它可以实现加载网站的速度提高 50%:这非常强大,令人印象深刻。

所以,当你看到这些GET请求时,如果你在一个非常旧的系统上使用非常旧的程序,你很可能会看到一些非常旧的客户端的1.1,甚至可能会请求1.0。但是您现在可能会看到2.0请求。现在大概有三分之一的主要网站在使用 HTTP 2.0,当然,随着时间的推移,这个数字只会增加。所以,我们请求的是/sections/news,然后暗示我们请求的是里面的index.html页面。因此,我们要求一个文件夹结构。默认情况下,HTTP 会寻找index.html或其他几个不同的 HTML 或其他文件格式的文件。服务器有责任提供最先显示的核心页面。

从服务器上,我们可以看到我们有一个对这个GET请求的 TCP 确认,然后服务器回应道:“好的,听起来不错。我会把它发给你,因为我已经找到了那一页。”因此,如果你请求一个不正确的页面,你会得到一个错误信息。

在 HTTP 中,我们有不同数量的不同类型的命令。如果您想更深入地了解 HTTP,可以看看 IETF 网站上的 RFC。你在找数字2616,那是给1.1的。记得我说过有一个新的,2.0,出来了,所以当然会有更高的数字。当你浏览标准时,你会看到一堆不同的代码。您将看到一堆可用的代码块,以及其中每个代码的详细信息,但是,如果您看向左侧,您会看到一个状态代码编号。任何是200300的东西都是OK。所以一个200 OK表示“我找到文件了,没问题。”201表示“好的,我创建了它。”202是一个接受。这些都是好东西。如果你得到一个300,这可能是一个重定向或者移动一个文件到其他地方。400500是一个错误。因此,400是一个服务器错误。所有的 400 号都是服务器错误,说:“我找不到文件。你不允许到达那里”;或者“这是禁止的”;或者“你的方法不被允许”;或者“服务器拒绝你的请求”。一个500错误是一个客户端错误,所以你的客户端有问题。当您试图请求一个不存在的网页时,通常会看到一个404错误。你会在互联网上看到它,现在每个人都习惯了,但是一个404错误是:“我找不到文件。”服务器说:“我不知道你请求的是什么,不是你说的在哪里”,然后它发回一个404错误。

如果我们查看数据包的详细信息,进入 HTTP 报头信息,您会看到我们有一个服务器,Apache 这可能还会提到诸如nginx或其他正在运行的服务器——Apache 仍然是最常见的服务器。它会告诉你它在运行什么。如果它运行不同版本的 PHP 或 Python 或类似的东西,它会告诉你内容类型是什么。是 HTML 页面吗?是其他类型的内容吗?是 XML 页面吗?有时你也可以进行编码。一些页面和一些服务器允许压缩。因此,他们将使用gzip进行压缩,这就像创建一个服务器页面的 ZIP 文件,它将发送回这个文件,这样文件就更小,使用的数据包更少,发送到客户端的速度也更快。这需要服务器或客户端的一点处理能力,但通常是有益的。它还会告诉我们内容长度有多长。

现在我们已经了解了所有这些不同的协议,它们几乎总是会告诉您内容有多长,以便您可以验证是否收到了所有内容。我们也有一个到期和缓存控制。这告诉系统保存一个页面的时间。当您的客户端收到页面时,它将基于此缓存一段时间,以便在再次返回时可以引用其本地缓存。

所以,如果你总是不断地返回到同一个网页,它会从你的本地缓存中加载它,而不是不断地从服务器上获取它,用光服务器上不必要的带宽和资源。如果你不想使用缓存,那就刷新页面。你通常可以按下 Ctrl + F5 ,它会强制浏览器中的缓存删除该页面并请求一个新页面。如果我们展开数据包细节,我们将看到基于行的文本数据;它实际上会向我们显示发送给我们的网页本身:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下一节中,我们将更深入地研究 HTTP,讨论更多的问题,并了解如何解密 TLS 加密的 HTTP 数据 Wireshark 中的 HTTPS。

HTTP 分析 II

我们将通过再次查看错误消息以及如何解密 HTTPS(现在是 TLS)流量来研究 HTTP 的一些问题。这也适用于 SSL。

我们将从 Wireshark wiki(https://wiki.wireshark.org/SampleCaptures)的 SampleCaptures 部分下载一个示例捕获。转到 SampleCaptures 页面后,转到特定协议和协议系列|超文本传输协议(HTTP):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您单击它,我们将看到一些基本 HTTP 捕获的列表。底部有一个带解密密钥的 SSL 链接,我们将下载顶部的链接snake-oil2 070531.tgz文件。你需要做的就是把它提取出来,这样你就可以得到里面的文件了。

默认情况下,Windows 只能提取.zip文件,所以你需要下载类似 7-Zip 或 WinRAR 的文件才能打开它。

当您打开 cap 文件时,您会看到这是一个较旧的文件。这实际上可能是 2007 年左右的某个地方,所以它不是一个pcapng文件。但它在 Wireshark 中仍然打开得很好。如果我们看这个,我们看到我们有一个SYNSYN, ACKACK有了 TCP,就有了我们的三次握手;然后我们有一个 SSL Client Hello,一个来自服务器的确认,然后是Server Hello确认。我们开始交换一些密钥信息来创建 SSL 加密;我们共享密码信息;之后,我们开始对数据进行加密。在这里,我们可以看到我们有一个加密的握手和加密的数据。所以我们有加密的数据,但我们无法得到它。你能看到的我们都有,但对我们来说却是不可读的。如果我们在 SSL 中扩展这些,那只是胡言乱语。那么我们如何看到其中的 HTTP 呢?我们需要解密它,使用 Wireshark,您可以解密 SSL 或 TLS 流量。但是,您将需要来自服务器的私钥,因此如果您没有访问 web 服务器的权限,您就不能这样做。如果你在一个公司网络上,有人正在访问一个加密的公司资源,而你想解密它,这就很好了。那么,您可以访问服务器,这样您就可以检索私钥。如果你想在互联网上做这件事,你必须从托管它的人那里得到私钥。

为了进行设置,我们将转到编辑|首选项…|协议| SSL。您会注意到 TLS 没有列在协议选项中。TLS 属于 SSL,因为 TLS 是在 SSL 之后出现的,并且是建立在 SSL 之上的;这都属于 SSL 协议部分。因此,我们将在 SSL 协议列表中配置我们的 RSA 密钥,即私钥——即使您使用的是 TLS。我们要做的是点击“编辑”…然后用加号来添加新的解密密钥。我们要做的是添加我们服务器的 IP 地址。在这个例子中,它被清理到127.0.0.1,这是本地主机;这只是一个环回地址。我们将它定义为端口443,因为我们知道这是使用标准端口443的 HTTPS 流量,并且我们知道它后面是http流量。然后,我们将双击密钥文件部分并选择我们的密钥。你可以看到在提取的文件中我们有cap文件,一个READMEkey文件。我们将选择key文件,然后点击 OK:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,您将看到数据已经自行解密,因此我们不再拥有所有这些 TLS 协议列表。它没有说Application Data;它现在实际上向我们显示了 HTTP 流量。我们现在已经解密了。我们仍然有 SSL 协议的东西,因为这实际上是 SSL 流量。它进行握手和交换密码信息,这样它就可以加密;没关系。底部的东西是我们所关心的。因此,现在我们实际上可以为http进行显示过滤,我们可以只过滤掉 HTTP 通信。我们可以看到,我们在这个数据包捕获中几乎没有问题。所以,我们有一个GET的请求;它收到了来自服务器的响应,说:“我找到了那个文件。”然后他们试图通过 HTTP 获取另外两张图片;他们下载了一些图片:看起来像 Debian 的标志和其他东西。然后,服务器有一个响应,表明没有找到资源。下面是那条404消息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们进入数据包细节,我们可以在 HTTP 选项中看到404。你还会看到上面写着“专家信息”。向下到左下方,单击圆圈图标,它将为您提供此数据包捕获中的所有错误:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它提取 HTTP 错误以及任何有用的信息。

FTP 分析

在这一节中,我们将了解 FTP 如何工作,主动模式和被动模式之间的区别,以及如何通过 FPTS 和 SFTP 安全地传输文件。

我们将再次开始捕获,并连接到不使用加密的 FTP 服务器。所以,这个服务器是一个白俄罗斯托管的服务器,上面有一些 Linux ISOs,它允许匿名连接。我将使用anonymous登录,我们将使用端口21并单击 Quickconnect:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到我们已经登录。它声明不使用 TLS,并列出根目录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们要做的是停止捕获,如果我们向下滚动数据包,我们会看到这里有许多其他类型的流量,但我们会看到列出了一些 FTP。我们能做的是创建一个简单的过滤器,里面有ftp,它将显示所有的 FTP 流量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以通过未加密的 FTP 看到连接。您可以看到所有的命令,就像 HTTP 一样。如果我们深入了解数据包详细信息中的 FTP 部分,我们会发现传输的命令非常少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在数据包101之前的数据包中使用三次握手进行连接。所以数据包9899100就是 TCP 握手。然后,它将代码220声明为新用户的服务就绪。于是服务器说:“我看到你已经和我建立了联系。给我发一些认证”。我的软件询问它是否能够使用 TLS,这是我们用于 HTTPS 加密的加密方法。服务器回答说:“不,我不能这么做。请用用户名和密码登录。然后我的软件 FileZilla 客户端说:“那么,SSL 呢?”然后服务器回复说:“没有,抱歉。我不这样做”。然后我的客户最终给它发送了一个用户,说:“这是用户命令。我要用匿名登录”。服务器接受了,并说:“请指定密码”。

我用PASS命令提供了密码。服务器对此进行了评估,并确定证书是好的,它说:Login successful,代码230。然后,我的系统询问它是哪种系统类型,服务器运行的是什么,服务器回答说它使用的是 Unix 类型的服务器。然后询问它有什么可用的特性集,服务器回复了一个它能够支持的特性列表。然后它说:“这是我的清单的结尾”。我的客户打开了UTF8选项。服务器说:“没问题”。然后我的客户请求打印工作目录 ( PWD ),服务器说:“你在根目录下,/目录。这是您所在的第一个目录”。我的客户端改成了二进制模式,也就是 I 型,服务器回应说:“没问题”。然后,我要求被动模式,这是它能够提供的另一个功能。被动模式允许 FTP 通过随机的动态端口进行通信和传输数据。因此,如果您正在查看这里的端口号,我将与服务器和我的客户端进行对话,客户端在本地运行;客户端软件在52284运行。它正在与端口21上的服务器对话。数据只是命令,必须通过另一个端口。FTP 激活时,数据将通过端口20传输,所有命令通过21传输。现在这种情况并不常见,因为主动模式很容易被黑客攻击。这不是一个非常安全的方法,因为你确切地知道数据将通过哪个端口传输。因此,如果您在中间,您确切地知道应该查看哪个端口来捕获所有未加密的数据。另一方面,被动模式允许使用动态端口,因此数据本身将通过不同的端口传输。所以,这是对 FTP 协议的增强。现在,最常见的是,您会看到端口21用于服务器命令,然后是一个动态端口,实际数据本身的数量在数千个之内。FTP 将命令与不同端口号上的数据分开。并不是每个协议都这样做,例如我们看到的 HTTP,它通常在端口80上运行,它在同一个端口上发送命令和数据,不像 FTP。FTP 是一个非常古老的协议。

因此,我们看到服务器的响应,说:“我们正在进入被动模式”。然后,我要求提供我所在目录的列表。记得我问我在什么目录下:打印工作目录。我切换到二进制模式。我说:“还是用被动吧。现在给我一份所有文件的清单”。服务器接着说:“好的,我正在发送目录列表。目录列表已发送,所以这是来自服务器。然后,我要求将目录更改到一个名为pub的子文件夹,这时我停止了捕获。然而,我们缺少的是数据。你注意到我没有任何数据。如何使用 FTP 被动模式找到带有动态端口号的数据?您可以通过向显示过滤器添加额外的过滤器来实现这一点。

你可以看到我们有ftp,这是命令。如果你也想要数据,你必须输入ftp || ftp-data。如果你按下回车,现在我们将得到 FTP 流量,以及 FTP 数据流量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,我的客户请求列出那个目录,即root目录;现在,服务器通过特殊端口发送所有数据。我们可以看到服务器正在端口54536上运行,它将转到我在52285上运行的客户端。这就是 FTP 主动和 FTP 被动的区别。

现在,还有 FTPS 和 SFTP。如果你注意到,所有的包都是未加密的。我们可以看到所有的命令—登录用户名和密码。这不利于以非匿名模式通过公共互联网。如果您使用用户名和密码,您应该对其进行加密—您应该对您的数据进行加密。您可以使用 SSL 或 TLS 来实现这一点,就像我之前提到的 HTTP,以及许多其他可以使用 TLS 加密的协议。所以,FTPS 是用 TLS 或 SSL 加密的 FTP。这是更标准的方法,使用已经实现的 FTP 协议,然后在其上加密。

还有安全外壳文件传输协议 ( SFTP )。SFTP 运行在一个不同的港口;它通过端口22运行。因此,在这种情况下,您实际上想要基于ssh进行过滤,因为 FTP 流量是通过 SSH(安全的 shell 端口)传输的;所以,你可以使用ssh作为你的过滤器。显然,这张截图中没有,但它可以作为过滤器使用,所有流量都会经过它。但这一切都是加密的——就像加密的 FTPS 一样——你需要服务器私钥来解密它,就像你在上一节看到的 HTTPS 一样。请注意,有两种安全传输文件的协议,它们是不同的。FTPS 使用标准的 FTP,但用 TLS 或 SSL 加密。SFTP 是它自己的动物;它有自己的协议和应用。SFTP 是完全独立的,它通过 SSH 运行文件传输。

在本节中,我们讨论了 DHCP:该协议如何工作,以及如何查看其中的一些选项。

摘要

我们研究了 HTTP,包括未加密方式和加密方式,以及如何解密。我们还讨论了各种风格的 FTP:主动模式、被动模式,以及 FTPS 和 SFTP 的加密风格。

第 9 章应用协议分析 II 中,我们将继续介绍一些您将会遇到的其他应用协议。

九、应用协议分析 2

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

  • 电子邮件分析,包括 POP 和 SMTP
  • 802.11(或无线和 Wi-Fi)分析
  • IP 电话的 VoIP 分析
  • VoIP 回放捕获的流量,以便能够听到流量中可能出现的问题

电子邮件分析

在本节中,我们将了解 POP 和 SMTP 的用途,并研究 POP 和 SMTP 中的通信,了解一些代码是什么;它们是否成功,或者错误代码,或者类似的东西。

现在,我们有三个主要协议用于互联网上的电子邮件:

  1. 购买凭证(proof of purchase)
  2. 简单邮件传输协议
  3. 互联网消息访问协议 ( IMAP

这三者由客户端使用,例如移动设备或运行在计算机上的软件;某种独立的应用,如雷鸟或 Outlook。例如,如果您使用 Outlook for exchange,还有其他协议,但主要是,如果您使用通用应用,并且以通用方式访问您的电子邮件服务器,您将使用这三种协议中的一种。

我们将重点讨论 POP 和 SMTP。

POP 和 SMTP

POP 用于从邮件服务器检索电子邮件。SMTP 用于向邮件服务器发送电子邮件,以及在邮件服务器之间发送电子邮件。如果您想了解有关 POP 和 SMTP 的更多信息,请查看这些 RFC:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前面的屏幕截图中,您将看到有许多命令在客户端和服务器之间传输,以传达它们想要在连接中完成的任务。就像我们看到的 HTTP 和 FTP 以及其他一些协议一样,有一种公认的语言用于执行某些事情。我们将在数据包捕获中了解这一点。

现在,在现代使用中加密你的数据是很常见的,尤其是现在的电子邮件,所以 POP 通常用 SSL 或 TLS 加密。你也可以用 SMTP 或 IMAP 做同样的事情:你现在可以用 SSL 或 TLS 加密所有这些协议。这是一个未加密的通信,因此我们可以查看所有来回传递的命令。

我们在数据包捕获中看到的是,我们在开始时为 TCP 进行了三次握手;POP 通过 TCP 传输。然后我们有我们的流行沟通以及一些感谢,然后是FIN结束。

有一个针对流行音乐的过滤器。您可以右键单击您的协议并将其作为过滤器应用;或者您可以简单地输入pop,这将过滤您的流量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是,如果您注意到,我们已经丢失了开始和结束时的握手信息,并且数据之间的一些确认数据包现在已经被删除,因为它们不是 POP 的一部分。它们是 TCP 确认和握手。因此,如果您确定正在使用的地址或正在使用的端口,并最终以此进行过滤,而不是以pop作为显示过滤器,可能会更好。所以我们有三次握手。我们有我们的客户端和服务器。客户端正在请求连接。服务器说:好的,没问题。客户接着说:好的,我承认联系;我们有三次握手。之后,服务器会回应说:好的,我们已经连接到 POP3 了。服务器准备好了;你可以在包的细节中看到。

如果我们扩展我们的邮局协议,我们会有更多的信息。它说服务器准备好了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以这是一个好消息。然后,客户端传递它的用户,您会看到,因为这是未加密的,所以用户是明文的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将USER命令传递给服务器。服务器回应说:好的,用户名好。请给我发一个密码。然后我们发送一个密码。同样,这是未加密的,所以是明文。你可以看到很容易就能确定发生了什么。我们有命令,它们被命名为USERPASSOK。服务器回复说:好的,邮箱已经打开了。谢谢你的证书。您有一封未读邮件。然后,客户端向服务器请求一些状态;服务器用状态消息进行响应。然后我们得到一个惟一的 ID 列表,然后客户端要求一个列表。在前面的截图中突出显示的是邮箱中所有内容的列表。邮箱扫描完成,它把数据发给我们,数据是邮件数和字节数。客户接着说:好吧,让我们检索消息号1。服务器然后说:好的,这些是你要求的八位字节。

您可以在数据包的详细信息中看到这一点;我们不仅有octets的编号,还有实际的电子邮件本身,其中包括邮件头信息;发送和接收的信息;FromToSubjectDate;然后是电子邮件本身的实际数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,数据随后继续,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,第一个数据包基本上是以数据开头的报头信息,然后数据继续。然后,我们确认数据包。我们一直在检索数据,然后客户端说:删除消息。我们已经下载了电子邮件;现在删除消息。这是一个可以改变的选择。

你可以告诉你的客户在服务器上留一条信息,但传统上是这样做的,这样你可以在本地下载,然后从服务器上删除。

如今,通过我们基于网络的电子邮件,或者如果你正在使用 Gmail 或雅虎!或者类似的事情,我们现在通常把所有东西都留在服务器上,并在那里存档。但这是一个非常古老的协议,所以它是基于本地存储的。

服务器回复说它删除了消息,然后我们退出连接并关闭。

它说:好的,再见。最后,我们关闭了与FINACK系列的 TCP 连接。

现在,让我们来看看 SMTP。SMTP 用于在客户端和服务器之间传输电子邮件,以便将其发送给路由收件人:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在这里看到的是用户为 SMTP 创建 TCP 连接的一系列SYNACK,然后我们看到来自服务器的 SMTP 响应。当然,我们有SMTP列在协议栏里。我们可以通过简单地输入smtp进行过滤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就像使用pop一样,我们会丢失一些来自 TCP 的信息,所以基于ipport进行过滤可能会更好。

嗯,我们在前面的截图中看到,在来自服务器的三次握手之后,128地址用一个220进行响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

响应代码是服务就绪,这意味着一切都好。这对 POP 和 HTTP 来说很熟悉。

这些协议中的许多协议,尤其是较旧的协议,使用这些不同编号的响应代码。就像 HTTP 一样,200系列响应代码是好的。所以我们看到一个220,一切都准备好了。我们也看到我们有ESTMP。这是针对 SMTP 的增强版本。就像 POP 和 FTP 一样,SMTP 是一个非常古老的协议,多年来一直在扩展和增强。有一个新版本的 SMTP,它使用新的命令传输,在前面有一个E:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,客户端发送一个EHLO,它是传统原始协议的增强版本HELO,用于创建连接。服务器响应HELO请求并创建一个连接。然后我们确认这一点,然后服务器用它能做什么的列表来响应。它有一些特性,我们看到它有流水线技术:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

管道是服务器中的一个选项,它可以接受多个命令,而不必等待每个命令,因此我们的客户端可以一次发送许多东西,而不必等待。我们的客户然后说,它将创建一个电子邮件消息;如果你注意到,它说:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际上,还记得我们查看 POP 消息时,有一个From和一个To和一个Subject,以及实际的正文字段吗?正如您在 POP 请求中看到的一样,您在 SMTP 中也看到了。因此,我们有前置的命令MAIL,但是你看到的是From和电子邮件地址,就像你在客户端软件中打开它时看到的一样。我们正在用命令写一封电子邮件。电子邮件本身并不像数据包那样被打包成一个小文件发送到服务器。这已经足够古老了,以至于我们实际上是在 SMTP 中一行一行地制作电子邮件命令。所以我们说:我们正在创建一封电子邮件,它来自下面的人。服务器说:好的,看起来不错。RCPT To表示,因此我们将它发送给以下人员。服务器说:好的。然后我们说:这里有一些数据(数据是我们消息的主体):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

服务器回答说:好的,当你完成了邮件的时候,在邮件的末尾加上下面的命令让我知道。然后,客户端在这里提供一些它希望包含在正文中的实际电子邮件数据的数据包。看到一些与此相关的附加数据包了吗?我们从服务器得到一些对这些数据包的确认,然后从服务器得到一个响应,说消息被接受,它将把它发送给一个接收者。

我们承认这一点,并告诉它:好了,我完成了;我们退出了 SMTP 连接:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后我们用一些 fin 和 ack 完成 TCP 连接;我们最后也有一些明确的重置,那就是我们连接的终止。

802.11 分析

在本节中,我们将了解无线连接问题以及它们在 Wireshark 中的表现。

标准已经存在很长时间了。你可以在 http://ieee802.org/11/Reports/802.11_Timelines.htm 找到更多信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它最初开始于 1997 年。您可以在前面的截图中看到,这是它被批准的年份。它实际上始于 1991 年。从那以后,它发生了很多变化,包括一些人可能还记得的802.11a。我们有802.11b802.11g等等。随着时间的推移,你可以看到有多少种不同口味的802.11。现在,还没有全部用于正常的家庭网络或办公网络;其中一些是 WiMAX 等长距离或低功耗的专用版本。你可以看到我经历过的所有版本都被一个更新的版本取代了,这些更新的版本在最上面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些是批准的标准。你可以看到,尽管802.11ab以及gn仍然受到硬件的支持,仍然受到操作系统的支持,但实际标准是,例如,对于我们正在谈论的这个版本,802.11ac。所以ac实际上包含了ac标准、ngba等等。你可以看到这里还有其他版本的802.11,比如将用于所谓的TV White Space区域的版本。因此,这些是可供 FCC 潜在使用和重新排序的带宽部分。我们还有一些附加的,是建议标准,比如ahai。此外,还有其他所有这些技术,它们为我们提供了更长距离、更高速率的额外连接方法,诸如此类。所有这些都可以在 IEEE 网站上找到,你可以在 http://ieee802.org/了解更多。

Packt 有许多与无线相关的书籍和视频课程,您可以看看并继续您的无线网络教育。

下面是一个设备捕获数据包的示例,该设备可以捕获802.11帧并将其提供给 Wireshark:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这通常是通过无线网卡实现的,无线网卡不仅能够启用混杂模式,还能够启用监控模式,以便查看我们使用的所有不同通道的所有数据。此外,还有频谱分析仪,如 Wi-Spy 和其他可以连接到笔记本电脑或类似设备的加密狗;你可以四处走走,研究一下光谱分析方面的东西。

我们正在研究数据包捕获,但请记住,它不仅仅是数据包捕获。无线带来了一系列额外的问题,如信号强度和与其他设备的干扰。但是看一下实际数据,它实际上显示的是以太网。当我们捕获它时,它看起来像以太网,这是故意的;标准是它应该看起来像以太网,但是通过无线连接而不是有线连接。那是为了让我们的生活更轻松,更交叉兼容。

我们在捕获中看到的是,我们将协议列为802.11,因此 Wireshark 知道这是一个802.11捕获。这是一个802.11框架,它是一个Beacon frame:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到有Beacon frame和一些旗帜。我们有一个Frame Control Field。我们有ReceiverDestination;它看起来非常类似于您在有线网络的第 2 层所期望的。您有一个 from 和一个 to MAC 地址,还获得了一些附加信息:一些附加标志,等等。现在,当然,这里有一些其他选项让它在无线上工作,例如我们的BSS Id:我们连接到什么设备,我们连接到什么接入点;还有这是哪种帧,因为802.11里有不同种类的帧:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当然,我们有自己的帧校验序列,就像标准以太网一样。

现在,什么是信标帧?接入点通常每 100 毫秒发送一次信标帧,以便向所有监听设备声明它正在提供以下网络;它是信标;并且它可以支持以下网络名称。您将在无线捕获中看到大量信标帧。它们经常发生。如果你没有经常看到它们,那么这就是一个潜在的问题。现在,如果您想要过滤,或者如果您的数据包捕获中包含其他错误数据包和其他帧,或者如果您只想过滤您的无线流量,您可以使用wlan过滤器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您使用wlan,这将包括所有的802.11协议帧。你可能还想做的其他事情(让wlan过滤器开着)是不显示信标帧。让我们说,你知道一个事实后,通过寻找事情,信标帧是一致的,一切都很好;那我们就不用担心他们了。

我们要做的是右键单击数据包详细信息中的信标帧,然后转到应用为过滤器|未选择:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样,我们就选择了所有的无线局域网帧,而不是任何信标帧。这真的减少了我们的捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们只看到探测请求、响应和一些数据。

说到信标,这里有一个捕获大量信标的例子。一切都只是不断的信标,信标,和无处不在的信标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

无线网络中可能出现的一个常见问题是由于接入点出现某种问题而导致信标丢失。这可能是信号强度问题,也可能是设备固件、坏天线等问题。什么都有可能。但是信标下降会导致客户端断开与无线网络的连接,因为它们认为无线网络已经消失。因此,前面截图中显示的捕获包括信标问题,但我们并没有真正看到任何明显的弹出内容。没有什么是亮红色的,突然出现在我们面前;真的没有变化;都是一致的。那么我们如何看待这个问题呢?

记得回到统计的部分。现在,转到我们信标上的统计| I/O 图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到绝对有一个下降,这表明我们的接入点有问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在进行无线故障排除时,请务必使用绘图功能,因为由于它通过无线电波传输的特性,有许多变量是我们无法控制的。我们需要做更多的可视化工作,以了解发生了什么,特别是当你有成千上万个这样的帧,并且其中存在问题,但你不知道问题在哪里,以及具体到什么程度。使用绘图对你会有很大的帮助。

此外,我们有一个显示信号问题的捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,我们来做一个ping。我们有(ping) request(ping) reply等等。现在只需向下滚动截图,看看是否发现任何奇怪或明显的问题。

当我们滚动浏览时,我们可以看到所有的Echo (pings):重复请求和回复。你发现什么问题了吗?有一个非常明显的问题。

当我们滚动浏览时,请注意这样一个事实:我们有如此多的请求,却很少有回复。这是一个非常明显的问题。如果我们进入专家信息,我们可以在警告中看到,它说没有看到对 ICMP 请求的响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当然,您知道,当我们点击每个请求时,它会向我们显示沿途的每个数据包。我们有所有这些没有收到回复的请求,但是您在捕获中没有看到任何其他问题。

请记住,ICMP 不像 TCP 那样提供任何类型的有状态连接,因此我们不会收到任何表明确实存在任何问题的响应。我们只是尝试,失败了,我们只是一遍又一遍地尝试。因此,能够看一看捕获中有什么,甚至只是滚动它,看一看模式看起来像什么,可能是有用的,因为我们真的没有太多其他的东西可以继续。

当然,您也可以绘制出这两个图,一个是请求图,一个是回复图,您可以看到它们在 I/O 图中可能不匹配。这表明存在信号问题,所以我们在这里看到的是一些数据包成功了,而一些没有。然而,在捕获过程中,它不会告诉我们任何地方的信号强度。我们必须根据我们掌握的信息来确定问题所在,从这个角度来看,这看起来像是一个信号问题,因为我们有数据包丢失。现在,在测试设备上,您很可能会在您的命令窗口中看到,在接下来的 ping 尝试中,有如此多的数据包丢失。在驱动程序中,您可能会看到无线信号很弱。你也可以从其他角度来看这个问题,但是如果你只看 ICMP 的一个纯粹的数据包捕获,这就是问题的一个例子,比如一个低信号问题。

无线是一个非常深入的大话题,如果你最终打算支持它,并且这是你有兴趣做的事情,我强烈建议你花时间通过一个完整的无线课程或一系列的书籍来学习它。

关于如何在 Wireshark 中查看它以及在 Wireshark 捕获中某些东西可能是什么样子的简短视频或书籍是有用的,但无线方面还有更多内容,因为我们使用无线电波和信号强度等。因此,强烈建议走出去,学习更多关于无线的知识,以便了解事情在幕后是如何工作的。

VoIP 分析

在这一节中,我们将了解在两部电话之间建立连接时 SIP 是如何工作的,以及 RTP 是如何在两部电话之间传输实时数据的。

我们将在本章和下一章使用的示例捕获可以在 Wireshark SampleCaptures 页面(https://wiki.wireshark.org/SampleCaptures)上找到。如果您向下滚动并查找 SIP 和 RTP 部分,我们将使用 MagicJack+简短测试呼叫:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下载 MagicJack+ short test call 并在 Wireshark 中打开它。

一旦你打开了,我们将看看我们的捕获,并注意到我们有各种各样的包;它还没有被清理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到有一些 ARP、一些 UDP 流量、ICMP、一些 SIP 和一些 RTP 我们最后也有一些 SMB。所以有各种各样的东西。这就像一次真实的抓捕。为了挑选出 SIP 流量,这是众多协议之一,但也是 VoIP 最常用的协议,我们只需输入sip作为我们的显示过滤器,并应用它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还有许多其他协议也在使用中,例如 Skinny,这是思科网络非常流行的一种协议,但标准协议是 SIP。SIP 的作用是在两台设备之间建立连接。如果你看下面截图的左手边,可以看到时间栏。我们还有159秒。所以,我们这里有一系列的连接尝试。这一切都非常快,非常在同一时间框架内。然后,我们有另一个包:166秒,然后我们有另一对 170s。需要注意的是,我们遗漏了一些数据。

如前所述,捕获也包括一些 RTP 流量。实际情况是,SIP 在两台设备之间建立连接。然而,实际数据,即视频流量或语音流量(无论是什么),是通过实时协议 RTP 在两个设备之间直接传输的。因此,如果我们在 SIP 上过滤,我们将看不到它。我们需要做的是将rtp加到这上面,这样就可以冲掉一些我们在这里丢失的时间框架。

为此,我们将键入sip || rtp,您可以看到我们现在已经创建了与 SIP 的连接:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,我们有 RTP,这是语音流量的传输,然后我们在底部有一些 SIP 再见命令。就像我们谈到的其他协议一样,它们在 SIP 中使用状态代码,就像其他许多协议一样。所以,我们有 400 系列,这是一个问题;我们有 100 系列,这是成功的;还有一些其他的命令。

如果你想了解更多关于 SIP 的知识,看看 RFC 3261,它给了你一个关于 SIP 如何工作的详细分析(https://tools.ietf.org/html/rfc3261)。

我们在前面的捕获中看到的是一些连接,然后是一些实际发送的数据流量。这实际上是一个非常好的捕获,因为它向我们展示了一个问题和一个解决方案。

之前,我们讨论了状态码。在这里,我们有一个Status: 100 Trying:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有一个本地设备,看起来像某种电话,试图创建一个 SIP 连接到 magicJack。它提供了一个INVITE命令,说:请邀请下面的设备加入连接。并且这是被发送到216.234.64.8地址的;它正被发送到 magicJack SIP 服务器。SIP 服务器处理一部电话和另一部电话之间的连接,然后一旦连接建立,它就脱离通信。它不充当代理并传递所有数据流量,它只创建连接。所以我们可以看到这里有216.234.64.8。我们的设备正在向它发送一个请求,说:邀请以下电话号码。试着称呼它。服务器回复说:好的。我要去试试,但是你没有被授权。

然后我们有第二个请求:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

电话再次呼叫服务器并说:请邀请以下号码。试图称之为。服务器回复说:好的。我正在尝试。我要打电话了。然后我们成功了,这给了我们一个Session Progress

如果我们展开 SIP,我们可以看到会话进度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,我们成功了。

然后,我们有关于呼叫来自和去往谁的附加数据,以及正文中的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,您可以在正文部分看到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里我们有媒体描述,名称和地址(m):音频;哪个端口正在使用 RTP。因此,我们在 SIP 中定义,我们将使用 RTP 在消息头中定义的两个设备之间传输音频流量。

一旦连接建立,我们看到我们的本地电话,这个192地址,现在连接到一个不同的公共地址;请看最后一个二进制八位数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还看到我们正在使用G.711,这是编码方案。有许多不同的编码方案:其中一些质量更好,但带宽更高;有些带宽较小,质量较低。至于你想用哪一个就看你自己了,不过G.711是很常见的一个。

在 RTP 信息中,我们可以看到我们有一个有效载荷类型:ITU-T G.711 PCMU (0):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ITU 是另一个标准组织,就像 IEEE 和 IETF 一样。它们定义了某些协议和编码方案,如G.711。然后,我们在两个设备之间直接传输一大堆数据包,全部使用 RTP。然后,在底部我们有一个终止连接的连接请求,所以有一个再见:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们有一个状态OK,说我们终止连接。我们可以做的是在电话统计区域查看这些信息。

您可以在 Wireshark 的这一部分找到任何您想了解的 VoIP 流量信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两个最值得一看的地方是 VoIP 呼叫或 SIP 流;这真的取决于你想进入哪一个。但如果我们进入 VoIP 通话,我们会看到这是一个电话:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们在一次数据包捕获中同时发生了一系列电话呼叫,它们会在一个漂亮的图表中显示出来,并且会显示它们开始和停止的时间、谁发起了连接、来自和去往谁、它们使用的是什么协议等等。我们可以做的是选择它,然后转到流程序列,我们可以看到一个很好的图表,其中显示了本地电话上的本地端口、SIP 服务器上的远程端口以及实际设备上使用的端口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到有三台设备在使用。所有的 SIP 流量(请看Comments的右边:你可以看到使用的是什么协议)都流向了中间人。一旦连接建立,我们就有了 RTP 流量。RTP direct 上这两个设备之间的实时音频流量。然后,当我们想要终止连接时,我们发送一个再见,然后一个 ok 来确认,我们已经终止了 SIP 连接。但是,请记住,它发生在控制服务器,SIP 服务器上。这是一种非常好的方法,能够诊断电话中发生的事情,如果您在 SIP 连接方面遇到问题,通过某种 VoIP 提供商,看看这个并告诉他们发送了哪些命令以及收到了哪些命令,对于故障排除人员诊断发生了什么非常有帮助。他们可以将我们看到的与他们看到的进行比较,这非常有帮助,尤其是命令100 Trying200 OKACK;还有BYE

相比之下,我们可以看一下统计|流程图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们之前已经讨论过了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以看到流程图看起来有点复杂。您仍然可以从中获得一些相同的信息,但是由于它是针对每个包的,所以查看起来更加困难。使用另一个流程图总是更好。尽管我们可以通过从 Show 中选择选项 displayed packets 来解决这个问题,但它仍然是针对每个数据包的。所以如果你只是在说基本的连通性或者基本的流程,另一个流程图更好。如果你需要更多的细节,你可以看看这里。

您还可以查看电话| SIP 统计数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SIP 统计将为您提供不同请求的不同发生次数的计数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还记得正在使用的不同代码吗,就像 HTTP 和 FTP,以及我们看到的所有其他代码?同样的事情在这里,它会给我们一个计数,某些事情发生了多少次。这是 SIP 响应,然后我们有 SIP 请求;您会看到有两种确认,一种是再见,另一种是未授权,如果您有一个包含一系列问题的长数据包捕获,您可以看看这个,当然,您可以根据您的计数进行排序,看看哪些是最常见的。如果您看到一堆 400 或 500 个错误,这可能是您需要调查的问题。

就像 SIP 流一样,我们可以看看 RTP,它是音频流量,实际的语音流量,除了 SIP 流之外,我们还可以看看 RTP 流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还记得我们有一个从手机到 magicJack 手机的连接吗?我们在双向设置中看到了这一点。因此,我们有从电话到 magicJack 的连接,然后从 magicJack 回到电话。而这两个都是 RTP 有效载荷是G.711,就像我们之前说过的。它还为我们提供了一些关于抖动的有用信息。抖动是一个非常有用的统计数据。抖动越低,对语音流量越有利。任何类型的数据包丢失(这也是前面显示的一列);任何一种抖动。或任何延迟:这些都是语音流量的主要问题,无论是任何类型的实时流量:视频流量、语音流量等等。

抖动是不同数据包之间的延迟差异,从一个数据包到另一个数据包有很大的波动。你可能会有很多音频质量问题,因为数据包在不同的时间到达,并在软件中混在一起。在这种情况下,你可能会有一些数据包丢失,所以你会丢失某些单词,这时你就会开始遇到奇怪的噼啪声问题;你丢了话;你可能一边完全不说话,另一边能听见。当你有很多抖动或数据包丢失时,你可能会遇到各种奇怪的问题。在本节中,我们研究了使用 SIP 和 RTP 的一些 VoIP 流量,以及如何过滤这些流量,以及如何查看一些统计数据和流量图。

VoIP 播放

在这一部分,我们将重建和回放 VoIP 呼叫,并听取质量问题。

我们要做的是使用与上一节中使用的相同的 magicJack 调用。

Wireshark 真正伟大的特性之一,除了它可以创建的众多过滤器、统计数据和图表之外,就是它能够回放语音流量。如果你是一个最终用户,有些人可能会觉得这有点令人毛骨悚然,你可以监听别人的电话,但这是数据。就像我们可以来回读取所有这些命令一样,如果用户名和密码未加密,我们也可以读取它们;如果 SIP 流量也是未加密的,那么我们也可以监听电话,只是因为它是标准数据;只是刚好是语音流量。我们可以在 Wireshark 中轻松做到这一点。

为了做到这一点,我们打开了我们的电话。我们只需进入电话| VoIP 通话,然后选择通话:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择通话后,点选播放串流。当您点击它时,您会看到一个直方图,准确显示语音通话的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦你习惯了某些事物的样子,单凭这一点也许就能告诉你正在发生什么。如果是电话在响,或者是真实的话语和讨论,你可能只需要看前面截图中的柱状图就能分辨出来。然后,当然,你可以选择一边或另一边来引起你的注意,这样你就可以看到这些通道中的一个或另一个可能会发生什么,无论是从一部手机到另一部手机的源到目的地还是目的地到源。我们可以做的是,让一切保持默认状态,然后单击“play”按钮。

你可以听到电话铃响,然后它说Test, 1, 2, 3

你会看到它回放了电话的音频。它回放了电话呼叫的两个方向,所以我们听到了发送方和接收方的声音。所以,我们首先在顶部看到的是对话的一面,下面是对话的另一面。这非常有用,能够同时听到通话双方的声音。这样,如果一个用户在抱怨什么,而另一个没有,你实际上可以听到,就好像你同时把两部电话放在双耳上。

你还可以调整播放器中的抖动,听听它听起来像什么,可能会出现什么样的问题。

现在,你会注意到前面的图是实时的,当音频播放时,你会看到回放线穿过。这是一个相对干净的捕获。如果捕获过程中出现任何问题,它们都会显示在这张图上,当您更改抖动缓冲等内容时,您会看到这些问题开始出现。所以我们要做的是把它降到非常低的水平,比如说5:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您已经可以看到,我们创建了一些静默,以及一些额外的错误。如果放大,我们会看到一些抖动下降,实际上我们在连接中制造了一些问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你缩小得足够远,你会看到最初的铃声出现了,这是以前不在屏幕上的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

既然我们已经在数据包捕获中插入了所有这些问题,让我们继续播放它。

你可以听到电话铃响,它说Test 1, 2, 3

这一次你应该能听出区别。在电话通话的开始,我们听到了一点噼啪声。当电话响的时候,我们也有一些丢弃的数据包;你可以听到它有点劈啪声,听起来不太好。开始时的声音也有一些词被省略了。此外,一方完全沉默。如果你记得看直方图,在测试 1,2,3 中每个单词都有一个副本。一方现在完全沉默了;它放弃了所有这些,现在完全错过了,因为抖动中有太多的问题。所以这是一个很好的工具,可以用来重现不同的问题,听听他们在现实生活中的真实声音。

摘要

所以在这一章中,你已经学习了一些使用 POP 和 SMTP 的电子邮件分析。我们还了解了802.11,它是无线的,数据包捕获中的某些东西是什么样子,以及为了正确诊断无线,您需要在 Wireshark 中所能做的事情之外做额外的故障诊断。我们还研究了使用 SIP 和 RTP 的 VoIP 分析,创建连接,然后将音频数据直接从一个设备传输到另一个设备。然后,我们还使用 Wireshark 中的内置工具进行了回放,并对其中的一些抖动设置进行了处理,以便重现问题,并能够听出问题的声音。

接下来是第十章、命令行工具,我们将使用一些命令行工具来扩展 Wireshark,并讨论一些您可以添加到它的增强功能。

十、命令行工具

在本章中,我们将了解以下主题:

  • 从命令行运行 Wireshark
  • 运行 tshark
  • 运行 tcpdump
  • 移动瓶盖

从命令行运行 Wireshark

在本节中,我们将了解如何从命令行运行 Wireshark,并探究一些命令行选项以及如何使用它们。我想做的第一件事是打开一个命令提示符,然后我们将浏览 Wireshark 的位置。除非您的系统变量中有 Wireshark,否则您无法简单地键入wireshark并拥有该功能。

所以我们要做的就是找到它的位置。在我的系统中,它在程序文件和wireshark目录中。如果我们键入dir,我们将看到Wireshark.exe,以及我们稍后将讨论的一些其他工具,例如 tshark:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们要做的是运行Wireshark.exe;然后,如果你按下回车,它将打开 Wireshark,就像你点击图标一样。如果您键入Wireshark.exe -h,它将提供 Wireshark 可用的所有变量和参数的输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们向上滚动,我们将看到我们正在运行的 Wireshark 版本,以及我们可以使用的所有变量和参数的转储:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您会看到它们被分成以下不同的类别:

  • Capture interface
  • Capture stop conditions
  • Capture output
  • Processing
  • User interface
  • Output
  • Miscellaneous

您最想做的第一件事就是设置 Wireshark,使用您的默认接口,即您的标准本地连接有线接口来运行捕获。您应该看到您将使用Wireshark -i和接口来完成它。上面写着接口名或者idx。现在,如何确定接口名称或idx是什么——接口的索引是什么?这可以用-D来完成,它打印接口和出口的列表。现在,我们将运行Wireshark.exe -D

请注意,大小写很重要。

我们看到在下面的截图中,我们有索引号。那就是 idx: 12345。在该接口的唯一 ID 之后,我们有名称,例如Local Area ConnectionVirtualBox Host-Only Network,以及我系统上的其他内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后我们可以执行Wireshark.exe -i,然后是姓名或 idx 号。我们将使用索引号,因为它又好又短,可以防止任何额外的打字错误。我们就打Wireshark.exe -i 1。只需按下回车,你会发现它其实没做多少事。这是因为我们已经打开了 Wireshark,默认情况下,Wireshark 会打开主屏幕。主屏幕实际上还不需要做任何事情,所以,它不需要。您没有开始捕获;你什么都没做。你只要打开它。现在,您可以看到它确实选择了第一个接口,但它并不那么有用。让我们关闭它,我们将告诉 Wireshark 使用我们定义的接口,在它打开的一秒钟开始捕获。我们可以用-k来做,上面写着start capturing immediately (def: do nothing)。它只是打开了 Wireshark 接口。我们将使用-k。键入Wireshark.exe -i 1 -k,它将立即在该界面开始捕获。

另一个有用的特性是运行 Wireshark,让它在达到某个文件大小或某段时间后,或达到某个字节数后,或诸如此类的情况下,自动创建文件。最常见的情况是,人们在环形缓冲区中运行 Wireshark,在那里创建一个文件,然后它每小时、每 30 分钟或每 10 MB 自动切换到一个新文件;根据您预期的数据量,无论您决定了什么,都是处理这个问题和处理您正在捕获的这个系统的最佳方式。我们能做的是使用标志执行 Wireshark,以允许我们自动创建文件。如果您想让它在夜间运行,而不是在早上用一个 20 GB 的捕获文件使您的系统崩溃,这是非常有用的:这不是很有用,而且很难处理,即使这是可能的,但这取决于您的系统。我们将使用已经选择的主接口-i 1 -k运行 Wireshark,因此它会立即启动数据包捕获。然后,我们将定义我们使用环形缓冲区的事实。因此,我们将使用-b作为环形缓冲区和我们想要的环形缓冲区类型。我们需要文件大小吗?我们想要持续时间吗?会是什么呢?您将看到环形缓冲区有许多选项,如持续时间、文件大小和您想要替换的文件数量;因此有了术语,在那里他们在圆圈中替换自己。我们要做的是选择-b作为环形缓冲区,我们将使用filesize 10000

如果你做了filesize 10000,通常文件大小是基于 KB 的。我们说大约 10 MB 创建一个新文件,所以每 10 MB 我们将创建一个新的捕获文件。然后我们必须定义输出文件。所以,我们需要一个环形缓冲区,但是我们需要告诉它把它放在哪里。我们称-w为写入(我们将写入一个输出文件),它将位于C:\Users\sayalit\capture.pcapng:

Wireshark.exe -i 1 -k -b filesize 10000 -w C:\Users\sayalit\capture.pcapng

如果我们运行前面的命令,Wireshark 将运行并开始捕获所有数据包。一旦达到 10 MB,它将刷新屏幕并再次开始捕获,每次达到 10 MB 时,您会看到它会闪烁一次,并在捕获新的 cap 文件时不断出现新的屏幕。如果您进入在-w参数中指定的目录,您将看到每次达到 10 MB 时创建的所有文件。这只是从命令行运行 Wireshark 时可以使用的几个参数和标志的示例。如您所见,有许多选项,如果您愿意,您可以创建非常精细的自定义选项。接下来,我们将看看 tshark,这是一个安装 Wireshark 时附带的纯命令行应用。

运行 tshark

在本节中,我们将了解如何运行 Wireshark 的终端版本,以便它只有命令行界面,而不是打开 GUI。

为了运行 tshark,您必须打开命令窗口,一旦它打开,我们必须浏览到 Wireshark 的安装位置,因为正如我解释的那样,除非您的系统路径中有它,否则它将不可用。因此,我们将再次浏览 Wireshark 所在的位置,并列出一个目录列表。我们会看到我们有tshark.exe。这是默认情况下随 Wireshark 一起安装的。为了运行 tshark,你所要做的就是运行tshark.exe。如果您这样做,它会自动在您的默认界面上开始采集:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您会注意到,它直接在命令行界面上向stdout显示它正在捕获的数据包。它这样做是因为它没有图形界面;除了它正在使用的屏幕,也就是命令界面之外,没有什么可以显示的。您将看到输出提供了与您在 Wireshark GUI 中看到的类似的显示。我们有数据包编号、数据包捕获开始后的时间、最后两个数据包之间的时间差、源 IP 和源端口、目的 IP、目的端口等等。如果你看一看tshark.exe -h,就像Wireshark.exe,它看起来会非常相似。如果我们向上滚动,我们可以使用相同的参数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们用-D再次显示接口列表,用-i显示我们想要使用的接口。我们不需要定义-k让它自动开始捕获,因为 tshark 没有一个 GUI 让我们做任何事情,所以它无论如何都会自动开始捕获。我们可以像以前一样设置环形缓冲区;我们可以定义输出文件;我们可以做各种各样的事情。

例如,我们可以输入tshark -D来再次显示我们所有的界面。为了确认我们想要使用接口号1,我们将键入tshark.exe -i 1,这确保了第一个接口的使用。然后,我们也可以定义一个输出文件,所以我们将它写到C:\Users\sayalit\test.pcapng,现在它开始捕获:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您会看到它向我们展示了它在运行时捕获了多少数据包。要停止捕获,只需按下 Ctrl + C ,它就会停止正在做的任何事情。就像 Wireshark 的例子一样,我们可以增强我们已经创建的这行代码,我们可以定义一个环形缓冲区,比如说,持续时间是每100秒。然后,它就会这样做。每隔100秒,它会创建一个新文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tshark 对于您想要编写脚本的东西非常有用。如果您想要编写一个批处理脚本或 bash 脚本来执行捕获,并且您想要确保它使用 Wireshark 能够提供的所有功能,并且它保存为pcapng格式,并且您想要确保它像在 Wireshark 中一样执行所有操作,那么使用 tshark 是一个很好的主意,在资源较少的系统上也是如此。如果您在命令提示符下运行此程序,需要在 Windows 2000 系统等旧系统上捕获数据包,或者类似的勉强通过的系统,您可以运行tshark,这将消除运行 Wireshark 带来的大量开销,尤其是在界面自动更新和滚动数据包的情况下。这消除了所有这些,它只得到我们需要的数据。在下一节中,我们将看看tcpdump,它可以在几乎所有的 Unix 或 Linux 系统上使用。

运行 tcpdump

在这一节中,我们将看看如何在 Linux 系统上运行tcpdump来捕获流量。

如果您有基于 Linux 或 Unix 的系统(BSD 无论它可能是什么)没有安装 Wireshark,并且您没有安装 Wireshark 的选项,或者如果您有一个系统,您真的不想花时间安装 Wireshark,而只想快速捕获,您可以使用tcpdump在几乎所有系统上这样做。这是一个非常常见的实用工具,几乎安装在所有基于网卡的系统上。

我们有的是 Ubuntu 的更新版本,我已经打开了终端窗口,你要做的就是运行tcpdump。它在系统变量 path 中,所以您不必像我们在 Windows 上浏览其他文件那样去浏览它,我将使用--help运行它。我们可以看到tcpdump已经显示了它的帮助内容,它向我们展示了它可以接收哪些参数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你想在终端窗口中了解更多关于tcpdump的内容,如果你不熟悉 Linux,你可以做man tcpdump,它会给你提供如何使用tcpdump的手册。这是一个很好的,很长的文档,描述了所有不同的论点,它们的作用,以及如何使用,还有一些例子。要离开那里,你只需要按下 Q

现在,您会注意到在Usage行中,tcpdump的语法和参数以及它可用的标志与 tshark 和 Wireshark 不同,所以我们不能运行完全相同的命令。它们很相似,但又不完全相同。例如,没有-D让我们看看我们的界面。如果您想知道您的 Linux 系统上的接口,通常您可以运行类似于ifconfigiwconfig的东西,这取决于您在寻找什么,它将输出您可用的接口、与它们相关联的 IP 地址以及一系列其他统计数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,这是一个正在运行的虚拟机,这就是它显示ens33作为接口名称的原因。很多时候,这是eth0或类似的东西。lo是我们系统上的回环。就像你在 Windows 等系统中看到的其他系统一样,通常会有一个回送。这是这个系统上的一个回环。如果我们回头看看我们的信息,我们可以运行tcpdump,我们也可以用-i定义一个接口,这样这个接口就派上用场了。我们要做tcpdump -i ens33。现在,默认情况下,没有-i命令的tcpdump将尝试在您拥有的默认接口上运行,在本例中是ens33接口,我们可以在下面的屏幕截图中查看一下。当我尝试这样做时,你会看到我有一个错误。它说You don't have permission to capture on that device:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据您的系统,您可能需要运行sudo,为了做到这一点,输入您的用户的密码,这将提升您的用户的权限,以便您可以运行这个命令。可以看到上面写着tcpdump现在正在运行。它会立即向我们显示进出系统的任何数据包,如果是的话,但因为这是虚拟化系统,tcpdump现在无法在其上正常运行:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ctrl + C 取消,你看到有 0 包。我们要做的是为示例定义环回接口,使用tcpdump -i lo进行环回,就像我们在这里看到的ifconfig命令下一样。如果我现在这样做,那就是倾听;但是,我们还没有任何流量要发送到环回接口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们将开放一个新的终端,我将产生一些流量。我就简单的ping我的localhostlocalhost作为127.0.0.1的别名,这是我的环回地址。当我 ping 回送时,你会看到在tcpdump窗口中弹出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以看到,与 tshark 和 Wireshark 类似,我们有数据包发生的时间、发件人和收件人地址、协议类型、数据包内容以及详细信息。我们将取消那个。 Ctrl + C 关闭这两个。

现在,如果我要做一个清单,这就像 Windows 中的dir:ls;除了我之前做的测试文件之外,这里没有任何文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过运行它,它输出到终端的stdout,但是它实际上并不保存文件。为此,我们必须定义文件,就像在 tshark 中一样。我们将通过输入命令rm test.pcap删除我以前的测试文件;你会发现它现在不见了。我们将再次运行tcpdump,这一次,我们将为它定义一个输出文件来保存。与 tshark 一样,幸运是,我们使用-w进行写操作。所以,我们正在写一个文件test.pcap。在输入命令sudo tcpdump -i lo -w test.pcap并开始产生一些流量后,不是输出到stdout,而是输出到文件,我可以停止我的流量。我也可以停止我的捕获,它说它保存了64包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我看一下我的清单,我确实有test.pcap,如果我看一下大小,我会看到它确实有一些字节。还有一个关于W的选项,我想指出这一点,因为我已经展示了环形缓冲区的例子。这是一种环形缓冲区的方式,它会自动覆盖这么多的文件。但是,它会保存您定义的许多文件,然后,当您达到最大数量时,它会开始覆盖最后最旧的文件。在下一节中,我们将看看dumpcap,它是tsharktcpdump的另一个选项。

移动瓶盖

在这一节中,我们将看看如何运行dumpcap,它是tsharktcpdump的另一种选择。

再一次,我们必须去dumpcap。在本例中,它与 Wireshark 一起安装在系统上,如果我们列出一个目录,您会看到dumpcap确实列出来了。Tshark 实际上是基于dumpcap,所以我们可以键入dumpcap.exe --help-h。如果我们看一下输出,它看起来与 tshark 和 Wireshark 非常相似:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不过,根据您使用的系统,它可能因为这样或那样的原因只有dumpcap可用,或者如果它是一个非常小的嵌入式物联网系统,tshark 可能会使用太多内存,或者类似的情况。你可以潜在地使用dumpcap来获得一个更轻量级的应用来捕获流量——或者你只是喜欢更好地使用它。如果我们看看现有的论点,它们就像 tshark 中的一样。我们有-i-D-w输出。他们都非常相似。我们可以通过运行dumpcap来说明这一点,我们将使用-D来再次显示我们的界面。我们可以输入dumpcap -i 1,我们将再次输出到一个文件。我们就打C:\Users\sayalit\dump.pcap。如果我们开始这样做,它将开始捕获数据包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们也可以扩展它,定义一个要使用的缓冲区,就像其他例子一样,我们可以做-b并假设持续时间为60秒。这样,每一分钟,它都会创建一个新文件。我们也可以通过减少秒数来说明这一点。让我们把它改成5。每过5秒,它就会为我们创建一个新文件。文件名每隔5秒就会改变一次。这是使用缓冲区的一个例子。请注意,在所有这些实用工具中,您可以定义限制捕获的过滤器,因此您可以对这些过滤器应用捕获过滤器。除非万不得已,否则我不建议你这么做。如果可能的话,最好是捕获所有内容,然后使用 Wireshark 中的显示过滤器只过滤您需要的内容。通过应用捕获过滤器,您可能会错过一些可能有用的数据包。也许您只是捕获了 TCP 流量,但随后一大堆 ARP 或 ICMP 流量最终导致了问题。你会错过,因为你没有捕获到流量。如果可能的话,您应该尽可能地使用默认值,只使用一个基本的接口选择和一个环形缓冲区,然后取出文件并解析出来。另外,在 Wireshark 中观察它们。只需应用显示过滤器,并执行必要的行动,如绘图。

摘要

在本章中,我们讨论了 Wireshark 的几个命令行选项。我们讨论了从命令行运行 Wireshark 以及一些可用的参数。我们还讨论了如何运行 Wireshark 的命令行版本tshark、运行通用转储实用工具tcpdump(可在许多 Linux 和 Unix 系统上使用),以及运行另一种替代 tshark 和 Wireshark 的工具dumpcap

第 11 章A故障排除场景中,我们将深入探讨用户试图连接到 FTP 服务器的问题。

<think>好的,我现在需要帮助用户了解或实现得物签名的相关技术,特别是签名算法的实现方式。首先,我需要收集已有的信息。根据用户提供的引用,特别是引用[4]和[5],得物的签名算法可能涉及逆向工程分析,使用了JavaScript中的XMLHttpRequest重写来拦截请求,并在请求中包含特定的sign参数。这可能意味着签名生成是在客户端进行的,通常在前端JavaScript代码中完成。 接下来,我应该考虑常见的签名生成方法。常见的Web应用签名算法通常使用HMAC、AES、RSA或自定义的哈希组合。引用[1]提到了RSA算法,但得物的签名可能更倾向于使用HMAC-SHA256之类的哈希算法,结合时间戳、随机数和请求参数进行签名,以防止篡改和重放攻击。 用户可能需要具体的步骤,比如逆向分析得物的JavaScript代码,找到生成sign的函数,提取关键参数和加密逻辑。引用[5]中的代码片段展示了如何重写XMLHttpRequest的open方法来拦截请求,这可能用于调试和定位签名生成的代码位置。 此外,引用[4]提到使用Python进行算法还原,所以可能需要在Python中复现JavaScript的签名生成逻辑。这通常涉及分析请求参数如何排序、拼接,以及如何与密钥结合进行哈希或加密。需要注意反爬机制,如obfuscation(代码混淆)或动态密钥,这可能需要使用AST(抽象语法树)解析或动态执行来还原算法。 用户可能还需要了解如何应对反调试措施,比如在Chrome开发者工具中使用断点调试,或者使用工具如Frida进行Hook。同时,引用[3]和[4]强调了法律和合规问题,确保研究仅用于学习目的,不用于非法用途。 最后,应该提醒用户注意法律风险,遵循网站的使用条款,避免侵犯知识产权或违反计算机安全法律。总结起来,实现得物签名需要逆向工程分析前端代码,提取关键算法,处理可能的混淆和反调试,最后用目标语言如Python复现算法。</think>### 得物签名算法实现方式分析 得物签名算法主要用于接口请求的身份验证和防篡改保护,常见实现方式涉及以下技术点: #### 1. **签名参数组成** 签名通常由以下参数动态生成: - 请求参数(经排序、过滤空值后拼接) - 时间戳(如:$timestamp=1620000000$) - 随机数(如:$nonce=5a8s3d$) - 设备指纹(如:$device\_id=abcdef$) - 应用密钥(加密盐值,可能动态获取)[^4] 示例参数拼接逻辑: $$ \text{sign\_str} = \text{path} + \text{sorted\_params} + \text{timestamp} + \text{nonce} $$ #### 2. **加密算法类型** 根据逆向分析,得物可能采用以下组合: - **HMAC-SHA256**:对拼接字符串进行哈希运算 - **AES/Base64编码**:对结果二次处理 - **自定义位移/异或操作**:增加逆向难度[^5] #### 3. **JavaScript代码混淆** 关键函数可能被混淆,例如: ```javascript function _0x12ab5(a, b) { return a ^ b << 3; } // 需要AST解析还原控制流 ``` #### 4. **Python算法还原示例** ```python import hmac import hashlib def generate_sign(params, secret_key): # 1. 参数排序并拼接 sorted_str = '&'.join([f"{k}={v}" for k,v in sorted(params.items())]) # 2. HMAC-SHA256加密 sign = hmac.new(secret_key.encode(), sorted_str.encode(), hashlib.sha256).hexdigest() # 3. 自定义处理(示例) return sign.upper() + str(int(time.time())) ``` #### 5. **反爬对抗措施** - 动态密钥:通过接口定期更新加密盐值 - 环境检测:验证是否在真机环境运行 - 请求频率限制:异常高频触发验证码[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值