在 Tshark 中过滤 HTTP 流量

WiresharkWiresharkBeginner
立即练习

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

简介

在本次实验中,你将学习使用 Wireshark 的命令行工具 Tshark 来过滤和分析 HTTP 流量。你将练习捕获端口 80 上的网络流量,并使用特定的过滤技术分离出 HTTP 请求。

这些练习将指导你提取 HTTP 方法(GET/POST),并将输出格式化为 JSON 以进行结构化分析。这些技能对于网络故障排除和流量检查任务至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/packet_capture -.-> lab-548928{{"在 Tshark 中过滤 HTTP 流量"}} wireshark/display_filters -.-> lab-548928{{"在 Tshark 中过滤 HTTP 流量"}} wireshark/packet_analysis -.-> lab-548928{{"在 Tshark 中过滤 HTTP 流量"}} wireshark/commandline_usage -.-> lab-548928{{"在 Tshark 中过滤 HTTP 流量"}} end

使用 -f "tcp port 80" 捕获 HTTP 流量

在这一步中,你将学习如何使用 Wireshark 的显示过滤器 -f "tcp port 80" 来捕获 HTTP 流量。HTTP(超文本传输协议,Hypertext Transfer Protocol)是万维网数据通信的基础,它通常使用端口 80 进行未加密的网络流量传输。这个过滤器有助于从其他网络协议中分离出 HTTP 流量,使你更轻松地分析网络通信。

在开始之前,让我们先了解一些基础知识:

  • 网络端口就像特定类型网络流量进出的门户。
  • 端口 80 是分配给 HTTP 流量的标准端口。
  • Wireshark 可以根据这些端口号过滤流量。

首先,让我们在 LabEx 虚拟机环境中打开 Wireshark。请仔细按照以下步骤操作:

  1. 在 Xfce 桌面打开一个终端(你可以在“应用程序”菜单 > “系统” > “终端”中找到它)。
  2. 导航到用于存储捕获文件的默认工作目录:
cd ~/project
  1. 使用 HTTP 流量的显示过滤器启动 Wireshark:
sudo wireshark -k -f "tcp port 80"

让我们来详细解释一下这些命令选项:

  • -k:该选项指示 Wireshark 立即开始捕获数据包。
  • -f "tcp port 80":这是我们的捕获过滤器,它告诉 Wireshark 只记录目标端口或源端口为 80 的 TCP 流量。

现在,我们需要一些 HTTP 流量来进行分析。打开另一个终端窗口(你可以在桌面上右键单击并选择“打开终端”),并使用以下命令生成测试流量:

curl http://example.com

在 Wireshark 窗口中,你将看到捕获的数据包显示如下内容:

  1. 你的计算机向 example.com 发出的 HTTP 请求(通常以“GET / HTTP/1.1”开头)。
  2. 网络服务器的响应(通常包含“HTTP/1.1 200 OK”)。

每个数据包都会显示一些重要的详细信息,例如:

  • 源 IP 地址和目标 IP 地址
  • 协议(HTTP)
  • 数据包大小
  • 时间信息

对于初学者来说:Wireshark 就像是网络流量的显微镜。过滤器 tcp port 80 就像一个特殊的镜头,它只显示网络流量,而忽略其他类型的网络通信。这种聚焦的视图有助于你理解网页浏览器和服务器之间的通信方式,而不会被其他网络活动所干扰。

使用 -Y "http.request" 过滤请求

在这一步中,你将学习如何使用 Wireshark 的显示过滤器 -Y "http.request" 来过滤 HTTP 请求。这个过滤器能帮助你专门聚焦于 HTTP 请求数据包,排除响应和其他网络流量。理解 HTTP 请求是进行网络流量分析的基础,因为它们代表了客户端发送给服务器的初始消息。

基于上一步我们捕获 HTTP 流量的操作,现在让我们只过滤出 HTTP 请求:

  1. 首先,确保你位于用于处理捕获文件的默认工作目录:
cd ~/project
  1. 使用 HTTP 请求的显示过滤器运行 Wireshark:
sudo wireshark -k -Y "http.request"

-Y 选项应用的是显示过滤器(与步骤 1 中使用的捕获过滤器 -f 不同)。捕获过滤器限制记录的内容,而显示过滤器则用于分析已经捕获的数据。这个特定的过滤器将只显示包含 HTTP 请求的数据包。

  1. 为了生成可用于分析的测试流量,打开另一个终端并运行这些常见的 HTTP 客户端命令:
curl http://example.com
wget http://example.com

对于初学者来说:显示过滤器 http.request 专门匹配 HTTP 请求数据包。当你只想分析从客户端发送到服务器的请求,而忽略服务器响应时,这个过滤器非常有用。过滤器语法是 Wireshark 强大的显示过滤语言的一部分,它允许你根据特定协议标准精确选择要查看的数据包。

