IndexError:找不到图层[4]

时间:2017-08-27 12:22:43

标签: python linux scapy

我在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()函数,但它也没有帮助。 我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是您使用的是packet[i]。您应该使用packet[i]更改每个packet。在scapy中,每个数据包都是由堆叠层组成的,所以当你使用packet[i]相当于说"给我打包的第i个堆叠层"。这意味着在你第一次编码循环时,你要在数据包栈中找到第一层""等等。