使用 Wireshark 的“追踪 TCP 流”功能分析 TCP 流量

WiresharkWiresharkBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验(Lab)中,你将学习如何在 Wireshark 中利用“追踪 TCP 流 (Follow TCP Stream)”功能进行 TCP 流量分析。此功能使你能够提取和查看特定 TCP 会话的数据负载(data payload)。它在多种网络安全场景中非常有用,例如调查可疑的网络流量和分析应用层协议(application protocols)。

在本实验(Lab)结束时,你将掌握如何使用这个强大的工具来深入了解网络通信。这将显著增强你的网络分析能力。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 93%。获得了学习者 97% 的好评率。

理解 TCP 和捕获网络流量

在这一步中,我们将首先了解 TCP(传输控制协议 (Transmission Control Protocol)),它是网络通信的基础组成部分。然后,我们将使用一个名为 Wireshark 的强大工具来捕获网络流量。理解 TCP 和能够捕获网络流量是网络安全领域的基本技能,因为它们使你能够了解网络上发生的事情,并分析它是否存在潜在问题。

什么是 TCP?

TCP,即传输控制协议 (Transmission Control Protocol),是互联网协议族 (Internet Protocol suite) 中最重要的协议之一。互联网协议族是一组规则,用于管理数据在互联网上的传输方式。TCP 提供了一种可靠的方式,用于在通过 IP 网络进行通信的不同主机上运行的应用程序之间发送数据。

可靠性意味着 TCP 确保从一个应用程序发送到另一个应用程序的所有数据包都正确且按正确的顺序到达。这与 UDP(用户数据报协议 (User Datagram Protocol))不同,UDP 是一种无连接协议。UDP 在发送数据之前不建立连接,并且不保证所有数据包都会到达或按顺序到达。另一方面,TCP 是面向连接的。它首先在发送方和接收方之间建立连接,然后发送数据。此过程有助于维护正在传输的数据的完整性。

启动 Wireshark

要开始捕获网络流量,我们需要启动 Wireshark。你可以这样做:

  1. 首先,打开一个终端窗口。你可以通过单击 Dock 中的终端图标或按 Ctrl+Alt+T 来执行此操作。终端是一个基于文本的界面,允许你通过键入命令与计算机的操作系统进行交互。

  2. 打开终端后,你需要键入一个命令来启动 Wireshark。键入以下命令,然后按 Enter:

wireshark

此命令告诉操作系统启动 Wireshark 应用程序。

  1. 当 Wireshark 打开时,你将看到主界面。在此界面中,你将看到可用网络接口的列表。网络接口是你的计算机和网络之间的连接点。每个接口都可用于发送和接收网络流量。
Wireshark 主界面

捕获网络流量

现在 Wireshark 已经打开,我们准备开始捕获网络流量。步骤如下:

  1. 在网络接口列表中,单击 eth1 接口。这通常是你的虚拟机 (virtual machine) 的主网络接口。虚拟机就像你计算机中的一台计算机,而 eth1 接口是它连接到网络的方式。

  2. 选择 eth1 接口后,单击“开始捕获数据包 (Start capturing packets)”按钮,该按钮由工具栏中的蓝色鲨鱼鳍图标表示。此操作告诉 Wireshark 开始监视所选的网络接口,并捕获通过它的所有网络数据包。

开始捕获数据包
  1. 当 Wireshark 开始捕获时,你将看到数据包出现在 Wireshark 主窗口中。这些数据包是网络流量的构建块。每个数据包都包含少量数据以及一些关于它来自哪里和去往哪里的信息。

  2. 为了生成一些我们可以分析的 TCP 流量,我们将使用 curl 命令。打开一个新的终端窗口并键入以下命令:

curl https://labex.io

