介绍
在这个实验中,你将学习使用 Wireshark 的命令行工具 tshark 来分析 TCP 会话。你将练习使用过滤器捕获 TCP 流量、列出会话,并在解读详细的数据包信息时检查特定端口,如 HTTP(端口 80)。
通过包括使用 curl 生成流量和分析捕获文件在内的实践练习,你将掌握隔离 TCP 流并识别关键会话指标的方法。这些技能将提升你使用 Wireshark 进行网络故障排除和流量分析的能力。
使用 -f "tcp" 捕获 TCP 流量
在这一步中,你将学习如何使用 Wireshark 的命令行工具 tshark 捕获 TCP 网络流量。TCP(传输控制协议,Transmission Control Protocol)是互联网的核心协议之一,负责应用程序之间的可靠数据传输。通过使用 -f "tcp" 过滤器,我们可以专门关注 TCP 数据包,这在分析网页浏览、文件传输或电子邮件通信时非常有用。
首先,通过点击 Xfce 桌面的终端图标或使用快捷键
Ctrl+Alt+T,在你的 LabEx 虚拟机中打开一个终端。我们将在这个终端中执行所有用于网络分析的命令。导航到用于存储捕获文件的默认工作目录:
cd ~/project这确保我们捕获的所有数据都将保存在一个一致的位置,方便后续查找。
使用以下命令开始捕获 TCP 流量:
sudo tshark -f "tcp" -w tcp_capture.pcap让我们来分析一下这个命令各部分的作用:
sudo为我们提供了进行数据包捕获所需的管理员权限tshark是 Wireshark 的命令行版本-f "tcp"作为捕获过滤器,告诉 tshark 仅记录 TCP 数据包-w tcp_capture.pcap将捕获的数据包保存到名为 "tcp_capture.pcap" 的文件中
当 tshark 运行时,我们需要生成一些示例 TCP 流量。打开另一个终端窗口并运行:
curl https://www.example.com此命令向 example.com 发出一个简单的网页请求,该请求使用 TCP 进行通信。curl 命令将显示从网站返回的 HTML 内容。
等待几秒钟以捕获足够的数据后,在运行 tshark 的第一个终端中按
Ctrl+C停止捕获。这将安全地终止数据包捕获过程。现在,让我们通过查看捕获文件的前几行来验证我们捕获的内容:
tshark -r tcp_capture.pcap | head -n 5此命令读取 (
-r) 我们的捕获文件并显示前 5 个数据包。你应该会看到显示 TCP 握手过程的输出,其中包括:- 发起连接的 SYN(同步)数据包
- SYN-ACK(同步确认)响应
- 源 IP 地址和目标 IP 地址
- 用于通信的端口号
使用 -z conv,tcp 列出会话
在这一步中,你将学习如何使用 Wireshark 的 -z conv,tcp 选项,从捕获的流量中分析 TCP 会话。TCP 会话表示两个端点之间的完整通信会话,通过它们的 IP 地址和端口号来识别。此功能会提供捕获文件中所有 TCP 会话的摘要,显示源/目标 IP 地址、端口和数据包统计信息,这对于理解网络通信模式至关重要。
首先,确保你位于存储捕获文件的正确目录中。这很重要,因为 Tshark 需要知道在哪里找到数据包捕获文件:
cd ~/project列出 TCP 会话的基本命令会分析捕获的数据包并显示一个摘要表。
-r标志指定输入文件,而-z conv,tcp启用会话统计功能:tshark -r tcp_capture.pcap -z conv,tcp输出将显示一个表格,展示所有 TCP 会话,类似于以下示例。每一行代表两个端点之间的一个会话,显示每个方向传输的帧数(数据包)和字节数:
========================================================================= TCP Conversations Filter:<No Filter> | <- | | -> | | Total | | Frames Bytes | | Frames Bytes | | Frames Bytes | 192.168.1.2:49152 <-> 93.184.216.34:80 | 3 180 | | 3 216 | | 6 396 | =========================================================================若要获得更详细的视图,显示每个会话发生的绝对时间戳,请使用
-t ad选项。这有助于理解网络事件的时间和顺序:tshark -r tcp_capture.pcap -z conv,tcp -t ad你可以使用
-Y选项结合显示过滤器,按特定条件过滤会话。此示例过滤涉及端口 80(HTTP 流量)的会话,当你只想分析 Web 流量时很有用:tshark -r tcp_capture.pcap -z conv,tcp -Y "tcp.port==80"若要保存会话统计信息以供后续分析或报告,将输出重定向到一个文本文件。这会创建一个永久的分析记录,你可以查看或与他人分享:
tshark -r tcp_capture.pcap -z conv,tcp > tcp_conversations.txt
使用 -Y "tcp.port==80" 过滤特定端口
在这一步中,你将学习如何使用 Wireshark 的显示过滤器语法和 -Y "tcp.port==80" 选项,过滤特定 TCP 端口(端口 80)的网络流量。端口 80 是 HTTP 网页流量的标准端口,因此这个过滤器有助于在你的网络捕获中分离出与网页相关的通信。
在开始之前,让我们先了解这个过滤器的作用:它会显示所有源端口或目标端口为 80 的 TCP 数据包。这与专门过滤源端口或目标端口不同,我们将在后面介绍。
首先,确保你位于存储捕获文件的正确目录中:
cd ~/project要过滤之前捕获的端口 80(HTTP)的流量,请运行:
tshark -r tcp_capture.pcap -Y "tcp.port==80"-r标志指定输入文件,而-Y应用显示过滤器。此命令从tcp_capture.pcap读取数据包,但只显示涉及端口 80 的数据包。输出将只显示源端口或目标端口为 80 的数据包:
1 0.000000000 192.168.1.2 → 93.184.216.34 TCP 74 49152 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 2 0.028763000 93.184.216.34 → 192.168.1.2 TCP 74 80 → 49152 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 3 0.028852000 192.168.1.2 → 93.184.216.34 TCP 66 49152 → 80 [ACK] Seq=1 Ack=1 Win=64240 Len=0此输出显示了客户端(192.168.1.2)和 Web 服务器(93.184.216.34)之间完整的 TCP 三次握手(SYN、SYN - ACK、ACK)。
要专门过滤发往端口 80(目标端口)的流量,即显示对 Web 服务器的请求,请使用:
tshark -r tcp_capture.pcap -Y "tcp.dstport==80"要过滤来自端口 80(源端口)的流量,通常显示 Web 服务器的响应,请使用:
tshark -r tcp_capture.pcap -Y "tcp.srcport==80"你可以将此过滤器与其他过滤器结合使用,以进行更精确的分析。例如,要仅查看 HTTP GET 请求(最常见的 Web 请求类型):
tshark -r tcp_capture.pcap -Y "tcp.port==80 && http.request.method==GET"这将端口过滤器与 HTTP 协议过滤器结合使用,专门显示 Web 浏览器何时向服务器请求页面。
使用 -V 显示结果
在这一步中,我们将探讨如何使用 Wireshark 的 -V(详细模式)选项查看全面的数据包详细信息。在排查网络问题时,查看完整的协议解析信息至关重要。-V 标志会显示网络协议栈的每一层,从以太网帧到应用层协议,帮助你确切了解网络流量中正在发生的情况。
首先,确保你位于存储捕获文件的正确目录中。这很重要,因为 Tshark 需要访问你要分析的文件:
cd ~/project显示所有数据包详细信息的基本命令会展示 Tshark 能够解析的所有内容。当你需要检查网络通信的完整结构时,这非常有用:
tshark -r tcp_capture.pcap -V详细输出会以结构化的格式显示技术细节。以下是各部分的含义:
- 帧(Frame):关于数据包大小的物理层信息
- 以太网 II(Ethernet II):数据链路层的 MAC 地址
- IP:网络层地址
- TCP:传输层端口和序列号
Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) Ethernet II, Src: 00:11:22:33:44:55, Dst: 66:77:88:99:aa:bb Internet Protocol Version 4, Src: 192.168.1.2, Dst: 93.184.216.34 Transmission Control Protocol, Src Port: 49152, Dst Port: 80, Seq: 0, Ack: 0, Len: 0在处理大型捕获文件时,将过滤器与详细输出结合使用有助于聚焦相关流量。此示例仅显示 HTTP 流量(端口 80),并将输出限制为前 20 行:
tshark -r tcp_capture.pcap -Y "tcp.port==80" -V | head -n 20为了便于文档记录或后续分析,你可以将详细输出保存到文本文件中。这会创建一个永久的数据包检查记录:
tshark -r tcp_capture.pcap -V > verbose_output.txt要检查特定的协议元素,如 HTTP 头信息,可以将协议过滤器与详细模式结合使用。在调试 Web 应用程序或分析 HTTP 事务时,这很有帮助:
tshark -r tcp_capture.pcap -Y "http" -V
总结
在本次实验中,你学习了如何使用 Wireshark 的 tshark 命令行工具分析 TCP 会话。你使用特定过滤器捕获了 TCP 流量,检查了 TCP 握手细节,并生成了用于分析的示例流量。
此外,你还探索了列出端点之间 TCP 会话以及过滤特定端口流量的技术。本次实验通过详细输出和会话统计信息,让你亲身体验了数据包检查,有助于进行有效的网络分析。


