为了账号安全,请及时绑定邮箱和手机立即绑定

Python 抓包实战指南,从代理抓包、协议解析到底层数据流分析的全链路方法

标签:
iOS

在自动化测试、接口调试、网络分析或逆向还原协议时,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 二进制帧
  • 自定义网络协议

操作:

  1. 选择应用
  2. 捕获 HTTPS / TCP / UDP 数据
  3. 导出 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

排查:

  1. App 使用证书 Pinning
  2. 代理层完全失效
  3. 使用 Sniffmaster 捕获底层流量
  4. 导出 pcap → Python 通过 pyshark 分析握手信息

最终确认问题并定位到 SDK 的指纹校验机制。

Python 无法单独完成,补抓工具起关键作用。


Python 抓包必须与底层工具协作才能覆盖整个网络栈

抓包层级 工具 作用
代理层 mitmproxy、Charles 常规 HTTPS 抓包与修改
协议层 Wireshark、tcpdump 分析 TLS/QUIC/TCP
自动化层 Python(pyshark、scapy) 自动化分析、批处理
补抓层 抓包大师(Sniffmaster) 捕获真实 HTTPS/TCP/UDP 数据流

现代网络环境下,Python 不是抓包的全部,而是抓包体系中的一环。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消