Python 索引器:找不到层[4]

Python 索引器:找不到层[4],python,linux,scapy,Python,Linux,Scapy,我在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.p

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

问题是您使用的是
数据包[i]
。您应该使用
数据包更改每个
数据包[i]
。实际上,每个数据包都是由堆叠的层组成的,因此当你使用
数据包[i]
时,就相当于说“给我打包中的第i个堆叠层”。这意味着,在您第一次编写循环时,您要查找“数据包堆栈”中的第一层,等等。

问题在于您使用的是
packet[i]
。您应该使用
数据包更改每个
数据包[i]
。实际上,每个数据包都是由堆叠的层组成的,因此当你使用
数据包[i]
时,就相当于说“给我打包中的第i个堆叠层”。这意味着,在您第一次编写循环代码时,您正在寻找第一层“数据包堆栈”,等等。

请粘贴错误回溯的完整堆栈跟踪(最近一次调用):文件“create_table.py”,第9行,在print packet[i].summary()文件“/home/oded/.local/lib/python2.7/site packages/scapy/packet.py”,第817行,在getitem raise Indexer(“未找到[%s]层”%lname)中,Indexer:Layer[4]not found@DNIT13请粘贴错误回溯的完整堆栈跟踪(最近一次调用):文件“create_table.py”,第9行,在print packet[i].summary()文件“/home/oded/.local/lib/python2.7/site packages/scapy/packet.py”,第817行,在getitem提升索引器中(“未找到层[%s]“%lname”)索引器:未在dnit13处找到层[4]