使用 Tshark 捕获实时流量

WiresharkWiresharkBeginner
立即练习

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

简介

在本次实验中,你将学习使用 Wireshark 的命令行工具 tshark 捕获实时网络流量。你将练习使用 -D 选项识别网络接口,使用 -i 选项选择像 eth1 这样的接口,并使用默认设置捕获数据包。

本实验将指导你使用 -w 选项将捕获的内容保存到 pcap 文件中,以便后续分析。这些基本技能对于实际场景中的网络故障排除和流量监控至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/interface("Interface Overview") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/protocol_dissection("Protocol Dissection") wireshark/WiresharkGroup -.-> wireshark/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/interface -.-> lab-548916{{"使用 Tshark 捕获实时流量"}} wireshark/packet_capture -.-> lab-548916{{"使用 Tshark 捕获实时流量"}} wireshark/protocol_dissection -.-> lab-548916{{"使用 Tshark 捕获实时流量"}} wireshark/export_packets -.-> lab-548916{{"使用 Tshark 捕获实时流量"}} wireshark/commandline_usage -.-> lab-548916{{"使用 Tshark 捕获实时流量"}} end

使用 -D 列出接口

在这一步中,你将学习如何使用 Wireshark 的命令行工具 tshark 列出可用的网络接口。网络接口是计算机连接到网络的物理或虚拟节点。在捕获网络流量之前,识别系统上哪些接口处于活动状态至关重要,因为不同的接口处理不同类型的网络流量。

  1. 首先,在你的 LabEx 虚拟机环境中打开终端。终端是你通过命令与 Linux 系统进行交互的入口。默认工作目录是 ~/project,这意味着除非你另行指定,否则你创建的任何文件都将保存在这里。

Capture-capable network interfaces 2. 要列出所有可用的网络接口,请运行以下命令:

tshark -D
  1. 该命令将显示输出,列出所有具备捕获功能的网络接口。典型的输出如下所示:
1. eth1
2. any
3. lo (Loopback)
4. nflog
5. nfqueue
6. docker0
  1. -D 标志是一个特定的命令选项,用于指示 tshark 显示可用的接口。每个接口都有不同的用途:

    • eth1:这通常是你的主要有线网络接口,处理大多数外部网络通信。
    • lo:回环接口处理你自己机器内部的网络流量。
    • any:一个特殊的虚拟接口,可同时捕获所有可用接口的流量。
  2. 花点时间仔细查看接口列表。当我们开始捕获数据包时,你需要参考这些接口名称,因为你必须确切指定要监控哪个网络接口的流量。编号在后续命令中选择接口时会有所帮助。

使用 -i eth1 选择接口

在这一步中,你将学习如何使用 Wireshark 的 tshark 工具选择特定的网络接口进行数据包捕获。网络接口是计算机连接到网络的物理或虚拟节点。eth1 接口通常是 Linux 系统上的第一个以太网端口,负责处理大多数外部网络流量。

  1. 首先,确保你处于正确的工作目录,我们将在此存储捕获的文件:
cd ~/project
  1. 要开始在 eth1 接口上专门捕获数据包,请执行以下命令:
sudo tshark -i eth1
  1. 让我们来了解这个命令各部分的作用:

    • sudo:为你提供访问网络接口所需的管理员权限。
    • tshark:Wireshark 的命令行版本。
    • -i eth1:告诉 tshark 监听 eth1 接口(如果你的系统使用不同的接口名称,请更改此参数)。
  2. 运行命令时,你会在终端中看到实时网络流量显示如下:

Capturing on 'eth1'
1 0.000000000 192.168.1.100 → 192.168.1.1 TCP 74 55942 → 80 [SYN] Seq=0 Win=64240 Len=0
2 0.000123456 192.168.1.1 → 192.168.1.100 TCP 74 80 → 55942 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0

每行代表一个网络数据包,显示源/目的 IP、协议类型和其他技术细节。

  1. 要停止捕获数据包,请按 Ctrl+C。然后,终端将显示有关捕获流量的汇总统计信息。

  2. 给初学者的重要提示:

    • eth1 是大多数 Linux 系统上第一个以太网接口的默认名称。
    • 始终使用你在列出接口时找到的确切接口名称。
    • 需要使用 sudo,因为捕获网络流量需要特殊权限。
    • 输出显示了系统上正在进行的真实网络通信。

使用默认设置开始捕获

在这一步中,你将学习如何使用 Wireshark 的 tshark 工具,以默认设置开始进行基本的数据包捕获。这是在你之前识别接口并选择 eth1 的基础上进行的。我们将从捕获流经 eth1 接口的所有网络流量开始,eth1 通常是 Linux 系统上的第一个以太网接口。

  1. 首先,确保你处于正确的工作目录,我们将在此存储捕获的文件:
