如何在py3代码中将列表转换为scape.plist.PacketList



我使用pkts = rdpcap('./xxx.pcap')xxx.pcap中接收pkts,正如我所期望的,它的类型应该是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,

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

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

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

因为我英语不好,我不知道它清除了什么。

最新更新