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

使用Scapy读取Wireshark抓包后重写,Wireshark部分字段无法显示

Scapy读写pcap后Wireshark字段显示异常的解决办法

用Scapy读取Wireshark抓取的pcap文件,重写成新pcap后,Wireshark打开发现部分字段显示不正常,用到的代码如下:

from scapy.all import *

PKT_List = []
pkts = rdpcap("E:\\test.pcap")
for pkt in pkts:
    PKT_List.append(pkt)

wrpcap("E:\\output.pcap", pkts)

原始与处理后的数据包对比:

  • 原始数据包:原始数据包
  • 处理后数据包:处理后数据包

问题根源

Scapy解析数据包的逻辑和Wireshark存在差异,部分协议字段被解析后再写入时格式发生改变,导致Wireshark无法识别。另外如果原始pcap使用了非默认链路类型,Scapy未自动保留该类型也会引发显示异常。

解决方法

方法1:指定链路类型写入

写入时明确使用原始pcap的链路类型,确保Wireshark能正确识别链路层信息:

from scapy.all import *

pkts = rdpcap("E:\\test.pcap")
# 取第一个包的链路类型,无数据包时用默认以太网类型
wrpcap("E:\\output.pcap", pkts, linktype=pkts[0].linktype if pkts else DLT_EN10MB)

方法2:直接读写原始帧

让Scapy跳过协议解析环节,直接读取原始数据包字节并写入,完全保留原文件格式:

from scapy.all import PcapReader, PcapWriter

with PcapReader("E:\\test.pcap") as reader, PcapWriter("E:\\output.pcap", linktype=reader.linktype) as writer:
    for pkt in reader:
        writer.write(pkt)

方法3:排查字节差异

使用Wireshark的「对比数据包」功能,定位原始与处理后数据包的字节差异,确认具体被修改的字段,再针对性调整Scapy的解析逻辑(比如手动指定协议层)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:39