Tshark 入门

WiresharkBeginner
立即练习

简介

在本实验中,你将探索 tshark,它是 Wireshark 强大的命令行版本。虽然 Wireshark 为网络分析提供了图形界面,但 tshark 允许你直接在终端中执行完全相同的数据包捕获和分析任务。

这一点非常重要,因为数据包分析通常在两个不同的层面进行。像 tcpdump 这样的工具非常擅长显示原始数据包摘要,并在存储数据包之前应用底层捕获过滤器。而 tshark 更进一步,它能在捕获后解码协议结构。这意味着它能够识别 HTTP 方法、DNS 查询名称以及许多其他特定于协议的详细信息。在实践中,分析师通常会结合使用这两种方式:通过底层捕获高效收集证据,随后利用协议感知分析进行更深入的探究。

你将学习如何捕获实时网络流量、将其保存到文件,并应用能够识别协议结构(如 HTTP 和 DNS)的显示过滤器。这些显示过滤器比标准的伯克利数据包过滤器(BPF)功能强大得多,因为它们可以解析数据包的内容。最后,你将学习如何生成协议分层统计信息,从而获得网络流量的高级概览。

执行基础捕获

在这一步中,你将学习如何使用 tshark 捕获实时网络流量,并将其保存到文件中以供后续分析。

在开始捕获之前,我们需要确保系统中存在一些网络流量。你的环境中已经运行了一个后台脚本,正在持续生成 DNS 和 HTTP 流量。

在此阶段,将捕获与分析分开是非常有用的。捕获是指将数据包在经过接口时的原始状态保存下来。而分析则是后续对这些数据包进行解码和解读的过程。安全调查通常从广泛捕获开始,因为你可能还不确定哪些信息是关键的。一旦数据包被保存在 PCAP 文件中,你就可以多次读取它们并提出不同的问题,而无需重新触发原始流量。

现在,让我们开始捕获网络流量。我们将使用 tshark 监听所有可用的网络接口(any),并将捕获的数据包保存到名为 traffic.pcap 的文件中。我们还将设置 tshark 在 5 秒后自动停止捕获。

执行以下命令以开始捕获并正确保存文件:

sudo tshark -i any -w /tmp/traffic.pcap -a duration:5
sudo mv /tmp/traffic.pcap ~/project/traffic.pcap
sudo chown labex:labex ~/project/traffic.pcap

让我们拆解一下 tshark 命令中使用的选项:

  • sudo:以管理员权限运行命令,这是捕获网络流量所必需的。
  • -i any:指定 tshark 在所有可用的网络接口上捕获流量。
  • -w /tmp/traffic.pcap:告诉 tshark 将捕获的原始数据包数据临时写入 /tmp 目录下的文件。这是一种最佳实践,可以避免以 root 用户身份运行 tshark 时可能出现的权限问题。
  • -a duration:5:设置自动停止条件(-a),在 5 秒后停止捕获。

你将看到类似以下的输出,表明数据包正在被捕获:

Capturing on 'eth0'
24

5 秒过后,tshark 将自动退出,你的 traffic.pcap 文件即可用于分析。

应用显示过滤器

在这一步中,你将学习如何读取刚才创建的数据包捕获文件,并应用显示过滤器来隔离特定类型的流量。

tshark(以及 Wireshark)中的显示过滤器功能极其强大,因为它们能够理解网络协议的结构。你无需仅仅查看 IP 地址或端口号,而是可以根据 http 或 dns 等协议名称来过滤流量。

这种区别值得强调。经典的捕获过滤器会询问底层问题,例如“这个数据包是否使用了 53 端口?”而显示过滤器可以询问更高级的问题,例如“这个数据包是 DNS 响应吗?”或者“这个 HTTP 请求是否包含特定字段?”换句话说,显示过滤器是在协议解析之后工作的,这就是为什么它们表现力更强且更易于阅读的原因。

要读取捕获文件而不是捕获实时流量,请使用 -r 选项。要应用显示过滤器,请使用 -Y 选项,后跟过滤器字符串。

首先,让我们过滤捕获文件以仅显示 HTTP 流量。运行以下命令:

tshark -r ~/project/traffic.pcap -Y "http"

你应该会看到类似以下的输出,仅显示 HTTP GET 请求和相应的 HTTP OK 响应:

    4 0.012345678 10.0.2.15 → 93.184.216.34 HTTP 143 GET / HTTP/1.1
    8 0.045678901 93.184.216.34 → 10.0.2.15 HTTP 403 HTTP/1.1 200 OK  (text/html)

接下来,让我们过滤捕获文件以仅显示 DNS 流量。DNS(域名系统)是用于将 example.com 等域名转换为 IP 地址的协议。

运行以下命令以应用 DNS 显示过滤器:

tshark -r ~/project/traffic.pcap -Y "dns"

输出将显示在捕获期间发生的 DNS 查询和响应:

    1 0.000000000 10.0.2.15 → 10.0.2.3 DNS 73 Standard query 0x1a2b A example.com
    2 0.001234567 10.0.2.3 → 10.0.2.15 DNS 89 Standard query response 0x1a2b A example.com A 93.184.216.34

通过使用 -Y 选项,你可以轻松地从数千个数据包中筛选出你真正需要的内容。

查看协议分层统计信息

在这一步中,你将学习如何生成捕获文件中所含协议的统计概览。

在分析大型捕获文件时,在深入研究单个数据包之前,先获得流量类型的高级摘要通常很有帮助。tshark 提供了一个名为“协议分层统计(Protocol Hierarchy Statistics)”的功能,它可以计算每个协议的数据包百分比和数量。

这种自顶向下的视图是一种常见的调查技术。在花费时间分析单个数据包之前,分析师通常会先提出广泛的问题:哪些协议在这次捕获中占主导地位?流量主要是网页浏览、域名解析还是其他异常情况?这些比例是否符合系统的预期角色?这种高级背景信息有助于你决定哪些部分值得进行更深入的检查。

要生成统计信息,请使用 -z 选项,后跟你要计算的特定统计信息。对于协议分层统计,关键字是 io,phs。

此外,由于我们只想查看统计报告而不是单个数据包的详细信息,我们将使用 -q(静默)选项。

运行以下命令以查看捕获文件的协议分层结构:

tshark -r ~/project/traffic.pcap -q -z io,phs

你将看到一个树状输出,总结了流量情况:

===================================================================
Protocol Hierarchy Statistics
Filter:

eth                                      frames:24 bytes:2340
  ipv4                                   frames:24 bytes:2340
    udp                                  frames:2 bytes:162
      dns                                frames:2 bytes:162
    tcp                                  frames:12 bytes:1338
      http                               frames:2 bytes:546
    icmp                                 frames:10 bytes:840
===================================================================

此输出准确地告诉你每个协议包含多少帧(数据包)和字节。例如,你可以看到以太网(eth)层包含 IPv4 流量,该流量进一步细分为 UDP(包含 DNS)、TCP(包含 HTTP)和 ICMP(我们生成的 ping 流量)。

这种统计视图是任何网络故障排除或安全分析任务的绝佳起点。

总结

恭喜!你已成功完成了 Tshark 入门实验。

在本实验中,你学习了如何:

  • 使用 tshark 捕获实时网络流量并将其保存到 .pcap 文件中。
  • 读取捕获文件并应用协议感知显示过滤器来隔离 HTTP 和 DNS 流量。
  • 生成并分析协议分层统计信息,以获得网络活动的高级概览。

这些基本技能构成了 Linux 环境下命令行网络分析和故障排除的基础。