介绍
在这个实验中,你将学习如何使用 Tshark 的捕获过滤器来有选择地捕获网络数据包。你将探索 Wireshark 过滤器的语法,并使用 tshark -f "tcp" 等命令,练习在特定接口上捕获 TCP 流量。
通过实践练习,你将在 eth1 上过滤 TCP 数据包,分析数据包细节,并将结果保存到 tcp.pcap 文件中。这个实验为你提供了应用捕获过滤器的实践经验,让你能够高效地分离和检查目标网络流量。
在这个实验中,你将学习如何使用 Tshark 的捕获过滤器来有选择地捕获网络数据包。你将探索 Wireshark 过滤器的语法,并使用 tshark -f "tcp" 等命令,练习在特定接口上捕获 TCP 流量。
通过实践练习,你将在 eth1 上过滤 TCP 数据包,分析数据包细节,并将结果保存到 tcp.pcap 文件中。这个实验为你提供了应用捕获过滤器的实践经验,让你能够高效地分离和检查目标网络流量。
在这一步中,你将通过参考手册页来学习 Wireshark 捕获过滤器的基本语法。在进行实际的数据包捕获之前,理解这些基础知识至关重要,因为过滤器能让你有选择地仅捕获你感兴趣的网络流量。
首先,若 LabEx 虚拟机中的终端尚未打开,请将其打开。默认工作目录是 ~/project。我们将在此目录下执行所有命令。
要访问全面的 Wireshark 过滤器文档,请在终端中运行以下命令:
man wireshark-filter
此手册页包含了有关捕获过滤器语法和功能的所有官方文档。你可以把它当作构建有效过滤器的速查表。
当你滚动浏览手册时(按 Enter 键进行导航),重点关注构成捕获过滤器基础的这些关键部分:
现在,让我们通过一个实际示例来应用你所学的知识。执行以下命令来测试一个简单的 TCP 过滤器:
tshark -f "tcp" -c 5
此命令有三个作用:
-f "tcp" 应用一个过滤器,仅捕获 TCP 数据包-c 5 将捕获的数据包数量限制为 5 个1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 49234 [SYN] Seq=0 Win=64240 Len=0
每行代表一个数据包,显示其编号、时间戳、源和目标 IP 地址、端口以及 TCP 标志。
q 键退出手册页(如果仍处于打开状态)和任何正在运行的 tshark 捕获。这将使你返回到命令提示符,为下一步做好准备。在这一步中,你将练习使用 Wireshark 的过滤语法来捕获 TCP(传输控制协议)网络流量。TCP 是互联网协议套件的核心协议之一,它在应用程序之间提供可靠、有序和经过错误检查的数据传输。本次实验将建立在你之前学到的基础数据包捕获技能之上。
cd ~/project
sudo tshark -i eth1 -f "tcp" -c 10
注意:免费的 VM 可能没有 eth1 接口。你可以使用其他接口,如 eth0、eth2 等。
让我们分解一下这个命令的每个部分的作用:
sudo 授予你进行数据包捕获所需的管理员权限-i eth1 指定我们从以太网接口 (eth1) 进行捕获-f "tcp" 应用一个捕获过滤器,只收集 TCP 数据包-c 10 将本次演示的捕获限制为 10 个数据包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 数据包,显示了:
sudo tshark -i eth1 -f "tcp" -c 5 -V
-V 标志提供详细的输出,显示完整的 TCP 头部及其所有字段,如序列号、确认号、标志、窗口大小、校验和 (checksum) 和选项 (options)。
Ctrl+C 即可停止该过程。当你想要终止一个长时间运行的捕获或已经看到了足够用于分析的数据包时,这非常有用。在这一步中,你将基于之前步骤中的 TCP 过滤知识,学习使用特定过滤器在 eth1 接口上捕获网络流量。eth1 接口通常代表你的主要有线网络连接,我们将使用它来演示实际的数据包捕获场景。
ip addr show eth1
此命令会显示 eth1 接口的详细信息。你应该会看到输出表明 eth1 接口已启用(状态为 UP)且已分配了 IP 地址。此验证很重要,因为你无法在不存在或未激活的接口上捕获流量。
sudo tshark -i eth1 -f "tcp port 80" -c 15
让我们来分析一下这个命令的作用:
-i eth1 指定要监听的网络接口-f "tcp port 80" 创建一个用于捕获 HTTP 流量的过滤器(端口 80 是标准的 HTTP 端口)-c 15 将捕获的数据包数量限制为 15 个,这足以用于演示,且不会让你被大量数据淹没sudo tshark -i eth1 -f "host 8.8.8.8" -c 10
这里我们过滤了与谷歌 DNS 服务器(8.8.8.8)之间的进出流量。“host”过滤器会匹配与该特定 IP 地址之间的传入和传出流量。当你想要监控与特定服务器的通信时,这非常有用。
sudo tshark -i eth1 -f "tcp port 443 and host 8.8.8.8" -c 5
此命令展示了如何组合过滤器。它专门捕获与 8.8.8.8 之间的 HTTPS 流量(端口 443)。“and”运算符允许你创建精确的过滤器,同时匹配多个条件。
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 序列号信息,有助于分析网络行为。
在这一步中,你将学习如何将捕获的网络流量保存到文件中,以便后续分析。当你需要在不同时间检查网络数据包或与同事共享这些数据包时,这尤其有用。我们将使用 Wireshark 的命令行工具 Tshark 以及 -w 选项来保存捕获的内容。
~/project 目录是我们存储捕获文件的地方,这样可以让文件组织得更有序:cd ~/project
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 个,这样我们就不会收集过多的数据-lh 选项的 ls 命令可以以人类可读的格式显示文件大小:ls -lh tcp.pcap
你应该会看到输出显示文件存在及其大小(通常 20 个数据包的文件大小为几 KB)。
tshark -r tcp.pcap -c 5
-r 选项告诉 Tshark 从文件中读取数据,而不是实时捕获流量,-c 5 则将输出限制为 5 个数据包。
tshark -r tcp.pcap -V | head -20
-V 启用详细输出,head -20 仅显示输出的开头部分,这样我们就不会被大量信息淹没。
在本次实验中,你通过实际操作学会了在 tshark 中应用捕获过滤器。你了解了过滤器语法的基础知识,包括协议过滤器和逻辑表达式,然后使用基本命令练习了捕获 TCP 流量。
本实验还引导你掌握了一些高级技巧,如实时监控网络接口、使用详细模式自定义输出,以及将过滤后的捕获内容保存到文件中。通过将接口选择、过滤和输出管理整合到高效的工作流程中,这些技能能够让你更有效地进行网络流量分析。