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

直接说结论: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 支持的所有协议解析器,但代价是启动慢、内存占用高、不能离线修改解析逻辑。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成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 脚本没用,得结合业务知识定位协议位置和字段语义。

















