使用Python来分离或者直接抓取pcap抓包文件中的HTTP流

下面给你一篇实战型教程,系统讲清楚:
👉 如何使用 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)
  • ✅ 批量抓包分析系统设计

你可以直接告诉我:
👉 学习 / 毕设 / 安全分析 / 运维排障
我可以按你的用途给你一套更完整的方案。

文章已创建 3572

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部