在 Tshark 中应用捕获过滤器

WiresharkBeginner
立即练习

介绍

在这个实验中,你将学习如何使用 Tshark 的捕获过滤器来有选择地捕获网络数据包。你将探索 Wireshark 过滤器的语法,并使用 tshark -f "tcp" 等命令,练习在特定接口上捕获 TCP 流量。

通过实践练习,你将在 eth1 上过滤 TCP 数据包,分析数据包细节,并将结果保存到 tcp.pcap 文件中。这个实验为你提供了应用捕获过滤器的实践经验,让你能够高效地分离和检查目标网络流量。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 82%。获得了学习者 92% 的好评率。

通过手册参考学习语法

在这一步中,你将通过参考手册页来学习 Wireshark 捕获过滤器的基本语法。在进行实际的数据包捕获之前,理解这些基础知识至关重要,因为过滤器能让你有选择地仅捕获你感兴趣的网络流量。

  1. 首先,若 LabEx 虚拟机中的终端尚未打开,请将其打开。默认工作目录是 ~/project。我们将在此目录下执行所有命令。

  2. 要访问全面的 Wireshark 过滤器文档,请在终端中运行以下命令:

man wireshark-filter

此手册页包含了有关捕获过滤器语法和功能的所有官方文档。你可以把它当作构建有效过滤器的速查表。

  1. 当你滚动浏览手册时(按 Enter 键进行导航),重点关注构成捕获过滤器基础的这些关键部分:

    • 基本过滤器语法结构:如何正确格式化你的过滤器表达式
    • 常见协议过滤器:针对 TCP、UDP、HTTP 等协议的预定义过滤器
    • 比较运算符:如何在过滤器中比较值
    • 逻辑运算符:使用 and、or、not 组合条件
  2. 现在,让我们通过一个实际示例来应用你所学的知识。执行以下命令来测试一个简单的 TCP 过滤器:

tshark -f "tcp" -c 5

此命令有三个作用:

  • -f "tcp" 应用一个过滤器,仅捕获 TCP 数据包
  • -c 5 将捕获的数据包数量限制为 5 个
  • 结果会直接显示在你的终端中
  1. 如果有网络流量,你将看到类似以下的输出,显示每个捕获的 TCP 数据包的详细信息:
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 49234 [SYN] Seq=0 Win=64240 Len=0

每行代表一个数据包,显示其编号、时间戳、源和目标 IP 地址、端口以及 TCP 标志。

  1. 当你查看完输出后,按 q 键退出手册页(如果仍处于打开状态)和任何正在运行的 tshark 捕获。这将使你返回到命令提示符,为下一步做好准备。

使用 -f "tcp" 过滤 TCP 流量

在这一步中,你将练习使用 Wireshark 的过滤语法来捕获 TCP(传输控制协议)网络流量。TCP 是互联网协议套件的核心协议之一,它在应用程序之间提供可靠、有序和经过错误检查的数据传输。本次实验将建立在你之前学到的基础数据包捕获技能之上。

  1. 首先,确保你位于我们将存储捕获文件的默认工作目录下:
cd ~/project
  1. 要从你的网络接口捕获实时的 TCP 流量,请执行以下命令:
sudo tshark -i eth1 -f "tcp" -c 10

注意:免费的 VM 可能没有 eth1 接口。你可以使用其他接口,如 eth0、eth2 等。

让我们分解一下这个命令的每个部分的作用:

  • sudo 授予你进行数据包捕获所需的管理员权限
  • -i eth1 指定我们从以太网接口 (eth1) 进行捕获
  • -f "tcp" 应用一个捕获过滤器,只收集 TCP 数据包
  • -c 10 将本次演示的捕获限制为 10 个数据包
  1. 输出将以以下格式显示带有关键信息的 TCP 数据包:
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 49234 [SYN] Seq=0 Win=64240 Len=0
2 0.000123 192.168.1.2 → 192.168.1.1 TCP 74 49234 → 443 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0

每一行代表一个 TCP 数据包,显示了:

  • 数据包编号和时间戳
  • 源和目标 IP 地址
  • 源和目标端口
  • TCP 标志(如 SYN、ACK)
  • 序列号和窗口大小
  1. 要检查包含所有头部字段的完整 TCP 数据包结构,请使用详细模式 (verbose mode):
sudo tshark -i eth1 -f "tcp" -c 5 -V

-V 标志提供详细的输出,显示完整的 TCP 头部及其所有字段,如序列号、确认号、标志、窗口大小、校验和 (checksum) 和选项 (options)。

  1. 如果你需要在任何时候中断正在运行的捕获,只需按下 Ctrl+C 即可停止该过程。当你想要终止一个长时间运行的捕获或已经看到了足够用于分析的数据包时,这非常有用。

在 eth1 上捕获过滤后的流量

