You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyShark无法读取PCAP文件数据包但Wireshark可正常打开

问题解决:PyShark读取Snort生成的PCAP文件时数据包数量显示为0

问题原因

PyShark的FileCapture采用惰性加载机制,初始化时不会自动加载所有数据包,直接调用len(cap)会返回0——因为此时还未实际读取任何数据包。另外,Snort生成的snort.log.*文件是PCAPNG格式(而非传统PCAP),虽Wireshark和tshark能自动识别,但如果PyShark调用tshark的参数配置不当,也可能导致解析异常。

解决方案

方案1:强制加载所有数据包

在调用len(cap)前,用load_packets()方法提前加载全部数据包:

import pyshark
cap = pyshark.FileCapture('./snort.log.1730480966')
cap.load_packets()  # 触发全量加载
print(len(cap))     # 现在能返回正确的数据包数量

方案2:遍历数据包触发加载

FileCapture是可迭代对象,遍历一次会自动加载数据包,之后len(cap)即可获取正确值:

import pyshark
cap = pyshark.FileCapture('./snort.log.1730480966')
# 遍历触发加载(无需额外操作)
for _ in cap:
    pass
print(len(cap))

方案3:指定tshark格式兼容参数

若上述方法无效,可显式指定tshark按PCAPNG格式解析文件:

import pyshark
cap = pyshark.FileCapture('./snort.log.1730480966', parameters='--read-format pcapng')
cap.load_packets()
print(len(cap))

前置验证

先通过tshark确认文件本身可正常读取:

tshark -r ./snort.log.1730480966 | wc -l

若命令返回正确的数据包数量,说明文件无损坏,问题仅出在PyShark的加载机制。

内容的提问来源于stack exchange,提问作者7_R3X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:04:57