📌 前言
在网络安全分析、CTF 比赛或日常运维中,我们经常需要捕获网络流量并分析其中的加密数据。本文将手把手教你如何用 Python 搭建简易 HTTP 服务器模拟网络传输,用 Wireshark 抓取流量并提取出加密的.gpg文件,最后用 GPG 命令行进行解密。本文附带了大量新手常见报错的排查方案,帮你一次跑通!
🛠️ 一、 环境准备
抓包工具:Wireshark(安装时请务必勾选
Npcap,并勾选支持 Loopback 回环抓包)加解密工具:Gpg4win (Kleopatra) - Windows 下 GPG 的图形化前端
模拟环境:Python 3.x、Curl、PowerShell
🔐 二、 第一步:使用 Kleopatra 生成密钥并加密文件
打开 Kleopatra,点击“新建密钥对”。
输入姓名(例如
张三)和邮箱(例如test@example.com),点击下一步,设置一个密码或直接留空(测试环境为了方便,可以直接留空,但会引发后续的一个坑,见下文)。桌面上新建
secret.txt,内容写上“这是我要加密的绝密信息”。在 Kleopatra 中点击“签名/加密”,选择该文件。
⚠️避坑指南 1:No passphrase given
如果你在加密时勾选了“签名为”,而私钥是空密码,系统会报You have not entered a passphrase! An empty passphrase is not allowed.。
解决方案:在加密界面,取消勾选最上面的“签名为”,保留下面的“为我加密”,点击“签名/加密”,生成secret.gpg。
🌐 三、 第二步:搭建本地服务器模拟流量
桌面新建一个文件夹
gpg_server,将刚才生成的secret.gpg复制进去。打开 PowerShell,进入该目录并启动服务器:
cd Desktop\gpg_server python -m http.server 8080保持该窗口开启,不要关闭。
⚠️避坑指南 2:404 Not Found 与 curl 失败
如果浏览器访问
http://127.0.0.1:8080/secret.gpg提示 404,说明你的服务器启动目录不对,或者文件名不一致(比如实际叫secret.txt.gpg)。在 PowerShell 中,
curl是Invoke-WebRequest的别名,不支持-O参数,必须写成curl.exe -O ...。
🦈 四、 第三步:Wireshark 抓包与数据提取
关键操作:打开 Wireshark,选择网卡
Adapter for loopback traffic capture(回环适配器),点击开始抓包。(否则抓不到本地 127.0.0.1 的流量)。回到 PowerShell 执行下载命令:
curl.exe -O http://127.0.0.1:8080/secret.gpg3.下载完成后,停止 Wireshark 抓包。
提取加密数据(极其重要):
在 Wireshark 过滤栏输入
http,找到GET /secret.gpg对应的HTTP/1.0 200 OK响应包。不要直接点击“追踪 TCP 流”然后另存为 ASCII!这样会混入 HTTP 头部。
正确姿势:在下方“数据包详细信息”面板,找到底层最下面的一行
Data (xxx bytes),右键点击它,选择“导出分组字节流” (Export Packet Bytes...)。保存为
from_wireshark.gpg。
🔓 五、 第四步:命令行解密(绕过 GUI 报错)
拿到导出的from_wireshark.gpg后,双击打开 Kleopatra 解密通常会报错:“文件包含证书,无法被解密或验证”。
⚠️避坑指南 3:Kleopatra 报“包含证书”
这是 Kleopatra 图形界面的经典误判,它经常把纯正的 PGP 加密数据当成 X.509 证书。
终极解决方案:彻底抛弃图形界面,使用 GPG 命令行!
打开 PowerShell,执行以下命令(注意替换为你自己的实际路径):
gpg --output C:\Users\YourUsername\Desktop\final_decrypted.txt --decrypt C:\Users\YourUsername\Desktop\from_wireshark.gpg打开生成的final_decrypted.txt,你会惊喜地发现明文“这是我要加密的绝密信息”完美还原!
🎯 六、 总结与排错核心
整个过程的核心逻辑是:本地加密 -> 模拟传输 -> 网卡抓包 -> 剥离协议头提取纯密文 -> 命令行解密。
新手常见的坑排查清单:
加密报错:检查是否取消了“签名为”。
下载 404:检查服务器目录和文件名,务必先用浏览器验证。
抓不到包:检查是否选择了
Adapter for loopback traffic capture。解密报错包含证书:请务必使用
gpg --decrypt命令行,不要依赖 Kleopatra GUI。解密失败提示格式错误:说明你导出时混入了 HTTP 头,请用“导出分组字节流”。