在这一步中,你将基于之前步骤中的 TCP 过滤知识,学习使用特定过滤器在 eth1 接口上捕获网络流量。eth1 接口通常代表你的主要有线网络连接,我们将使用它来演示实际的数据包捕获场景。

  1. 首先,通过运行以下命令验证你的网络接口:
ip addr show eth1

此命令会显示 eth1 接口的详细信息。你应该会看到输出表明 eth1 接口已启用(状态为 UP)且已分配了 IP 地址。此验证很重要,因为你无法在不存在或未激活的接口上捕获流量。

  1. 若要专门在 eth1 上捕获 HTTP 流量,请使用以下命令:
sudo tshark -i eth1 -f "tcp port 80" -c 15

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

  • -i eth1 指定要监听的网络接口
  • -f "tcp port 80" 创建一个用于捕获 HTTP 流量的过滤器(端口 80 是标准的 HTTP 端口)
  • -c 15 将捕获的数据包数量限制为 15 个,这足以用于演示,且不会让你被大量数据淹没
  1. 若要捕获特定 IP 之间的流量,请尝试以下命令:
sudo tshark -i eth1 -f "host 8.8.8.8" -c 10

这里我们过滤了与谷歌 DNS 服务器(8.8.8.8)之间的进出流量。“host”过滤器会匹配与该特定 IP 地址之间的传入和传出流量。当你想要监控与特定服务器的通信时,这非常有用。

  1. 对于更复杂的过滤,可以组合条件:
sudo tshark -i eth1 -f "tcp port 443 and host 8.8.8.8" -c 5

此命令展示了如何组合过滤器。它专门捕获与 8.8.8.8 之间的 HTTPS 流量(端口 443)。“and”运算符允许你创建精确的过滤器,同时匹配多个条件。

  1. 观察输出,其中会显示过滤后的数据包,并包含如下详细信息:
1 0.000000 192.168.1.100 → 8.8.8.8 TCP 74 49234 → 443 [SYN] Seq=0 Win=64240 Len=0

这个示例输出显示了一个从你的本地机器(192.168.1.100)发送到谷歌服务器的 TCP SYN 数据包(TCP 连接中的第一个数据包)。这些数字代表时间、端口和 TCP 序列号信息,有助于分析网络行为。

使用 -w tcp.pcap 保存结果

在这一步中,你将学习如何将捕获的网络流量保存到文件中,以便后续分析。当你需要在不同时间检查网络数据包或与同事共享这些数据包时,这尤其有用。我们将使用 Wireshark 的命令行工具 Tshark 以及 -w 选项来保存捕获的内容。

  1. 首先,确保你处于正确的工作目录。~/project 目录是我们存储捕获文件的地方,这样可以让文件组织得更有序:
cd ~/project
  1. 现在,我们将捕获实际的 TCP 流量。以下命令一次性完成了几件重要的事情。这就像是设置了一个只记录 TCP 数据包并将其保存到文件中的网络摄像头:
sudo tshark -i eth1 -f "tcp" -w tcp.pcap -c 20

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

  • -i eth1 告诉 Tshark 监听 eth1 网络接口
  • -f "tcp" 应用一个捕获过滤器,仅记录 TCP 数据包
  • -w tcp.pcap 将捕获的数据包保存到名为 tcp.pcap 的文件中
  • -c 20 将捕获的数据包数量限制为 20 个,这样我们就不会收集过多的数据
  1. 运行捕获命令后,我们应该验证文件是否正确创建。使用带有 -lh 选项的 ls 命令可以以人类可读的格式显示文件大小:
ls -lh tcp.pcap

你应该会看到输出显示文件存在及其大小(通常 20 个数据包的文件大小为几 KB)。

  1. 现在,让我们检查捕获的数据包。以下命令从保存的文件中读取前 5 个数据包:
tshark -r tcp.pcap -c 5

-r 选项告诉 Tshark 从文件中读取数据,而不是实时捕获流量,-c 5 则将输出限制为 5 个数据包。

  1. 若要更详细地查看捕获的内容,我们可以使用详细模式。这将显示所有协议细节和数据包内容,但我们将输出限制在前 20 行,以免信息过多:
tshark -r tcp.pcap -V | head -20

-V 启用详细输出,head -20 仅显示输出的开头部分,这样我们就不会被大量信息淹没。

总结

在本次实验中,你通过实际操作学会了在 tshark 中应用捕获过滤器。你了解了过滤器语法的基础知识,包括协议过滤器和逻辑表达式,然后使用基本命令练习了捕获 TCP 流量。

本实验还引导你掌握了一些高级技巧,如实时监控网络接口、使用详细模式自定义输出,以及将过滤后的捕获内容保存到文件中。通过将接口选择、过滤和输出管理整合到高效的工作流程中,这些技能能够让你更有效地进行网络流量分析。