使用 Wireshark 追踪 TCP 流功能分析 TCP 流量
使用 Wireshark 追踪 TCP 流功能分析 TCP 流量
在网络安全领域,Wireshark是一款不可或缺的网络分析工具。本文将详细介绍如何使用Wireshark的"追踪TCP流"功能进行TCP流量分析,帮助读者掌握这一强大的网络分析工具。
介绍
在这个实验(Lab)中,你将学习如何在Wireshark中利用"追踪TCP流(Follow TCP Stream)"功能进行TCP流量分析。此功能使你能够提取和查看特定TCP会话的数据负载(data payload)。它在多种网络安全场景中非常有用,例如调查可疑的网络流量和分析应用层协议(application protocols)。
在本实验(Lab)结束时,你将掌握如何使用这个强大的工具来深入了解网络通信。这将显著增强你的网络分析能力。
Skills Graph
理解 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。你可以这样做:
- 首先,打开一个终端窗口。你可以通过单击Dock中的终端图标或按
Ctrl+Alt+T
来执行此操作。终端是一个基于文本的界面,允许你通过键入命令与计算机的操作系统进行交互。 - 打开终端后,你需要键入一个命令来启动Wireshark。键入以下命令,然后按Enter:
此命令告诉操作系统启动Wireshark应用程序。wireshark
- 当Wireshark打开时,你将看到主界面。在此界面中,你将看到可用网络接口的列表。网络接口是你的计算机和网络之间的连接点。每个接口都可用于发送和接收网络流量。
捕获网络流量
现在Wireshark已经打开,我们准备开始捕获网络流量。步骤如下:
- 在网络接口列表中,单击
eth1
接口。这通常是你的虚拟机(virtual machine)的主网络接口。虚拟机就像你计算机中的一台计算机,而eth1
接口是它连接到网络的方式。 - 选择
eth1
接口后,单击"开始捕获数据包(Start capturing packets)"按钮,该按钮由工具栏中的蓝色鲨鱼鳍图标表示。此操作告诉Wireshark开始监视所选的网络接口,并捕获通过它的所有网络数据包。 - 当Wireshark开始捕获时,你将看到数据包出现在Wireshark主窗口中。这些数据包是网络流量的构建块。每个数据包都包含少量数据以及一些关于它来自哪里和去往哪里的信息。
- 为了生成一些我们可以分析的TCP流量,我们将使用
curl
命令。打开一个新的终端窗口并键入以下命令:curl https://labex.io
curl
命令用于从服务器传输数据或将数据传输到服务器。在本例中,它从https://labex.io
获取网页内容。此操作将生成TCP流量,因为对网页的HTTP请求使用TCP协议。 - 运行
curl
命令后,你将在终端中看到显示的网页内容。同时,Wireshark将捕获与此HTTP请求相关的所有TCP数据包。这些数据包包含有关你的计算机和Web服务器之间的请求和响应的信息。 - 捕获大约10-15秒后,这通常足以获得良好的流量样本,返回到Wireshark并单击"停止捕获数据包(Stop capturing packets)"按钮,该按钮由工具栏中的红色方形图标表示。这将停止Wireshark捕获任何更多的数据包。
- 要保存捕获的流量以供将来分析,请转到"文件(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通信:
- 在Wireshark主窗口中,查看数据包列表的顶部。你将看到一个显示过滤器文本框,其中包含显示"应用显示过滤器(Apply a display filter)"的占位符文本。
- 在过滤器框中键入
tcp
,然后按Enter或单击箭头按钮以应用过滤器。 - 数据包列表现在仅显示TCP数据包,但我们可以进一步缩小范围。由于我们对使用curl命令生成的labex.io流量感兴趣,因此让我们优化我们的过滤器。
- 在过滤器框中键入
tcp contains "labex"
并应用它。这将仅显示内容中包含"labex"的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流:
- 在过滤后的数据包列表中,查找目标IP可能属于labex.io的数据包。你应该看到目标端口为443(HTTPS)的数据包,该端口用于安全Web流量。
- 单击其中一个数据包以选择它。
- 右键单击所选数据包,然后从上下文菜单中选择"追踪(Follow)">"TCP流(TCP Stream)"。
- 将打开一个新窗口,显示你的机器和labex.io服务器之间的整个TCP会话。
- 在此窗口中:
- 红色文本表示从你的机器(客户端)发送到labex.io服务器的数据
- 蓝色文本表示从labex.io服务器发送回你的机器的数据
- 整个会话按发生的顺序重建
- 由于我们通过HTTPS访问labex.io,因此你将在流中主要看到加密数据。这是正常且预期的,因为HTTPS会加密数据以在传输过程中保护它。你或许能够识别通信开始时的TLS握手,但实际的HTTP请求和响应将被加密。
- 通过使用"显示和保存数据为(Show and save data as)"下拉菜单来浏览不同的查看选项:
- ASCII:将数据以文本形式显示(用于读取任何未加密的部分)
- Hex Dump:同时显示十六进制和ASCII表示形式(适用于检查加密数据)
- C Arrays:将数据格式化为C编程语言数组
- Raw:仅显示原始二进制数据
- 为了记录此分析,请单击"打印(Print)"按钮。将打印输出另存为
/home/labex/project/
目录中的名为print.pdf
的PDF文件。
通过追踪TCP流,你可以看到你的机器和labex.io服务器之间的完整通信,而无需手动从单个数据包中拼凑数据。在下一步中,我们将学习如何更详细地保存和分析此数据。
保存和分析 TCP 流数据
在这一步中,我们将保存我们在上一步中检查的labex.io TCP流数据,以供离线分析。我们还将学习如何解释这些已保存的信息,以从加密的HTTPS通信中提取有价值的见解。
保存 TCP 流数据
让我们保存来自我们的labex.io连接的TCP流数据:
- 你应该仍然打开着上一步中的TCP流窗口,显示你的机器和labex.io之间的通信。如果你不小心关闭了它,只需重复步骤来追踪其中一个labex.io数据包的TCP流。
- 在TCP流窗口的底部,找到"另存为(Save As)"按钮。
- 单击"另存为(Save As)"按钮,这将打开一个保存对话框。
- 导航到
/home/labex/project/
目录,然后输入文件名tcp_stream_data.txt
。 - 单击"保存(Save)"按钮。这会将整个labex.io TCP流保存到具有指定名称的文本文件中。
- 内容将以在"显示和保存数据为(Show and save data as)"下拉菜单中选择的格式保存。如果你想以不同的格式保存它(例如,十六进制转储(Hex Dump)而不是ASCII),你可以在保存之前更改下拉菜单中的格式。
理解已保存的数据
现在我们已经保存了来自我们的labex.io连接的TCP流,让我们检查它的内容:
- 打开一个终端以查看已保存的文件:
或者你可以使用head /home/labex/project/tcp_stream_data.txt
cat
查看整个文件:cat /home/labex/project/tcp_stream_data.txt
- 检查文件内容。由于我们到labex.io的流量是通过HTTPS传输的,因此大部分数据将被加密并显示为不可读的字符。但是,你仍然可以观察到几个重要的元素:
- 通信开始时的TLS握手,你的客户端和labex.io服务器在此处协商加密参数
- 客户端hello和服务器hello消息,它们是TLS握手的一部分
- 加密的应用程序数据,其中包含你的实际HTTP请求和服务器的响应
- 请注意,数据的组织方式与它在TCP流窗口中显示的方式相同,客户端数据(从你的机器到labex.io)与服务器数据(从labex.io到你的机器)分开。
TCP 流分析的实际应用
你正在开发的TCP流分析技能在许多网络安全场景中都很有价值。让我们将这些与我们在labex.io流量中观察到的内容联系起来:
- TLS/SSL检查(TLS/SSL Inspection):通过分析labex.io流中的TLS握手,安全专业人员可以验证安全连接是否正在使用强大的加密算法。
- 安全监控(Security Monitoring):即使使用像我们的labex.io连接这样的加密HTTPS流量,分析师也可以识别通信模式,而不必解密内容。
- 网络故障排除(Network Troubleshooting):如果我们的labex.io连接失败,分析TCP流可以帮助确定问题是在TCP连接建立期间、TLS握手期间还是HTTP交换期间。
- 网络取证(Network Forensics):在调查场景中,像我们的labex.io连接这样的TCP流将有助于重建网络活动的时间线。
- 性能分析(Performance Analysis):通过检查labex.io TCP流中数据包的定时和顺序,你可以识别网络中潜在的性能瓶颈。
通过保存TCP流,就像我们对labex.io连接所做的那样,你将创建一个永久记录,该记录可以:
- 与团队成员共享以进行协作分析
- 用作安全调查中的证据
- 与其他捕获的流进行比较以识别模式
- 使用Wireshark之外的其他工具进行分析
这种提取、保存和分析实际网络通信数据的能力使TCP流分析成为网络安全专业人员的强大技术。
高级 TCP 流分析技术
在最后一步中,我们将探索一些高级技术来分析捕获中的TCP流,重点关注我们的labex.io流量和可能存在的任何其他TCP会话。这些高级技能将帮助你在处理复杂的网络流量捕获时更加高效。
过滤多个 TCP 流
让我们学习如何浏览和过滤捕获中的所有TCP会话,而不仅仅是labex.io流量:
- 返回到Wireshark主窗口。如果来自我们的labex.io分析的TCP流窗口仍然打开,请将其关闭。
- 要查看捕获中的所有TCP会话,请转到顶部菜单中的"统计(Statistics)">"会话(Conversations)"。
- 在"会话(Conversations)"窗口中,单击TCP选项卡以过滤视图,仅显示TCP会话。
- 此视图显示有关捕获中所有TCP会话的详细信息,包括:
- 源和目标地址以及端口
- 在每个方向上传输的字节数
- 每个会话的持续时间
- 每个方向上的数据包
- 查找与我们的labex.io连接相对应的会话。它应该涉及你在步骤2中观察到的相同IP地址。你可能还会看到在捕获期间发生的其他TCP会话。
- 选择labex.io会话,然后单击底部的"追踪流(Follow Stream)"按钮。这提供了另一种访问我们之前分析的相同TCP流的方法。
使用 TCP 流编号
捕获中的每个TCP流都有一个唯一的标识符,称为"tcp.stream"编号。这提供了一种精确的方式来过滤和分析特定流:
- 打开Wireshark主窗口,查看你之前识别的其中一个labex.io数据包的数据包详细信息。展开中间窗格中的"传输控制协议(Transmission Control Protocol)"部分,然后查找名为"流索引(Stream index)"或类似的字段。此数字是labex.io TCP流的唯一标识符。
- 要过滤属于此特定流的数据包,请使用如下所示的显示过滤器:
将N替换为你找到的流索引号。例如,如果labex.io流的索引为2,你将使用:tcp.stream eq N
tcp.stream eq 2
- 在显示过滤器框中应用此过滤器。Wireshark现在将仅显示属于labex.io TCP流的数据包,从而提供更清晰的仅此会话的视图。
- 当你的捕获中有很多TCP会话并且想要专注于特定会话而无需每次都查找并右键单击数据包时,此过滤器特别有用。
通过掌握这些高级TCP流分析技术,你已大大增强了你的网络流量分析能力。你现在可以有效地隔离、检查和记录复杂网络捕获中的TCP会话,这对于网络安全专业人员来说是一项宝贵的技能。
总结
在这个实验中,你已经学习了如何使用Wireshark的"追踪TCP流(Follow TCP Stream)"功能进行深入的网络流量分析。你已经获得了捕获网络流量、过滤TCP会话、以各种格式解释数据、保存流数据以供离线使用以及应用高级分析技术的实践经验。
这些技能对于网络管理员、安全分析师和IT专业人员至关重要。它们使你能够排除网络问题、调查安全事件并了解应用程序行为。随着你的进步,请记住Wireshark还有许多其他功能,而TCP流分析只是你的网络安全武器库中的一种有价值的工具。