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