读取 Pcap 并将其写入 csv 文件 python

reading Pcap and writing it to csv file python

我正在读取 pcap 文件并尝试将其写入包含必要数据的 csv 文件。 我使用 Scapy 读取 Pcap 并且可以成功获取包数据,现在我正在尝试写入 csv 文件但最终只有一个数据。下面是我的代码。

pkts = rdpcap('example.pcap')

for pkt in pkts:

    if IP in pkt:
        ip_src=pkt[IP].src
        ip_dst=pkt[IP].dst
    if TCP in pkt:
        tcp_dport=pkt[TCP].dport

    if ip_src == '10.116.206.114' and ip_dst == '10.236.138.184':
        print (str(ip_src) + str(ip_dst) + str(tcp_dport)) 

        csv_header = "IP_src,IP_drc,dst_port\n"

         s = ""
        for scr in str(ip_src):
            s+=str(scr)
        csv_header += s + ','

        s_ = ''
        for dst in str(ip_dst) :
            s_+=str(dst)
        csv_header += s_ + ','

        s_1 = ''
        for dst_tcp in str(tcp_dport):
            s_1 += str(dst_tcp)
        csv_header += s_1

        f = open("Pcap/test.csv", "w")
        f.write(csv_header)

现在我在 csv 中只得到一个输出

如果我打印以检查所有输出都在日志中而不是在 csv 中,请建议我将数据附加到 csv 中的正确方法

谢谢!

正如@HampusLarsson 评论的那样,for 循环的每次迭代都会打开文件。您应该在循环之前打开文件。 这是固定码:

pkts = rdpcap('example.pcap')

with open("Pcap/test.csv", "w") as f:
    for pkt in pkts:

        if IP in pkt:
            ip_src=pkt[IP].src
            ip_dst=pkt[IP].dst
        if TCP in pkt:
            tcp_dport=pkt[TCP].dport

        if ip_src == '10.116.206.114' and ip_dst == '10.236.138.184':
            print (str(ip_src) + str(ip_dst) + str(tcp_dport)) 

            csv_header = "IP_src,IP_drc,dst_port\n"

            s = ""
            for scr in str(ip_src):
                s+=str(scr)
            csv_header += s + ','

            s_ = ''
            for dst in str(ip_dst) :
                s_+=str(dst)
            csv_header += s_ + ','

            s_1 = ''
            for dst_tcp in str(tcp_dport):
                s_1 += str(dst_tcp)
            csv_header += s_1

            f.write(csv_header)

请注意,我们使用的是上下文管理器 (with open(...) as ...:),因此文件将在作用域结束时自动关闭,或者在出现异常时自动关闭。