在 Tshark 中分析 TCP 会话

WiresharkWiresharkBeginner
立即练习

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

简介

在这个实验中,你将学习使用 Wireshark 的命令行工具 tshark 来分析 TCP 会话。你将练习使用过滤器捕获 TCP 流量、列出会话,并在解读详细的数据包信息时检查特定端口,如 HTTP(端口 80)。

通过包括使用 curl 生成流量和分析捕获文件在内的实践练习,你将掌握隔离 TCP 流并识别关键会话指标的方法。这些技能将提升你使用 Wireshark 进行网络故障排除和流量分析的能力。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/capture_filters("Capture Filters") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/packet_capture -.-> lab-548913{{"在 Tshark 中分析 TCP 会话"}} wireshark/display_filters -.-> lab-548913{{"在 Tshark 中分析 TCP 会话"}} wireshark/capture_filters -.-> lab-548913{{"在 Tshark 中分析 TCP 会话"}} wireshark/packet_analysis -.-> lab-548913{{"在 Tshark 中分析 TCP 会话"}} wireshark/commandline_usage -.-> lab-548913{{"在 Tshark 中分析 TCP 会话"}} end

使用 -f "tcp" 捕获 TCP 流量

在这一步中,你将学习如何使用 Wireshark 的命令行工具 tshark 捕获 TCP 网络流量。TCP(传输控制协议,Transmission Control Protocol)是互联网的核心协议之一,负责应用程序之间的可靠数据传输。通过使用 -f "tcp" 过滤器,我们可以专门关注 TCP 数据包,这在分析网页浏览、文件传输或电子邮件通信时非常有用。

  1. 首先,通过点击 Xfce 桌面的终端图标或使用快捷键 Ctrl+Alt+T,在你的 LabEx 虚拟机中打开一个终端。我们将在这个终端中执行所有用于网络分析的命令。

  2. 导航到用于存储捕获文件的默认工作目录:

    cd ~/project

    这确保我们捕获的所有数据都将保存在一个一致的位置,方便后续查找。

  3. 使用以下命令开始捕获 TCP 流量:

    sudo tshark -f "tcp" -w tcp_capture.pcap

    让我们来分析一下这个命令各部分的作用:

    • sudo 为我们提供了进行数据包捕获所需的管理员权限
    • tshark 是 Wireshark 的命令行版本
    • -f "tcp" 作为捕获过滤器,告诉 tshark 仅记录 TCP 数据包
    • -w tcp_capture.pcap 将捕获的数据包保存到名为 "tcp_capture.pcap" 的文件中
  4. 当 tshark 运行时,我们需要生成一些示例 TCP 流量。打开另一个终端窗口并运行:

    curl https://www.example.com

    此命令向 example.com 发出一个简单的网页请求,该请求使用 TCP 进行通信。curl 命令将显示从网站返回的 HTML 内容。

  5. 等待几秒钟以捕获足够的数据后,在运行 tshark 的第一个终端中按 Ctrl+C 停止捕获。这将安全地终止数据包捕获过程。

  6. 现在,让我们通过查看捕获文件的前几行来验证我们捕获的内容:

    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 地址、端口和数据包统计信息,这对于理解网络通信模式至关重要。

  1. 首先,确保你位于存储捕获文件的正确目录中。这很重要,因为 Tshark 需要知道在哪里找到数据包捕获文件:

    cd ~/project
  2. 列出 TCP 会话的基本命令会分析捕获的数据包并显示一个摘要表。-r 标志指定输入文件,而 -z conv,tcp 启用会话统计功能:

    tshark -r tcp_capture.pcap -z conv,tcp
  3. 输出将显示一个表格,展示所有 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 |
    =========================================================================
  4. 若要获得更详细的视图,显示每个会话发生的绝对时间戳,请使用 -t ad 选项。这有助于理解网络事件的时间和顺序:

    tshark -r tcp_capture.pcap -z conv,tcp -t ad
  5. 你可以使用 -Y 选项结合显示过滤器,按特定条件过滤会话。此示例过滤涉及端口 80(HTTP 流量)的会话,当你只想分析 Web 流量时很有用:

    tshark -r tcp_capture.pcap -z conv,tcp -Y "tcp.port==80"
  6. 若要保存会话统计信息以供后续分析或报告,将输出重定向到一个文本文件。这会创建一个永久的分析记录,你可以查看或与他人分享:

    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 数据包。这与专门过滤源端口或目标端口不同,我们将在后面介绍。

  1. 首先,确保你位于存储捕获文件的正确目录中:

    cd ~/project
  2. 要过滤之前捕获的端口 80(HTTP)的流量,请运行:

    tshark -r tcp_capture.pcap -Y "tcp.port==80"

    -r 标志指定输入文件,而 -Y 应用显示过滤器。此命令从 tcp_capture.pcap 读取数据包,但只显示涉及端口 80 的数据包。

  3. 输出将只显示源端口或目标端口为 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)。

  4. 要专门过滤发往端口 80(目标端口)的流量,即显示对 Web 服务器的请求,请使用:

    tshark -r tcp_capture.pcap -Y "tcp.dstport==80"
  5. 要过滤来自端口 80(源端口)的流量,通常显示 Web 服务器的响应,请使用:

    tshark -r tcp_capture.pcap -Y "tcp.srcport==80"
  6. 你可以将此过滤器与其他过滤器结合使用,以进行更精确的分析。例如,要仅查看 HTTP GET 请求(最常见的 Web 请求类型):

    tshark -r tcp_capture.pcap -Y "tcp.port==80 && http.request.method==GET"

    这将端口过滤器与 HTTP 协议过滤器结合使用,专门显示 Web 浏览器何时向服务器请求页面。

使用 -V 显示结果

在这一步中,我们将探讨如何使用 Wireshark 的 -V(详细模式)选项查看全面的数据包详细信息。在排查网络问题时,查看完整的协议解析信息至关重要。-V 标志会显示网络协议栈的每一层,从以太网帧到应用层协议,帮助你确切了解网络流量中正在发生的情况。

  1. 首先,确保你位于存储捕获文件的正确目录中。这很重要,因为 Tshark 需要访问你要分析的文件:

    cd ~/project
  2. 显示所有数据包详细信息的基本命令会展示 Tshark 能够解析的所有内容。当你需要检查网络通信的完整结构时,这非常有用:

    tshark -r tcp_capture.pcap -V
  3. 详细输出会以结构化的格式显示技术细节。以下是各部分的含义:

    • 帧(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
  4. 在处理大型捕获文件时,将过滤器与详细输出结合使用有助于聚焦相关流量。此示例仅显示 HTTP 流量(端口 80),并将输出限制为前 20 行:

    tshark -r tcp_capture.pcap -Y "tcp.port==80" -V | head -n 20
  5. 为了便于文档记录或后续分析,你可以将详细输出保存到文本文件中。这会创建一个永久的数据包检查记录:

    tshark -r tcp_capture.pcap -V > verbose_output.txt
  6. 要检查特定的协议元素,如 HTTP 头信息,可以将协议过滤器与详细模式结合使用。在调试 Web 应用程序或分析 HTTP 事务时,这很有帮助:

    tshark -r tcp_capture.pcap -Y "http" -V

总结

在本次实验中,你学习了如何使用 Wireshark 的 tshark 命令行工具分析 TCP 会话。你使用特定过滤器捕获了 TCP 流量,检查了 TCP 握手细节,并生成了用于分析的示例流量。

此外,你还探索了列出端点之间 TCP 会话以及过滤特定端口流量的技术。本次实验通过详细输出和会话统计信息,让你亲身体验了数据包检查,有助于进行有效的网络分析。