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

使用PyShark LiveCapture带display_filter抓包存PCAP时添加output_file无响应

问题分析

在PyShark 0.6版本中,同时使用LiveCapture的output_file和display_filter参数导致程序无响应的核心原因是:

  • output_file参数会让tshark将原始数据包写入指定文件,此时tshark默认不再向标准输出(stdout)发送解析后的数据包内容。
  • sniff_continuously()依赖读取tshark输出的PDML格式数据来迭代数据包,没有数据输入就会导致程序卡住。
解决方案

放弃使用output_file参数,改为通过tshark_args手动传递-w参数,让tshark同时完成两个动作:将原始数据包写入PCAP文件,同时输出PDML格式数据供PyShark解析处理。

修改后的代码如下:

import pyshark

interf = "Wi-Fi"
# 手动添加tshark的-w参数指定输出文件,保留display_filter过滤规则
capture = pyshark.LiveCapture(
    interface=interf,
    display_filter='tcp',
    tshark_args=['-w', 'HERE.pcap']
)

try:
    for packet in capture.sniff_continuously():
        print(packet)
except KeyboardInterrupt:
    print("Capture stopped.")
说明
  • 这段代码会持续捕获符合tcp过滤规则的数据包,实时打印解析后的数据包信息,同时将原始数据包写入HERE.pcap文件。
  • 按下Ctrl+C触发键盘中断时,程序会终止捕获并提示,tshark会自动关闭PCAP文件,保证文件完整性。
  • 该实现完全复刻了Wireshark中“实时过滤抓包并可随时停止保存”的功能,无超时和数据包数量限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:14:51