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

Python用Scapy读取Pcap写入CSV仅得单条数据的技术求助

解决Scapy写入CSV仅存一条数据的问题

我来帮你揪出问题根源!你现在CSV里只有一条数据,核心原因有两个:

  1. 每次循环都用open("Pcap/test.csv", "w")打开文件——"w"是覆盖写入模式,每次打开都会清空文件原有内容,最后自然只剩最后一次循环的数据。
  2. 你在每次循环里都重新构造并写入表头,这不仅重复冗余,还会把之前的数据覆盖掉。

下面给你两种修复方案,从简单到专业:

方案1:基础文件操作修复

先一次性写入表头,之后用追加模式("a")写入每条符合条件的数据:

from scapy.all import rdpcap, IP, TCP

pkts = rdpcap('example.pcap')

# 第一步:写入CSV表头(只执行一次)
with open("Pcap/test.csv", "w") as f:
    # 注意修正了你之前的拼写错误:IP_drc → IP_dst
    f.write("IP_src,IP_dst,dst_port\n")

# 第二步:循环处理数据包,追加写入数据
for pkt in pkts:
    if IP in pkt:
        ip_src = pkt[IP].src
        ip_dst = pkt[IP].dst
        # 把条件合并,让代码更简洁
        if TCP in pkt and ip_src == '10.116.206.114' and ip_dst == '10.236.138.184':
            tcp_dport = pkt[TCP].dport
            print(f"{ip_src}{ip_dst}{tcp_dport}")
            # 构造一行数据
            data_line = f"{ip_src},{ip_dst},{tcp_dport}\n"
            # 用追加模式打开文件,写入新行
            with open("Pcap/test.csv", "a") as f:
                f.write(data_line)

方案2:用Python CSV模块更可靠(推荐)

手动拼接字符串容易出问题(比如字段包含特殊字符时),用Python内置的csv模块更规范、更安全:

from scapy.all import rdpcap, IP, TCP
import csv

pkts = rdpcap('example.pcap')

# 打开文件并初始化CSV写入器
with open("Pcap/test.csv", "w", newline='') as csv_file:
    # 定义表头字段
    field_names = ['IP_src', 'IP_dst', 'dst_port']
    writer = csv.DictWriter(csv_file, fieldnames=field_names)
    
    # 写入表头
    writer.writeheader()
    
    # 循环处理数据包
    for pkt in pkts:
        if IP in pkt:
            ip_src = pkt[IP].src
            ip_dst = pkt[IP].dst
            if TCP in pkt and ip_src == '10.116.206.114' and ip_dst == '10.236.138.184':
                tcp_dport = pkt[TCP].dport
                print(f"{ip_src}{ip_dst}{tcp_dport}")
                # 写入一行数据,字典键对应表头
                writer.writerow({
                    'IP_src': ip_src,
                    'IP_dst': ip_dst,
                    'dst_port': tcp_dport
                })

关键说明:

  • with语句会自动帮你关闭文件,避免手动关闭的遗漏问题。
  • 追加模式"a"只会把新内容加到文件末尾,不会覆盖原有数据。
  • csv模块会自动处理字段分隔、转义等细节,适合复杂场景。

内容的提问来源于stack exchange,提问作者Darshan Mahalinge Gowda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:47:36