curl 命令用于从服务器传输数据或将数据传输到服务器。在本例中,它从 https://labex.io 获取网页内容。此操作将生成 TCP 流量,因为对网页的 HTTP 请求使用 TCP 协议。

  1. 运行 curl 命令后,你将在终端中看到显示的网页内容。同时,Wireshark 将捕获与此 HTTP 请求相关的所有 TCP 数据包。这些数据包包含有关你的计算机和 Web 服务器之间的请求和响应的信息。

  2. 捕获大约 10 - 15 秒后,这通常足以获得良好的流量样本,返回到 Wireshark 并单击“停止捕获数据包 (Stop capturing packets)”按钮,该按钮由工具栏中的红色方形图标表示。这将停止 Wireshark 捕获任何更多的数据包。

停止捕获数据包
  1. 要保存捕获的流量以供将来分析,请转到“文件 (File)”菜单并选择“保存 (Save)”,或者你可以按 Ctrl+S。导航到 /home/labex/project/ 目录,将你的文件命名为 capture.pcapng,然后单击“保存 (Save)”。.pcapng 文件格式是用于存储网络数据包捕获的标准格式,它允许你稍后打开和分析捕获的流量。

现在,你已成功捕获了一些包含 TCP 会话的网络流量。在接下来的步骤中,我们将分析此捕获的流量,以了解有关 TCP 的更多信息。

过滤和追踪 TCP 流

在这一步中,我们将分析在上一步中捕获的 labex.io 流量。我们将学习如何过滤网络流量以隔离特定的 TCP 会话,并探索 Wireshark 强大的“追踪 TCP 流 (Follow TCP Stream)”功能。此功能就像网络通信的放大镜,允许你查看两个端点之间的完整会话。

过滤 TCP 流量

首先,让我们过滤流量,专门关注我们的 labex.io 通信:

  1. 在 Wireshark 主窗口中,查看数据包列表的顶部。你将看到一个显示过滤器文本框,其中包含显示“应用显示过滤器 (Apply a display filter)”的占位符文本。
  2. 在过滤器框中键入 tcp,然后按 Enter 或单击箭头按钮以应用过滤器。
  3. 数据包列表现在仅显示 TCP 数据包,但我们可以进一步缩小范围。由于我们对使用 curl 命令生成的 labex.io 流量感兴趣,因此让我们优化我们的过滤器。
  4. 在过滤器框中键入 tcp contains "labex" 并应用它。这将仅显示内容中包含“labex”的 TCP 数据包,从而帮助我们找到相关的流量。
应用 TCP 过滤器

理解 TCP 会话

在我们开始追踪 TCP 流之前,重要的是要了解什么是 TCP 会话。TCP 会话包括在 TCP 会话期间在两个端点(IP 地址和端口组合)之间交换的所有数据包。每个 TCP 会话都有几个关键组件:

  • 源和目标 IP 地址:在我们的例子中,是你的机器的 IP 和 labex.io 的服务器 IP
  • 源和目标端口:对于我们与 labex.io 的 HTTPS 连接,目标端口很可能是 443
  • 序列号和确认号:这些跟踪数据并确保正确交付
  • 各种标志(SYN、ACK、FIN 等):这些控制连接状态

在我们的捕获中,我们应该看到你的机器和 labex.io 服务器之间的 TCP 会话。

追踪 TCP 流

现在让我们分析 labex.io 请求的 TCP 流:

  1. 在过滤后的数据包列表中,查找目标 IP 可能属于 labex.io 的数据包。你应该看到目标端口为 443 (HTTPS) 的数据包,该端口用于安全 Web 流量。
  2. 单击其中一个数据包以选择它。
  3. 右键单击所选数据包,然后从上下文菜单中选择 追踪 (Follow) > TCP 流 (TCP Stream)
追踪 TCP 流菜单
  1. 将打开一个新窗口,显示你的机器和 labex.io 服务器之间的整个 TCP 会话。
