在自动化测试、接口调试、网络分析或逆向还原协议时,Python 抓包 是开发者经常采用的重要手段。Python 生态中有丰富的网络抓包与协议解析工具,例如:
scapy:构造/解析网络报文pyshark:基于 Wireshark 的解析库mitmproxy:可脚本化的 HTTPS 代理socket/asyncio:用于自定义协议监听
但随着 HTTPS Everywhere、TLS1.3、证书 Pinning、HTTP/3(QUIC)、自定义协议加密 等技术普及,Python 仅靠代理抓包或库级抓包往往难以复现真实流量。
因此,现代抓包流程必须由多工具协同完成,而不是只依赖 Python。
一、Python 抓包常见方式:适用范围与局限
Python 自身并不是抓包工具,但可以通过不同库实现抓包或网络解析,适合自动化测试场景。
mitmproxy:最常用的 Python HTTPS 代理工具
特点:
- 能拦截/修改 HTTP/HTTPS
- 可写 Python 脚本自动化处理请求
- 适合 Web/API 自动化测试
局限:
- 无法处理 TLS Pinning
- 无法处理 HTTP/3 / QUIC
- 自定义 TCP/UDP 协议无法抓取
scapy:最强大的报文构造与解析库
可做:
- 捕获网络包(需管理员权限)
- 构造任意协议格式
- 协议分析、渗透测试框架开发
局限:
- 无法解密 HTTPS
- 高层协议还原需要额外逻辑
- 在 macOS/iOS 环境下无法直接分析移动端 App 请求
pyshark:基于 Wireshark 的 Python 解析库
适合:
- 自动化处理 pcap 文件
- 解析 TLS、TCP、UDP 报文
- 批量网络分析任务
但它 不能自行抓包,必须依靠 tcpdump、Wireshark 或其他工具提供 pcap 数据。
原生 socket/asyncio 用于抓取自定义协议
适合:
- 模拟客户端
- 捕获 WebSocket
- 分析游戏协议
- 回放二进制数据
但无法抓取真实设备上的真实应用流量。
二、Python 抓包常失败的根本原因(工程角度)
由于 Python 多依赖代理或本机抓包,因此遇到以下情况时就会失败:
① 移动端 App 使用证书 Pinning
代理证书无法被 App 接受 → 没有任何明文。
② 流量走 HTTP/3 / QUIC(UDP)
代理根本抓不到:
mitmproxy / Fiddler / Charles 全部失效。
③ 自定义协议不基于 HTTP
Python 无法还原真实 App 网络行为。
④ 流量不经过电脑代理
例如:
- iOS 系统代理被 VPN/MDM 覆盖
- App 使用直连网络库
此时 Python 无流量可抓。
三、Python 无法抓包时,需要底层补抓(关键环节)
Python 在代理层和自动化抓包领域非常强,但 无法捕获真实移动端设备流量。
要从真实 App 获取:
- HTTPS
- TLS 握手
- HTTP/2
- HTTP/3(QUIC)
- TCP / UDP
- WebSocket
- 自定义协议
就必须使用能捕获数据流的底层工具。
抓包大师(Sniffmaster)在 Python 抓包体系中的作用
Sniffmaster 的能力:
- 捕获 HTTPS、HTTP、TCP、UDP 全部数据流
- 自动识别协议类型(HTTP/HTTPS/mdns 等)
- 按 应用或域名过滤,避免噪音
- 以文本、HEX、二进制查看流量
- 支持脚本拦截器修改请求/响应
- 导出 pcap 文件供 Python 使用 pyshark 分析
- 跨平台:macOS / Windows / iOS
其价值在于:
Sniffmaster 负责“数据抓取”,Python 负责“数据处理”。
二者形成互补关系。
四、Python + Sniffmaster 的完整抓包工作流(最佳实践)
① 使用 Sniffmaster 捕获移动端真实流量
适用于:
- HTTPS 无法解密
- Pinning 导致代理失效
- QUIC / UDP
- WebSocket 二进制帧
- 自定义网络协议
操作:
- 选择应用
- 捕获 HTTPS / TCP / UDP 数据
- 导出 pcap
② 使用 Python 解析流量(pyshark / scapy)
例如:
import pyshark
cap = pyshark.FileCapture("app_flow.pcap")
for pkt in cap:
print(pkt)
适合:
- 自动化协议识别
- 批量分析任务
- TLS 握手统计
- QUIC 数据包分析
- 自定义协议解析
③ 使用 mitmproxy 进行自动化 API 调试(非 Pinning 场景)
配合脚本:
def response(flow):
if "api" in flow.request.pretty_url:
print(flow.response.text)
④ 使用 scapy 进行深度包分析或构造攻击模拟
例如:
from scapy.all import *
packets = rdpcap("app_flow.pcap")
Python 配合 Sniffmaster 形成完整分析链路。
五、案例:Python 抓不到 HTTPS,但 Sniffmaster 成功补抓
问题:
- mitmproxy 无法抓到 App HTTPS
- Charles 显示 CONNECT
- Wireshark 发现 TLS Alert
排查:
- App 使用证书 Pinning
- 代理层完全失效
- 使用 Sniffmaster 捕获底层流量
- 导出 pcap → Python 通过 pyshark 分析握手信息
最终确认问题并定位到 SDK 的指纹校验机制。
Python 无法单独完成,补抓工具起关键作用。
Python 抓包必须与底层工具协作才能覆盖整个网络栈
| 抓包层级 | 工具 | 作用 |
|---|---|---|
| 代理层 | mitmproxy、Charles | 常规 HTTPS 抓包与修改 |
| 协议层 | Wireshark、tcpdump | 分析 TLS/QUIC/TCP |
| 自动化层 | Python(pyshark、scapy) | 自动化分析、批处理 |
| 补抓层 | 抓包大师(Sniffmaster) | 捕获真实 HTTPS/TCP/UDP 数据流 |
现代网络环境下,Python 不是抓包的全部,而是抓包体系中的一环。
共同学习,写下你的评论
评论加载中...
作者其他优质文章