我在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/

10-14 15:45
查看更多