Python scapy:读取、操作和写入pcap文件

3
我想使用Python Scapy读取pcap文件,操作TCP负载(例如删除当前负载并用0替换它),并将处理后的数据包写入新的pcap文件。
2个回答

3

这里有一个使用pypcap和dpkt的解决方案。它假定IP是L2协议。

import dpkt
from dpkt.ip import IP
from dpkt.tcp import TCP

for ts, raw_pkt in pcap.pcap(file_path):
    ip = IP(raw_pkt[14:])
    if(type(ip) != IP):
        continue
    tcp = ip.data
    if(type(tcp) != TCP):
        continue
    do_something_with(tcp.data)

在我看来,缺少向新的pcap文件写入数据的功能(这很遗憾 - 因为这正是我正在寻找的)。 - Andreas Florath
@AndreasFlorath 我有一些用于读写pcap文件的Python代码。我会找出来给你。 - cmh
非常感谢 - 我昨天使用scapy和wrpcap自己解决了。 - Andreas Florath

2
最初的回答:FTR,回答提问者的问题,
from scapy.all import *
with PcapWriter("output.pcap", sync=True) as outs:
    with PcapReader("input.pcap") as ins:
        for pkt in ins:
            if TCP in pkt:
                pkt[TCP].remove_payload()
            outs.write(pkt)

亲爱的 @Cukic0d,它已经删除了有效载荷,但是当我构造数据包时,我得到了“捕获文件中缺少25个字节”的错误。我应该减少packet[IP].len以避免这个错误吗? - Nagmat
你可以将其设置为“None”(校验和、长度等也是如此),然后Scapy将重新计算它们。 - Cukic0d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接