使用 Tshark 捕获数据包

Beginner
立即练习

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

简介

在本次实验中,你将学习如何使用 Wireshark 的命令行版本 Tshark 来捕获和分析网络数据包。你将练习一些重要技能,包括接口选择、数据包捕获启动、协议过滤和输出保存技术。

这个实践练习涵盖了 Tshark 的安装、权限配置以及用于有效网络监控的基本命令操作。这些基本的数据包分析技能对于网络故障排除和安全调查非常有价值。


Skills Graph

安装 Tshark

在这一步中,你将安装 Tshark,它是一款随 Wireshark 附带的强大的命令行网络协议分析器。Tshark 是 Wireshark 的终端版本,允许你直接从命令行捕获和分析网络流量,无需图形界面。当你在远程服务器上工作,或者更喜欢基于键盘的工作流程时,这尤其有用。

  1. 首先,更新软件包列表,以确保你能获取到 Tshark 的最新版本。在 Linux 系统上安装任何新软件之前,这是一个很好的做法:

    sudo apt update
  2. 使用以下命令安装 Tshark。-y 标志会在安装过程中自动确认所有提示:

    sudo apt install -y tshark

    在安装过程中,你可能会看到一个关于是否允许非超级用户捕获数据包的提示。这是一个重要的安全考虑因素——选择“是”将允许普通用户运行数据包捕获,这正是我们本次实验所需要的。

  3. 安装完成后,通过检查其版本来验证 Tshark 是否正确安装。此命令还会确认安装路径是否已在你的系统中正确设置:

    tshark --version

    你应该会看到类似于以下的输出:

    TShark (Wireshark) 3.6.12 (Git v3.6.12 packaged as 3.6.12-1~ubuntu20.04.0)
  4. 为了确保 Tshark 无需 root 权限就能捕获数据包(root 权限使用起来不方便且安全性较低),我们需要将你的用户添加到 wireshark 组。该组拥有捕获数据包所需的权限:

    sudo usermod -aG wireshark $USER

    注意:通常情况下,你需要注销并重新登录才能使此组更改生效,但在本次实验环境中,更改应该会立即生效。在实际系统中,你需要重启会话。

选择一个接口

在这一步中,你将使用 Tshark 识别并选择一个用于数据包捕获的网络接口。网络接口是计算机与网络之间的连接点,你需要选择正确的接口来监控网络流量。可以把它们想象成计算机的门——你需要选择网络流量通过的那扇正确的门。

  1. 首先,列出系统上所有可用的网络接口:

    tshark -D

    此命令将显示计算机可用于捕获数据包的所有网络接口。输出通常如下所示:

    1. eth0
    2. any (Pseudo-device that captures on all interfaces)
    3. lo (Loopback)

    每个接口都有不同的用途。eth0 通常是你的有线以太网连接,而如果可用的话,wlan0 则是你的无线连接。

  2. 仔细检查输出,以确定你的活动网络接口。出于大多数实际目的,你会希望使用:

    • eth0 用于以太网连接(在实验环境和虚拟机中很常见)
    • wlan0 用于无线连接(如果你的计算机有 WiFi)
    • any 用于同时在所有接口上进行捕获(有用,但可能会产生大量数据)
  3. 在本次实验中,我们将使用 eth0 接口,因为它在虚拟环境中通常是可用的。在继续之前,让我们通过运行以下命令来验证该接口是否存在且处于活动状态:

    ip link show eth0

    此命令显示 eth0 接口的详细信息。你应该会看到表明该接口存在及其当前状态(UP/DOWN)的输出。如果该命令返回错误,则该接口可能在你的系统上不可用。

  4. 现在,让我们通过快速捕获数据包来测试我们选择的接口。运行以下命令,从 eth0 接口精确捕获 5 个数据包:

    tshark -i eth0 -c 5

    -i 标志指定要使用的接口,-c 5 告诉 Tshark 在捕获 5 个数据包后停止。在进行长时间捕获之前,这是验证你选择的接口是否有效的好方法。捕获的数据包将在终端中显示。

开始数据包捕获

在这一步中,你将使用 Tshark 在你上一步选择的接口上开始捕获实时网络流量。数据包捕获是网络分析的基础,因为它允许你监控和检查通过所选接口的所有网络通信。可以把它想象成设置一个麦克风来记录特定网络通道上发生的所有对话。

  1. 首先,确保你处于我们要工作的正确目录中:

    cd ~/project

    这可以确保你捕获的所有数据包文件都保存在正确的位置,并使你的工作空间保持有序。

  2. 使用以下命令在你选择的接口(eth0)上开始基本的数据包捕获:

    tshark -i eth0

    -i 标志告诉 Tshark 要监听哪个接口(在这种情况下是 eth0)。此命令开始捕获 eth0 接口上的所有数据包,并在终端中实时显示它们。每行代表一个网络数据包,包含其源地址、目的地址、协议和其他特征的详细信息。

  3. 让捕获运行大约 30 秒,以收集一些流量。你会看到类似于以下的输出:

    1 0.000000000 192.168.1.2 → 192.168.1.1 TCP 74 55922 → 80 [SYN] Seq=0 Win=64240 Len=0
    2 0.000123456 192.168.1.1 → 192.168.1.2 TCP 74 80 → 55922 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0

    此示例展示了两个设备之间的 TCP 握手。第一行显示了一个发起连接的 SYN 数据包,而第二行显示了响应(SYN - ACK)。

  4. 要停止捕获,请在终端中按 Ctrl+C。这个键盘快捷键会向 Tshark 发送一个中断信号。然后,该工具将显示捕获统计信息,例如:

    ^C123 packets captured

    这个摘要会告诉你在本次会话中捕获了多少个数据包。

  5. 为了进行更可控的捕获,你可以指定要捕获的数据包的确切数量(例如,50 个数据包):

    tshark -i eth0 -c 50

    -c 标志代表“count”(数量),它会使 Tshark 在捕获指定数量的数据包后自动停止。当你只需要网络流量的一个样本而不是持续捕获时,这很有用。