在 Wireshark 窗口中,你现在应该只能看到来自 curlwget 命令的 HTTP 请求数据包。每个数据包将显示重要的 HTTP 协议信息,包括:

  • HTTP 方法(GET、POST 等),用于指示请求的类型
  • 请求的 URI,显示正在访问的特定资源
  • HTTP 版本(如 HTTP/1.1),显示所使用的协议版本
  • 主机信息,用于识别目标服务器

使用 -e http.request.method 提取方法

在这一步中,我们将专门聚焦于使用 Wireshark 的命令行工具 tshark 从网络流量中提取 HTTP 请求方法。HTTP 方法是用于指示对资源执行何种操作的动词,例如用于检索数据的 GET 方法或用于提交数据的 POST 方法。

在开始之前,让我们先了解一下我们要处理的内容:

  • HTTP 方法是网络通信的基本组成部分。
  • Tshark 允许我们直接从捕获的网络数据包中检查这些方法。
  • -e 标志让我们能够从数据包数据中提取特定字段。

让我们逐步了解这个过程:

  1. 首先,我们需要进入存储捕获文件的正确工作目录:
cd ~/project
  1. 现在,我们将运行 tshark 命令从实时流量中提取 HTTP 方法:
sudo tshark -Y "http.request" -T fields -e http.request.method

分解这个命令:

  • sudo:为我们提供捕获网络流量所需的权限。
  • tshark:Wireshark 的命令行版本。
  • -Y "http.request":应用显示过滤器,仅显示 HTTP 请求。
  • -T fields:指定我们需要基于字段的输出(而非完整的数据包)。
  • -e http.request.method:告诉 tshark 仅提取 HTTP 方法字段。
  1. 为了实际看到效果,我们将从另一个终端窗口生成一些测试流量:
curl -X GET http://example.com
curl -X POST http://example.com
curl -X DELETE http://example.com

这些 curl 命令中的每一个都会向 example.com 发送不同的 HTTP 方法,tshark 会捕获并显示这些方法。curl 中的 -X 标志让我们可以指定要使用的 HTTP 方法。

运行这些命令后,你应该会看到类似如下的输出:

GET
POST
DELETE

这个输出准确显示了捕获的流量中使用了哪些 HTTP 方法,便于分析网络请求模式。方法名称按照 tshark 捕获的顺序显示。

使用 -T json 以 JSON 格式显示

在这一步中,你将了解如何使用 Wireshark 的 Tshark 工具将捕获的 HTTP 流量数据格式化为 JSON。JSON(JavaScript 对象表示法)是一种轻量级的数据格式,既便于人类阅读,也易于机器解析。这使其非常适合以编程方式分析网络流量。

在开始之前,让我们先了解一下为什么 JSON 输出很有价值:

  • 数据组织结构化
  • 易于与其他工具和脚本集成
  • 数据交换的标准化格式
  1. 首先,确保你位于运行命令的默认工作目录:
cd ~/project
  1. 现在,让我们运行 Tshark 来捕获 HTTP 请求并以 JSON 格式输出。此命令将过滤与 JSON 格式化结合在一起:
sudo tshark -Y "http.request" -T json -e http.request.method -e http.host -e http.request.uri

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

  • -Y "http.request":此过滤器告诉 Tshark 仅显示 HTTP 请求数据包。
  • -T json:指定我们希望输出为 JSON 格式。
  • -e 字段:这些字段从每个 HTTP 请求中提取特定信息:
    • http.request.method:使用的 HTTP 方法(GET、POST 等)。
    • http.host:正在访问的网站域名。
    • http.request.uri:正在请求的特定路径或资源。
  1. 为了生成可捕获的测试流量,打开第二个终端窗口并运行以下 curl 命令:
curl http://example.com
curl http://example.org/sample

当你在生成此测试流量时运行 Tshark 命令,你将看到如下结构化的输出:

[
  {
    "_index": "packets-1",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.com"],
        "http.request.uri": ["/"]
      }
    }
  },
  {
    "_index": "packets-2",
    "_source": {
      "layers": {
        "http.request.method": ["GET"],
        "http.host": ["example.org"],
        "http.request.uri": ["/sample"]
      }
    }
  }
]

注意每个 HTTP 请求是如何变成一个带有清晰标签字段的独立 JSON 对象的。这种结构使你可以轻松识别:

  • 访问了哪个网站
  • 发起了哪种类型的请求
  • 请求了哪个特定页面或资源

当你想保存这些数据以供后续分析,或将其输入到其他可以自动处理 JSON 数据的工具中时,JSON 格式特别有用。

总结

在本次实验中,你学习了如何使用 Wireshark 的 Tshark 命令行工具来过滤和分析 HTTP 流量。练习内容包括使用 -f "tcp port 80" 捕获 HTTP 流量,以及使用 curl 生成测试流量以进行实际分析。

你还练习了使用 -Y "http.request" 过滤 HTTP 请求,并使用 -e http.request.method 提取 HTTP 方法等特定数据。本实验展示了如何使用 -T json 以 JSON 格式输出,让你掌握了高效检查网络流量的关键技术。