我在linux中使用scapy for python,我编写了一个处理特定pcap文件的代码,但是当我尝试另一个pcap文件时,它向我显示了eror:
索引器错误:找不到层[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()函数,但它也没有帮助。
我非常感谢你的帮助。
最佳答案
问题是您正在使用packet[i]
。您应该使用packet[i]
更改每个packet
。在scapy中,每个包都是由层叠层构成的,因此当使用packet[i]
时,相当于说“给我打包的第i个层叠层”。这意味着在你第一次编码循环时,你要寻找第一层“在包堆栈中”等。
关于python - IndexError:找不到图层[4],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45904909/