下面给你一篇实战型教程,系统讲清楚:
👉 如何使用 Python 分离 / 直接抓取 pcap 抓包文件中的 HTTP 流量
适合 网络分析、取证、爬虫逆向、毕设、运维排障 等合法场景。
使用 Python 分离或抓取 PCAP 文件中的 HTTP 流(完整指南)
⚠️ 合法声明
本文仅用于 协议分析、网络调试、教学研究、取证分析,请勿用于非法监听或隐私数据采集。
一、PCAP + HTTP 分析能做什么?
你可以从抓包文件中提取:
- HTTP 请求 URL
- 请求方法(GET / POST)
- 请求头 / Cookie
- POST 表单数据
- HTTP 响应内容
- 文件下载内容(HTML / JSON / 图片等)
二、三种主流技术路线(先选方案)
| 方式 | 难度 | 适合场景 |
|---|---|---|
| Scapy | ⭐⭐ | 快速分析、脚本化 |
| PyShark | ⭐⭐⭐ | 类 Wireshark 分析 |
| dpkt | ⭐⭐⭐⭐ | 高性能、底层解析 |
👉 新手推荐:PyShark
👉 性能要求高:dpkt
三、方案一:使用 PyShark(最推荐)
1️⃣ 安装依赖
pip install pyshark
⚠️ 需要提前安装 Wireshark / tshark
2️⃣ 读取 pcap 文件中的 HTTP 流
import pyshark
cap = pyshark.FileCapture(
'test.pcap',
display_filter='http'
)
for packet in cap:
try:
print("URL:", packet.http.request_full_uri)
print("Method:", packet.http.request_method)
print("Host:", packet.http.host)
print("-" * 50)
except:
pass
📌 优点
- 自动解析 HTTP
- 支持过滤器
- 可直接分离流量
3️⃣ 抓取 POST 数据
for packet in cap:
if 'http' in packet and hasattr(packet.http, 'file_data'):
print(packet.http.file_data)
4️⃣ 分离 HTTP 响应内容
for packet in cap:
if 'http' in packet and hasattr(packet.http, 'response_code'):
print(packet.http.response_code)
print(packet.http.response_phrase)
四、方案二:使用 Scapy(轻量级)
1️⃣ 安装
pip install scapy
2️⃣ 解析 HTTP 流
from scapy.all import rdpcap
from scapy.layers.http import HTTPRequest
packets = rdpcap("test.pcap")
for pkt in packets:
if pkt.haslayer(HTTPRequest):
http = pkt[HTTPRequest]
print("Host:", http.Host.decode())
print("Path:", http.Path.decode())
📌 适合
- 快速提取 URL
- 自定义协议分析
3️⃣ 解析 POST 数据
if pkt.haslayer(Raw):
print(pkt[Raw].load)
五、方案三:使用 dpkt(专业级)
1️⃣ 安装
pip install dpkt
2️⃣ 解析 HTTP 请求
import dpkt
import socket
with open('test.pcap', 'rb') as f:
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
if not isinstance(eth.data, dpkt.ip.IP):
continue
ip = eth.data
if isinstance(ip.data, dpkt.tcp.TCP):
tcp = ip.data
try:
http = dpkt.http.Request(tcp.data)
print(http.method, http.uri)
except:
pass
📌 优点
- 速度快
- 可处理大文件
- 适合批量取证分析
六、如何“分离 HTTP 流”(按会话)
核心思路
(src_ip, src_port, dst_ip, dst_port) = 一个 HTTP 会话
示例(dpkt)
sessions = {}
key = (ip.src, tcp.sport, ip.dst, tcp.dport)
sessions.setdefault(key, b'')
sessions[key] += tcp.data
之后可对每个 session 单独解析。
七、导出 HTTP 内容到文件
示例:导出 HTML / JSON
with open("output.html", "wb") as f:
f.write(http.body)
八、HTTP vs HTTPS 注意事项(重点)
| 协议 | 是否可直接解析 |
|---|---|
| HTTP | ✅ 可以 |
| HTTPS | ❌ 不行(需密钥) |
HTTPS 解决方案(进阶)
- SSLKEYLOGFILE
- Wireshark + TLS 解密
- 只能解密自己抓的流量
九、典型应用场景
✅ 网络故障排查
✅ 协议分析学习
✅ 安全取证
✅ 流量回放
✅ 爬虫逆向辅助
十、三种方案对比总结
| 工具 | 推荐指数 | 特点 |
|---|---|---|
| PyShark | ⭐⭐⭐⭐⭐ | 最简单,功能强 |
| Scapy | ⭐⭐⭐ | 灵活,轻量 |
| dpkt | ⭐⭐⭐⭐ | 高性能,偏底层 |
十一、毕设 / 报告可用一句话
本系统基于 Python 对 pcap 抓包文件进行解析,实现了 HTTP 流量的自动识别、分离与数据提取,为网络分析和安全研究提供技术支撑。
十二、如果你还想进阶,我可以继续帮你
- ✅ HTTPS 流量解密实战
- ✅ HTTP 文件自动还原
- ✅ pcap → 请求重放
- ✅ 流量分析可视化(Flask)
- ✅ 批量抓包分析系统设计
你可以直接告诉我:
👉 学习 / 毕设 / 安全分析 / 运维排障
我可以按你的用途给你一套更完整的方案。