TCP 流内容窗口
  1. 在此窗口中:

    • 红色文本表示从你的机器(客户端)发送到 labex.io 服务器的数据
    • 蓝色文本表示从 labex.io 服务器发送回你的机器的数据
    • 整个会话按发生的顺序重建
  2. 由于我们通过 HTTPS 访问 labex.io,因此你将在流中主要看到加密数据。这是正常且预期的,因为 HTTPS 会加密数据以在传输过程中保护它。你或许能够识别通信开始时的 TLS 握手,但实际的 HTTP 请求和响应将被加密。

  3. 通过使用“显示和保存数据为 (Show and save data as)”下拉菜单来浏览不同的查看选项:

    • ASCII:将数据以文本形式显示(用于读取任何未加密的部分)
    • Hex Dump:同时显示十六进制和 ASCII 表示形式(适用于检查加密数据)
    • C Arrays:将数据格式化为 C 编程语言数组
    • Raw:仅显示原始二进制数据
  4. 为了记录此分析,请单击“打印 (Print)”按钮。将打印输出另存为 /home/labex/project/ 目录中的名为 print.pdf 的 PDF 文件。

打印按钮

通过追踪 TCP 流,你可以看到你的机器和 labex.io 服务器之间的完整通信,而无需手动从单个数据包中拼凑数据。在下一步中,我们将学习如何更详细地保存和分析此数据。

保存和分析 TCP 流数据

在这一步中,我们将保存我们在上一步中检查的 labex.io TCP 流数据,以供离线分析。我们还将学习如何解释这些已保存的信息,以从加密的 HTTPS 通信中提取有价值的见解。

保存 TCP 流数据

让我们保存来自我们的 labex.io 连接的 TCP 流数据:

  1. 你应该仍然打开着上一步中的 TCP 流窗口,显示你的机器和 labex.io 之间的通信。如果你不小心关闭了它,只需重复步骤来追踪其中一个 labex.io 数据包的 TCP 流。

  2. 在 TCP 流窗口的底部,找到“另存为 (Save As)”按钮。

“另存为”按钮位置
  1. 单击“另存为 (Save As)”按钮,这将打开一个保存对话框。

  2. 导航到 /home/labex/project/ 目录,然后输入文件名 tcp_stream_data.txt

  3. 单击“保存 (Save)”按钮。这会将整个 labex.io TCP 流保存到具有指定名称的文本文件中。

  4. 内容将以在“显示和保存数据为 (Show and save data as)”下拉菜单中选择的格式保存。如果你想以不同的格式保存它(例如,十六进制转储 (Hex Dump) 而不是 ASCII),你可以在保存之前更改下拉菜单中的格式。

理解已保存的数据

现在我们已经保存了来自我们的 labex.io 连接的 TCP 流,让我们检查它的内容:

  1. 打开一个终端以查看已保存的文件:
head /home/labex/project/tcp_stream_data.txt

或者你可以使用 cat 查看整个文件:

cat /home/labex/project/tcp_stream_data.txt
  1. 检查文件内容。由于我们到 labex.io 的流量是通过 HTTPS 传输的,因此大部分数据将被加密并显示为不可读的字符。但是,你仍然可以观察到几个重要的元素:

    • 通信开始时的 TLS 握手,你的客户端和 labex.io 服务器在此处协商加密参数
    • 客户端 hello 和服务器 hello 消息,它们是 TLS 握手的一部分
    • 加密的应用程序数据,其中包含你的实际 HTTP 请求和服务器的响应
  2. 请注意,数据的组织方式与它在 TCP 流窗口中显示的方式相同,客户端数据(从你的机器到 labex.io)与服务器数据(从 labex.io 到你的机器)分开。

TCP 流分析的实际应用

你正在开发的 TCP 流分析技能在许多网络安全场景中都很有价值。让我们将这些与我们在 labex.io 流量中观察到的内容联系起来:

  1. TLS/SSL 检查 (TLS/SSL Inspection):通过分析 labex.io 流中的 TLS 握手,安全专业人员可以验证安全连接是否正在使用强大的加密算法。
  2. 安全监控 (Security Monitoring):即使使用像我们的 labex.io 连接这样的加密 HTTPS 流量,分析师也可以识别通信模式,而不必解密内容。
  3. 网络故障排除 (Network Troubleshooting):如果我们的 labex.io 连接失败,分析 TCP 流可以帮助确定问题是在 TCP 连接建立期间、TLS 握手期间还是 HTTP 交换期间。
  4. 网络取证 (Network Forensics):在调查场景中,像我们的 labex.io 连接这样的 TCP 流将有助于重建网络活动的时间线。
  5. 性能分析 (Performance Analysis):通过检查 labex.io TCP 流中数据包的定时和顺序,你可以识别网络中潜在的性能瓶颈。

通过保存 TCP 流,就像我们对 labex.io 连接所做的那样,你将创建一个永久记录,该记录可以:

  • 与团队成员共享以进行协作分析
  • 用作安全调查中的证据
  • 与其他捕获的流进行比较以识别模式
  • 使用 Wireshark 之外的其他工具进行分析

这种提取、保存和分析实际网络通信数据的能力使 TCP 流分析成为网络安全专业人员的强大技术。

高级 TCP 流分析技术

在最后一步中,我们将探索一些高级技术来分析捕获中的 TCP 流,重点关注我们的 labex.io 流量和可能存在的任何其他 TCP 会话。这些高级技能将帮助你在处理复杂的网络流量捕获时更加高效。

过滤多个 TCP 流

让我们学习如何浏览和过滤捕获中的所有 TCP 会话,而不仅仅是 labex.io 流量:

  1. 返回到 Wireshark 主窗口。如果来自我们的 labex.io 分析的 TCP 流窗口仍然打开,请将其关闭。
  2. 要查看捕获中的所有 TCP 会话,请转到顶部菜单中的 统计 (Statistics) > 会话 (Conversations)
  3. 在“会话 (Conversations)”窗口中,单击 TCP 选项卡以过滤视图,仅显示 TCP 会话。
会话窗口
  1. 此视图显示有关捕获中所有 TCP 会话的详细信息,包括:

    • 源和目标地址以及端口
    • 在每个方向上传输的字节数
    • 每个会话的持续时间
    • 每个方向上的数据包
  2. 查找与我们的 labex.io 连接相对应的会话。它应该涉及你在步骤 2 中观察到的相同 IP 地址。你可能还会看到在捕获期间发生的其他 TCP 会话。

  3. 选择 labex.io 会话,然后单击底部的“追踪流 (Follow Stream)”按钮。这提供了另一种访问我们之前分析的相同 TCP 流的方法。

使用 TCP 流编号

捕获中的每个 TCP 流都有一个唯一的标识符,称为“tcp.stream”编号。这提供了一种精确的方式来过滤和分析特定流:

  1. 打开 Wireshark 主窗口,查看你之前识别的其中一个 labex.io 数据包的数据包详细信息。展开中间窗格中的“传输控制协议 (Transmission Control Protocol)”部分,然后查找名为“流索引 (Stream index)”或类似的字段。此数字是 labex.io TCP 流的唯一标识符。

  2. 要过滤属于此特定流的数据包,请使用如下所示的显示过滤器:

tcp.stream eq N

N 替换为你找到的流索引号。例如,如果 labex.io 流的索引为 2,你将使用:

tcp.stream eq 2
  1. 在显示过滤器框中应用此过滤器。Wireshark 现在将仅显示属于 labex.io TCP 流的数据包,从而提供更清晰的仅此会话的视图。

  2. 当你的捕获中有很多 TCP 会话并且想要专注于特定会话而无需每次都查找并右键单击数据包时,此过滤器特别有用。

过滤后的数据包

通过掌握这些高级 TCP 流分析技术,你已大大增强了你的网络流量分析能力。你现在可以有效地隔离、检查和记录复杂网络捕获中的 TCP 会话,这对于网络安全专业人员来说是一项宝贵的技能。

总结

在这个实验中,你已经学习了如何使用 Wireshark 的“追踪 TCP 流 (Follow TCP Stream)”功能进行深入的网络流量分析。你已经获得了捕获网络流量、过滤 TCP 会话、以各种格式解释数据、保存流数据以供离线使用以及应用高级分析技术的实践经验。

这些技能对于网络管理员、安全分析师和 IT 专业人员至关重要。它们使你能够排除网络问题、调查安全事件并了解应用程序行为。随着你的进步,请记住 Wireshark 还有许多其他功能,而 TCP 流分析只是你的网络安全武器库中的一种有价值的工具。