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

问题描述 投票:0回答:1

我正在读取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中仅获得一个输出

enter image description here

如果我打印以检查是否在日志中获得了所有输出,但没有在csv中获得所有输出,请建议我以正确的方式将数据附加到csv中

谢谢!

python string csv scapy pcap
1个回答
1
投票

正如@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 ...:),因此文件将在范围的末尾自动关闭,或者在引发异常的情况下。

© www.soinside.com 2019 - 2024. All rights reserved.