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