在 Kali 中使用 tcpdump 观察网络流量

WiresharkBeginner
立即练习

介绍

服务名称或端口报告是网络观察结果的摘要。数据包捕获能让你检查摘要背后的实际流量,包括端点、连接控制与应用消息。

你将在 Kali 回环接口上捕获一次小型授权 HTTP 交换。运用之前实验中的进程控制与 HTTP 技能,保存真实的 pcap,并通过 tcpdump 查看。

捕获小型本地 HTTP 交换

本步骤中,你将为发往训练服务的 HTTP 请求捕获数量有限的数据包。

进入 Kali 并选择共享工作区:

kali
cd /home/labex/project

HTTP 端点为 http://127.0.0.1:8080/capture.txt。由于该地址是 Kali 内的回环地址,其流量使用 lo 接口,而非宿主机网络接口。本环境中抓包需要提升权限;只对需要的捕获与分析命令使用 sudo。

tcpdump 捕获数据包。-i lo 选择回环接口,-c 8 在匹配八个数据包后停止,-w training.pcap 写入二进制捕获文件。带引号的过滤器 tcp port 8080 选择涉及训练服务端口的 TCP 流量。末尾的 & 在后台启动捕获,使你能在同一终端生成请求:

sudo tcpdump -i lo -c 8 -w training.pcap 'tcp port 8080' &

shell 会打印作业号。Tcpdump 可能打印正在监听的消息。使用之前练习过的 sleep,留出一秒时间让捕获初始化:

sleep 1

现在发起已学过的 curl 请求,并保存响应正文:

curl -sS http://127.0.0.1:8080/capture.txt > captured-response.txt

请求与响应会产生多个 TCP 数据包,包括连接建立与应用数据。wait 等待当前 shell 中的后台作业结束:

wait

Tcpdump 应在达到配置的数据包数量后停止,并打印捕获统计。二进制 pcap 是结构化数据包文件,不要将其当作文本用 cat 读取。单独查看应用响应:

cat captured-response.txt

预期输出:

Local capture practice.

pcap 与响应正文以不同形式描述同一次本地交换。请将捕获限定在提供的接口与端点上。

读取并解释保存的数据包

本步骤中,你将读取捕获文件,将数据包端点与 HTTP 请求、响应联系起来。

-r 读取保存的捕获文件,而非实时监听。-nn 让地址与端口均保持数字形式,避免名称查找掩盖实际端点:

sudo tcpdump -nn -r training.pcap

每一行包含时间戳、端点和传输信息。找到两端的 127.0.0.1,以及服务端的端口 8080。另一个 TCP 端口属于客户端,可能变化。TCP 标志既描述连接控制,也描述应用数据包,因此不是每行都包含 HTTP 消息。

添加 -A,将数据包内容显示为 ASCII 文本:

sudo tcpdump -nn -A -r training.pcap

在看似二进制的协议字段之间,找到请求 GET /capture.txt HTTP/1.1 和成功的 HTTP 响应状态。这是明文 HTTP;加密的 HTTPS 不会在基础数据包转储中暴露同样可读的应用内容。

将可读分析与原始 pcap 分开保存:

sudo tcpdump -nn -A -r training.pcap > packet-details.txt

Tcpdump 的捕获文件描述仍可能出现在标准错误中。数据包详情则进入重定向文件。使用 grep 定位请求行:

grep 'GET /capture.txt' packet-details.txt

匹配行将数据包证据与生成的请求联系起来。你保留了供后续工具使用的二进制捕获文件,以及用于快速查看的可读视图。

总结

你选择了捕获接口与过滤器,限制数据包数量,协调后台抓包与 HTTP 请求,并读取了生成的 pcap。你将数字端点和 TCP 数据包与真实请求、响应联系起来。