我在linux中使用scapy for python并且我编写了一个在特定pcap文件上工作的代码,但是当我尝试了另一个pcap文件时它向我显示了错误: IndexError:找不到图层[4]。 我试图在网上找到解决方案,但没有任何效果。
from scapy.all import *
import pandas as pd
df = pd.DataFrame(columns=['Dest_IP', 'Source_IP', 'Source_Port'])
packets = rdpcap("attack.pcap")
i = 0
for packet in packets:
print i
print packet[i].summary()
if(packet[i].haslayer(IP)):
insert_ip_dest = packet[IP].dst
insert_ip_source = packet[IP].src
else:
insert_ip_dest = 'N/A'
insert_ip_source = 'N/A'
if(packet[i].haslayer(TCP)):
insert_dest_port = packet[TCP].dport
else:
insert_dest_port = 'N/A'
df.loc[i] = [insert_ip_dest, insert_ip_source, insert_dest_port]
i = i+1
df.to_csv("packets.csv")
我甚至尝试使用haslayer()函数,但它也没有帮助。 我真的很感激任何帮助。
答案 0 :(得分:0)
问题是您使用的是packet[i]
。您应该使用packet[i]
更改每个packet
。在scapy中,每个数据包都是由堆叠层组成的,所以当你使用packet[i]
相当于说"给我打包的第i个堆叠层"。这意味着在你第一次编码循环时,你要在数据包栈中找到第一层""等等。