介绍
在本次实验中,你将学习如何使用 Wireshark 的命令行工具 tshark 过滤并导出特定的网络数据包。你将练习从示例捕获文件(capture.pcap)中提取 UDP 数据包,并将它们保存到一个新文件(udp.pcap)中。
本练习涵盖了 tshark 的关键操作,包括使用 -r 打开捕获文件、使用 -Y 应用过滤器,以及使用 -w 导出结果。你还将使用 -V 标志进行详细分析,以验证导出的数据包。
使用 -r 选项打开 capture.pcap 文件
在这一步中,你将学习如何使用 Wireshark 的命令行工具 tshark 打开一个数据包捕获文件。这是分析预录制捕获文件中网络流量的第一步。tshark 是 Wireshark 的终端版本,允许你在没有图形界面的情况下分析网络数据包。
tsark 中的 -r 选项允许你从先前保存的捕获文件中读取数据包。我们将使用的文件(capture.pcap)包含用于分析的示例网络流量数据。PCAP 文件存储原始网络数据包数据,可在以后进行检查。
请仔细按照以下步骤操作:
- 首先,确保你位于捕获文件所在的正确目录中。这很重要,因为
tshark需要找到该文件:
cd ~/project
- 验证捕获文件是否存在并检查其大小。这可以确认你正在处理正确的文件:
ls -l capture.pcap
你应该会看到类似以下的输出,显示文件权限、大小和修改时间:
-rw-r--r-- 1 labex labex 123456 Jul 1 10:00 capture.pcap
- 现在使用
tshark打开捕获文件。这个基本命令会读取文件并显示每个数据包的摘要:
tshark -r capture.pcap
这将在你的终端中显示数据包摘要。每行代表一个网络数据包,并包含关键信息:
1 0.000000 192.168.1.1 → 192.168.1.2 TCP 74 443 → 54321 [SYN] Seq=0 Win=64240 Len=0
2 0.000123 192.168.1.2 → 192.168.1.1 TCP 74 54321 → 443 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
- 若要查看有关数据包的更详细信息,包括所有协议层(如以太网、IP、TCP 报头),你可以添加
-V标志以获得详细输出:
tshark -r capture.pcap -V
这将显示完整的数据包详细信息,当你需要检查数据包报头中的特定字段时,这非常有用。
使用 -Y "udp" 过滤 UDP 数据包
在这一步中,你将学习如何使用 tshark 中的 -Y 选项,结合 Wireshark 的显示过滤器语法,从网络捕获文件中过滤出 UDP 数据包。UDP(用户数据报协议,User Datagram Protocol)是一种核心网络协议,它提供了一种在不建立连接的情况下发送数据报的简单方式。当你需要从可能包含多种协议的大型捕获文件中仅关注 UDP 流量时,这种过滤方法特别有用。
tsark 中的 -Y 选项的工作方式与 Wireshark 的显示过滤器字段类似。它允许你指定过滤条件,只显示符合特定条件的数据包。在这里,我们将专门过滤使用 UDP 协议的数据包。
请仔细按照以下步骤操作:
- 首先,确保你仍处于捕获文件所在的项目目录中。这很重要,因为
tshark需要正确的路径来访问你的捕获文件:
cd ~/project
- 现在应用 UDP 过滤器,仅分析捕获文件中的 UDP 数据包。基本命令结构为
tshark -r [文件] -Y [过滤器]:
tshark -r capture.pcap -Y "udp"
此命令将处理 capture.pcap 文件,并仅显示 UDP 数据包。输出将以如下格式显示过滤后的数据包:
5 0.002345 192.168.1.1 → 192.168.1.2 UDP 82 5353 → 5353 Len=40
8 0.004567 192.168.1.2 → 192.168.1.1 UDP 82 5353 → 5353 Len=40
每行代表一个 UDP 数据包,显示其在捕获文件中的编号、时间戳、源和目标 IP 地址、端口以及数据包长度。
- 若要获取每个 UDP 数据包的更详细信息,你可以添加
-V(详细)标志。这将显示每个数据包的完整协议解析信息:
tshark -r capture.pcap -Y "udp" -V
这种详细输出将显示数据包的所有层,包括以太网、IP 和 UDP 报头及其各自的字段和值。
- 如果你只需要知道捕获文件中存在多少个 UDP 数据包(而不查看其内容),可以将输出通过管道传递给单词计数命令:
tshark -r capture.pcap -Y "udp" | wc -l
这将输出一个数字,表示在你的捕获文件中找到的 UDP 数据包的总数。
使用 -w udp.pcap 导出数据包
在这一步中,你将学习如何使用 Wireshark 的 -w 选项将过滤后的 UDP 数据包导出到一个新的捕获文件中。当你想分离特定的网络流量以进行重点分析,或者与同事共享时,这一功能特别有用。
-w 选项指示 Tshark 将数据包以 pcap 格式写入文件,pcap 是数据包捕获文件的标准格式。结合我们之前使用的 -Y 过滤器,我们可以从原始捕获文件中有选择地仅保存 UDP 数据包。
让我们逐步分解这个过程:
- 首先,确保你位于捕获文件所在的项目目录中:
cd ~/project
- 现在,将所有 UDP 数据包导出到一个名为
udp.pcap的新文件中:
tshark -r capture.pcap -Y "udp" -w udp.pcap
这个命令完成了三件重要的事情:
-r capture.pcap指定要读取的输入文件-Y "udp"应用过滤器以仅选择 UDP 数据包-w udp.pcap指示 Tshark 将过滤后的数据包保存到何处
- 运行命令后,验证新文件是否已创建:
ls -l udp.pcap
你应该会看到类似以下的输出,显示文件存在及其大小:
-rw-r--r-- 1 labex labex 12345 Jul 1 10:05 udp.pcap
- 检查实际导出到新文件中的 UDP 数据包数量:
tshark -r udp.pcap | wc -l
这个命令会统计新文件中的所有数据包。该数字应与原始捕获文件中的 UDP 数据包数量相匹配。
- 最后,通过检查是否存在非 UDP 数据包来确认仅导出了 UDP 数据包:
tshark -r udp.pcap -Y "not udp" | wc -l
这应该返回 0,这意味着我们的过滤器工作正常,只有 UDP 数据包被保存到了 udp.pcap 文件中。
使用 -r udp.pcap -V 进行验证
在这最后的验证步骤中,我们将使用 Wireshark 的详细输出模式检查导出的 UDP 数据包文件(udp.pcap)的内容。-V 标志代表“verbose”(详细),它会显示每个数据包的全面协议信息,帮助我们确认之前的过滤和导出操作是否正确。
在处理数据包捕获时,验证至关重要,因为它能确保我们准确提取了想要的数据。让我们来逐步介绍几种验证方法:
- 首先,导航到存储数据包捕获文件的项目目录:
cd ~/project
- 查看前几个 UDP 数据包的详细协议信息。
head -20命令将输出限制为前 20 行,以提高可读性:
tshark -r udp.pcap -V | head -20
输出将显示类似以下示例的数据包详细信息,你可以在此验证 UDP 协议信息:
Frame 1: 82 bytes on wire (656 bits), 82 bytes captured (656 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.1, Dst: 192.168.1.2
User Datagram Protocol, Src Port: 5353, Dst Port: 5353
- 为了确认文件中的所有数据包都是 UDP 数据包,我们将检查协议字段。此命令提取并统计唯一的协议类型:
tshark -r udp.pcap -T fields -e frame.protocols | sort | uniq -c
在经过正确过滤的捕获文件中,你应该只会看到与 UDP 相关的协议列表。
- 为了进行全面验证,让我们检查是否有意外包含的非 UDP 数据包。此命令过滤非 UDP 流量,应该返回空结果:
tshark -r udp.pcap -Y "not udp" -V
- 最后,统计导出文件中 UDP 数据包的总数,以验证数量是否符合预期:
tshark -r udp.pcap | wc -l
这将给出捕获文件中数据包的总数,经过我们的过滤过程后,这些数据包都应该是 UDP 数据包。
总结
在本次实验中,你学习了如何使用 Wireshark 的命令行工具 tshark 来分析、过滤和导出网络数据包。练习内容包括使用 -r 选项打开捕获文件,使用 -V 选项查看详细的数据包信息,以及使用 -Y 选项应用显示过滤器来分离特定的流量,如 UDP 流量。
你练习了使用 -w 选项将过滤后的数据包导出到新文件,并通过重新读取输出结果来验证操作的正确性。这些技术为在命令行环境中进行高效的网络流量分析和选择性数据提取提供了必要的技能。