按协议过滤

在这一步中,你将学习使用 Tshark 按特定协议过滤网络流量。协议过滤非常重要,因为网络会同时承载许多不同类型的流量。通过过滤,你可以专注于你感兴趣的特定协议,同时忽略无关的数据包,从而使你的分析更加高效。

  1. 首先,确保你处于我们要工作的正确目录中。这有助于保持你的项目文件井井有条:

    cd ~/project
  2. 让我们从 TCP 流量开始,许多常见的服务(如网页浏览(HTTP/HTTPS)和安全外壳(SSH))都使用 TCP。以下命令捕获 20 个 TCP 数据包:

    tshark -i eth0 -f "tcp" -c 20

    -f 标志指定捕获过滤器,而 -c 限制捕获的数据包数量。

  3. 现在尝试捕获 UDP 流量,UDP 用于轻量级通信,如 DNS 查询和 VoIP 服务。此命令捕获 10 个 UDP 数据包:

    tshark -i eth0 -f "udp" -c 10
  4. 对于 ICMP 数据包(网络诊断工具(如 ping)使用),使用此命令捕获 5 个数据包:

    tshark -i eth0 -f "icmp" -c 5
  5. 你可以组合过滤器以同时捕获多种协议。此示例捕获 DNS 流量(UDP 端口 53)和 HTTP 流量(TCP 端口 80),总共捕获 15 个数据包:

    tshark -i eth0 -f "port 53 or port 80" -c 15
  6. 若要在捕获后进行更精确的过滤,请使用 -Y 选项设置显示过滤器。此命令捕获 30 个数据包,但仅在输出中显示 HTTP 或 DNS 流量:

    tshark -i eth0 -c 30 -Y "http or dns"

    显示过滤器在捕获后进行处理,允许进行更复杂的过滤,而不影响实际记录的内容。

保存捕获输出

在这一步中,你将学习如何将捕获的网络流量保存到文件中,以便后续分析。保存数据包捕获结果至关重要,因为它允许你在稍后时间回顾网络活动、与团队成员分享发现,或者进行详细分析而无需再次捕获实时流量。PCAP(Packet CAPture,数据包捕获)格式是大多数网络分析工具使用的标准文件格式。

  1. 首先,确保你处于想要保存捕获文件的正确目录中。项目目录是一个很好的选择,有助于保持工作的条理性:

    cd ~/project
  2. 保存捕获数据包的基本命令使用 -w 标志来指定输出文件。此示例从 eth0 接口捕获 50 个数据包,并将它们保存为 PCAP 格式:

    tshark -i eth0 -c 50 -w capture.pcap

    .pcap 扩展名很重要,因为它表明这是一个标准的数据包捕获文件,大多数网络分析工具都可以打开。

  3. 为了更好地组织文件,你可以为捕获文件创建一个专用目录。此命令首先检查是否存在 captures 目录,如果不存在则创建它,然后仅捕获 HTTP 流量(端口 80)并使用具有描述性的文件名保存:

    mkdir -p captures && tshark -i eth0 -c 30 -w captures/http_traffic.pcap -f "port 80"
  4. 要查看已保存的捕获文件,请使用 -r(读取)选项。这会像实时捕获一样在终端中显示数据包:

    tshark -r capture.pcap
  5. 对于更高级的工作流程,你可以先捕获所有流量,然后再提取特定协议的流量。此示例捕获 100 个数据包,然后仅将 DNS 流量过滤到一个新文件中:

    tshark -i eth0 -c 100 -w full_capture.pcap \
      && tshark -r full_capture.pcap -Y "dns" -w dns_only.pcap
  6. 最后,通过列出保存的捕获文件及其大小来验证它们。这有助于你确认文件已创建,并让你了解捕获了多少数据:

    ls -lh *.pcap

    -lh 选项使输出更易读,它以人类可读的格式(KB、MB)而不是字节显示文件大小。

总结

在本次实验中,你学习了如何安装和配置用于网络数据包分析的 Tshark。这个过程包括通过 apt 安装 Tshark、更新软件包列表,以及使用 tshark --version 验证安装情况。

你还练习了使用 tshark -D 识别网络接口,并选择合适的接口进行流量捕获。这些基础技能将为你在未来的练习中进行更高级的网络协议分析做好准备。