cd ~/project
  1. 要在 eth1 接口上以默认设置开始捕获数据包,请运行以下命令:
sudo tshark -i eth1

sudo 命令是必需的,因为捕获网络流量需要 root 权限。-i eth1 标志告诉 tshark 专门监听 eth1 网络接口。

  1. 此命令的关键要点:

    • 捕获通过 eth1 的所有类型的数据包(如 TCP、UDP、ICMP 等)。
    • 在捕获数据包时实时显示数据包摘要。
    • 使用默认的捕获过滤器(捕获所有流量,不进行过滤)。
    • 显示基本的数据包信息,包括:
      • 数据包编号(从 1 开始的顺序计数)。
      • 时间戳(显示每个数据包的捕获时间)。
      • 源 IP 和目的 IP(显示流量的来源和去向)。
      • 协议(识别网络协议的类型)。
      • 关于数据包内容的基本信息。
  2. 你应该会看到类似以下的输出:

1 0.000000000 192.168.1.100 → 8.8.8.8 DNS 74 Standard query
2 0.000123456 8.8.8.8 → 192.168.1.100 DNS 90 Standard query response

每行代表一个网络数据包。箭头(→)表示源 IP 地址和目的 IP 地址之间的流量流向。

  1. 要暂时暂停输出(不停止捕获),请按 Ctrl+S。按 Ctrl+Q 可恢复。当你想查看特定数据包而又不想让新数据包滚动过快时,这很有用。

  2. 记住关于此基本捕获的这些要点:

    • 默认捕获仅显示数据包头部(而非完整的有效负载),以保持显示的可管理性。
    • 捕获将持续进行,直到你使用 Ctrl+C 停止。
    • 目前还没有将数据包保存到磁盘(我们将在下一步中介绍)。
    • 终端输出只是实时视图 —— 我们尚未永久存储这些信息。

使用 -w capture.pcap 停止并将数据包保存到文件

在这一步中,你将学习如何正确地停止数据包捕获会话,并将捕获的数据包保存到文件中以供后续分析。这完成了我们基本的 Wireshark/tshark 工作流程。当你需要在稍后的时间分析网络流量或与同事共享数据时,将数据包保存到文件至关重要。

  1. 首先,确保你在要保存捕获文件的正确工作目录中。 ~/project 目录通常用于实验(Lab)练习:
cd ~/project
  1. 要启动一个新的捕获会话,该会话将自动将数据包保存到文件,请运行以下命令。 -w 标志告诉 tshark 将捕获的数据存储在哪里:
tshark -i eth1 -w capture.pcap
  1. 让我们分解一下这个命令的关键方面:

    • -w capture.pcap:指定输出文件名,并将数据包以标准 PCAP 格式保存
    • 该文件将在你当前的工作目录(~/project)中创建
    • 与实时监控不同,此命令在保存到文件时以静默方式运行,没有屏幕输出

    关于权限的重要说明

    • 不要在此命令中使用 sudo(例如,sudo tshark -i eth1 -w capture.pcap
    • ~/project 目录具有特定的权限,限制访问,包括 root 访问
    • 使用 sudo 运行将导致“Permission denied(权限被拒绝)”错误
    • 使用不带 sudo 的命令以确保使用正确的权限正确创建文件
  2. 让捕获运行约 30 秒,以收集有意义的网络流量。此持续时间允许你捕获各种类型的数据包,而不会创建过大的文件。

  3. 要正常停止捕获并完成文件,请按 Ctrl+C。终端将显示有关你的捕获会话的摘要信息:

^CCapturing on 'eth1'
45 packets captured
  1. 通过列出目录内容来验证你的捕获文件是否已成功创建。 -lh 标志以人类可读的格式显示文件大小:
ls -lh capture.pcap
  1. 你应该看到类似于以下的输出,表明该文件已使用正确的权限创建,并且包含捕获的数据:
-rw-r--r-- 1 labex labex 12K Aug 10 15:30 capture.pcap
  1. 关于使用 PCAP 文件的重要说明:
    • PCAP 文件稍后可以使用 Wireshark GUI 或 tshark 命令进行分析
    • 文件大小随捕获持续时间而增加——请注意磁盘空间
    • 为单独的捕获会话使用唯一的文件名,以避免覆盖
    • .pcap 扩展名是数据包捕获文件的标准

总结

在本次实验中,你学习了如何使用 Wireshark 的命令行工具 tshark 捕获实时网络流量。你练习了使用 -D 标志列出可用接口,并使用 -i 参数在特定接口上捕获数据包,同时观察了 IP 地址和协议等关键网络细节。

本次练习让你亲身体验了基本的 tshark 命令,包括正确使用 sudo 权限和基本的捕获控制。这些重要技能是进行更高级的网络分析和故障排除任务的基础。