介绍
在本次实验中,你将学习使用 Wireshark 的命令行工具 Tshark 来过滤和分析 HTTP 流量。你将练习捕获端口 80 上的网络流量,并使用特定的过滤技术分离出 HTTP 请求。
这些练习将指导你提取 HTTP 方法(GET/POST),并将输出格式化为 JSON 以进行结构化分析。这些技能对于网络故障排除和流量检查任务至关重要。
使用 -f "tcp port 80" 捕获 HTTP 流量
在这一步中,你将学习如何使用 Wireshark 的显示过滤器 -f "tcp port 80" 来捕获 HTTP 流量。HTTP(超文本传输协议,Hypertext Transfer Protocol)是万维网数据通信的基础,它通常使用端口 80 进行未加密的网络流量传输。这个过滤器有助于从其他网络协议中分离出 HTTP 流量,使你更轻松地分析网络通信。
在开始之前,让我们先了解一些基础知识:
- 网络端口就像特定类型网络流量进出的门户。
- 端口 80 是分配给 HTTP 流量的标准端口。
- Wireshark 可以根据这些端口号过滤流量。
首先,让我们在 LabEx 虚拟机环境中打开 Wireshark。请仔细按照以下步骤操作:
- 在 Xfce 桌面打开一个终端(你可以在“应用程序”菜单 > “系统” > “终端”中找到它)。
- 导航到用于存储捕获文件的默认工作目录:
cd ~/project
- 使用 HTTP 流量的显示过滤器启动 Wireshark:
sudo wireshark -k -f "tcp port 80"
让我们来详细解释一下这些命令选项:
-k:该选项指示 Wireshark 立即开始捕获数据包。-f "tcp port 80":这是我们的捕获过滤器,它告诉 Wireshark 只记录目标端口或源端口为 80 的 TCP 流量。
现在,我们需要一些 HTTP 流量来进行分析。打开另一个终端窗口(你可以在桌面上右键单击并选择“打开终端”),并使用以下命令生成测试流量:
curl http://example.com
在 Wireshark 窗口中,你将看到捕获的数据包显示如下内容:
- 你的计算机向 example.com 发出的 HTTP 请求(通常以“GET / HTTP/1.1”开头)。
- 网络服务器的响应(通常包含“HTTP/1.1 200 OK”)。
每个数据包都会显示一些重要的详细信息,例如:
- 源 IP 地址和目标 IP 地址
- 协议(HTTP)
- 数据包大小
- 时间信息
对于初学者来说:Wireshark 就像是网络流量的显微镜。过滤器 tcp port 80 就像一个特殊的镜头,它只显示网络流量,而忽略其他类型的网络通信。这种聚焦的视图有助于你理解网页浏览器和服务器之间的通信方式,而不会被其他网络活动所干扰。
使用 -Y "http.request" 过滤请求
在这一步中,你将学习如何使用 Wireshark 的显示过滤器 -Y "http.request" 来过滤 HTTP 请求。这个过滤器能帮助你专门聚焦于 HTTP 请求数据包,排除响应和其他网络流量。理解 HTTP 请求是进行网络流量分析的基础,因为它们代表了客户端发送给服务器的初始消息。
基于上一步我们捕获 HTTP 流量的操作,现在让我们只过滤出 HTTP 请求:
- 首先,确保你位于用于处理捕获文件的默认工作目录:
cd ~/project
- 使用 HTTP 请求的显示过滤器运行 Wireshark:
sudo wireshark -k -Y "http.request"
-Y 选项应用的是显示过滤器(与步骤 1 中使用的捕获过滤器 -f 不同)。捕获过滤器限制记录的内容,而显示过滤器则用于分析已经捕获的数据。这个特定的过滤器将只显示包含 HTTP 请求的数据包。
- 为了生成可用于分析的测试流量,打开另一个终端并运行这些常见的 HTTP 客户端命令:
curl http://example.com
wget http://example.com
对于初学者来说:显示过滤器 http.request 专门匹配 HTTP 请求数据包。当你只想分析从客户端发送到服务器的请求,而忽略服务器响应时,这个过滤器非常有用。过滤器语法是 Wireshark 强大的显示过滤语言的一部分,它允许你根据特定协议标准精确选择要查看的数据包。
在 Wireshark 窗口中,你现在应该只能看到来自 curl 和 wget 命令的 HTTP 请求数据包。每个数据包将显示重要的 HTTP 协议信息,包括:
- HTTP 方法(GET、POST 等),用于指示请求的类型
- 请求的 URI,显示正在访问的特定资源
- HTTP 版本(如 HTTP/1.1),显示所使用的协议版本
- 主机信息,用于识别目标服务器
使用 -e http.request.method 提取方法
在这一步中,我们将专门聚焦于使用 Wireshark 的命令行工具 tshark 从网络流量中提取 HTTP 请求方法。HTTP 方法是用于指示对资源执行何种操作的动词,例如用于检索数据的 GET 方法或用于提交数据的 POST 方法。
在开始之前,让我们先了解一下我们要处理的内容:
- HTTP 方法是网络通信的基本组成部分。
- Tshark 允许我们直接从捕获的网络数据包中检查这些方法。
-e标志让我们能够从数据包数据中提取特定字段。
让我们逐步了解这个过程:
- 首先,我们需要进入存储捕获文件的正确工作目录:
cd ~/project
- 现在,我们将运行 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 方法字段。
- 为了实际看到效果,我们将从另一个终端窗口生成一些测试流量:
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 输出很有价值:
- 数据组织结构化
- 易于与其他工具和脚本集成
- 数据交换的标准化格式
- 首先,确保你位于运行命令的默认工作目录:
cd ~/project
- 现在,让我们运行 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:正在请求的特定路径或资源。
- 为了生成可捕获的测试流量,打开第二个终端窗口并运行以下
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 格式输出,让你掌握了高效检查网络流量的关键技术。


