讲师中心 微信公众号
AI工具推荐 视频效率加速

怎样用Python脚本提取Wireshark导出的PCAP包中的关键敏感数据?

浅瑶同学_1238

浅瑶同学_1238

发布时间:2026-09-27 13:15:39

|

260人浏览过

|

来源于php中文网

原创

Wireshark本身不提供自动提取敏感数据的Python接口,pyshark依赖tshark进程解析、适合快速读取已知协议字段,scapy纯Python解析、可控性强但需手动处理协议嵌套与解密缺失问题。

怎样用python脚本提取wireshark导出的pcap包中的关键敏感数据?

直接说结论:Wireshark 本身不提供“自动提取敏感数据”的Python接口,pyshark 和 scapy 是实际可用的两个主力库,但它们处理逻辑完全不同——pyshark 依赖 tshark 进程解析,适合快速读取已知协议字段;scapy 纯 Python 解析,可控性强但需手动处理协议嵌套和解密缺失问题。别指望一个脚本扫出所有密码、token 或身份证号,那得先定义“关键”是什么。

用 scapy 读 PCAP 并过滤 HTTP/HTTPS 明文流量

HTTPS 流量默认无法提取明文(没私钥或未启用 SSLKEYLOGFILE),所以第一步永远是确认你手里的 PCAP 是否含可读内容。HTTP、FTP、SMTP、Telnet 这类无加密协议才是 scapy 的主战场。

  • scapy 会把每个包转成 Python 对象,用 pkt[TCP].payload 拿载荷,但要注意:载荷可能是 Raw 层,也可能是 Padding 后截断,得先检查 haslayer(Raw)
  • HTTP 请求常用 pkt[Raw].load 提取,但必须先过滤出 TCP 且 dport in [80, 8080] 或 sport in [80, 8080],否则混入大量 ACK 包导致误匹配
  • 别直接对 load 做 .decode('utf-8') —— 二进制乱码会抛 UnicodeDecodeError,应改用 .decode('utf-8', errors='ignore') 或先用 isprintable() 判断
from scapy.all import rdpcap, TCP, Raw
pkts = rdpcap("traffic.pcap")
for pkt in pkts:
    if pkt.haslayer(TCP) and pkt.haslayer(Raw):
        if pkt[TCP].dport == 80 or pkt[TCP].sport == 80:
            try:
                payload = pkt[Raw].load.decode('utf-8', errors='ignore')
                if 'password=' in payload or 'Authorization: Basic' in payload:
                    print(payload[:200])
            except:
                pass

用 pyshark 抓取 DNS、DHCP、SMB 等协议中的可疑字段

pyshark 本质是调用系统里已安装的 tshark,所以它能识别 Wireshark 支持的所有协议解析器,但代价是启动慢、内存占用高、不能离线修改解析逻辑。

提示词大师-python版
提示词大师-python版

图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍

下载
  • 它暴露的是类似 Wireshark GUI 里的字段名,比如 DNS 查询名是 dns.qry.name,DHCP 客户端 ID 是 dhcp.option.client_id,这些字段名必须查 tshark -G fields | grep dhcp 确认,拼错就返回 None
  • 不要用 FileCapture 遍历全部包再筛字段——太慢。改用 FileCapture(display_filter="dns || dhcp") 让 tshark 在底层过滤,性能差十倍以上
  • 某些字段(如 SMB 文件名)可能跨多个 TCP 分片,pyshark 默认不重组,得加参数 use_json=True, include_raw=True 并配合 pkt.frame_info.protocols 判断是否为完整应用层消息
import pyshark
cap = pyshark.FileCapture("traffic.pcap", display_filter="dns || dhcp")
for pkt in cap:
    if 'dns' in pkt and hasattr(pkt.dns, 'qry_name'):
        if '.bank' in pkt.dns.qry_name.lower() or 'api-key' in pkt.dns.qry_name.lower():
            print(f"DNS query: {pkt.dns.qry_name}")
    if 'dhcp' in pkt and hasattr(pkt.dhcp, 'option_client_id'):
        print(f"DHCP Client ID: {pkt.dhcp.option_client_id}")

绕不开的坑:HTTPS 解密、Base64 凭据、分片重组

真正敏感的数据往往藏在加密流量里,而 Python 脚本本身不解决解密问题。你得提前准备好条件,否则所有后续分析都是空谈。

立即学习“Python免费学习笔记(深入)”;

  • HTTPS 解密只有一种靠谱方式:PCAP 必须由浏览器/客户端在设置 SSLKEYLOGFILE 环境变量后生成,且脚本运行时要让 tshark 能读到该文件(FileCapture(sslkeylog_file="/path/to/sslkey.log"))。没有这个,pyshark 或 scapy 都只能看到 TLS 握手,看不到 Application Data
  • 很多凭据以 Base64 编码出现在 Authorization: Basic xxx 或 JSON body 中,得用 base64.b64decode() 尝试解码,但注意不是所有 base64 字符串都合法——要捕获 binascii.Error 异常
  • TCP 流重组不是自动的。scapy 不做这事,pyshark 默认也不做。如果目标是提取完整 HTTP POST body,得自己按 tcp.stream 聚合所有包,排序、去重、拼接,再找 \r\n\r\n 分隔头/体——这活儿容易漏掉 FIN 包或乱序包

最常被忽略的一点:敏感数据识别不能只靠字符串匹配。“password=123456” 是明显的,但 “token: eyJhbGciOi…”、“X-API-Key: sk-xxx”、“uid=U2FsdGVkX1…” 这些需要正则+上下文判断;更麻烦的是,有些字段值本身是加密或哈希过的,看上去像随机字符串,但其实是有效凭证——这时候光靠 Python 脚本没用,得结合业务知识定位协议位置和字段语义。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1591

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

3824

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1609

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

22077

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2707

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2767

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1103

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn