首页 > 解决方案 > 如何在 py3 代码中将列表转换为 scapy.plist.PacketList?

问题描述

pkts = rdpcap('./xxx.pcap')以前在 中接收 pkts xxx.pcap,正如我所料,它的类型应该是scapy.plist.Packet,但是在 rd 之后,它被转换为list类型,而列表元素不能被传输为pkts[IP],我的代码如下:

print(type(pkts))
myfunc(pkts)

和 myfunc 如下:

def myfunc(pkts, src_ip):
    if src_ip is not None:
        print(pkts[0].show())

        try: 
            pkts = pkts[IP].filter(lambda  x:x[IP].src in ipnet(src_ip))
        expect:
            raise TypeError
    return pkts

当我跑步时,它会引发:

Traceback (most recent call last):
  File "parser.py", line 89, in ip_filter
    pkts = pkts[IP].filter(lambda  x:x[IP].src in ipnet(src_ip))
TypeError: list indices must be integers or slices, not Packet_metaclass

ipnet 等于 IPy.iP,

现在,我知道我需要将类型转换listscapy.plist.PacketList,但我该怎么做呢?

标签: python-3.xscapypcap

解决方案


感谢罗斯,我明白了,因为 python3 会将 pkts 的类型从scapy.plist.PacketListto重置list,所以我们需要在PacketList(pkts)这里使用 scapy,如下所示:

   def func2(pkts):
       pkts=PacketList(pkts)
       packet's process code.
   def func1():
       pkts=rdpcap('xxx.pcap')
       func2(pkts)

因为我不擅长英语,我不知道它是否清除了 supscri**ed。


推荐阅读