我需要 pickle 一个scapy
数据包。在大多数情况下,这是可行的,但有时,选择器会提示函数对象。根据经验:ARP数据包可以 pickle 。某些UDP数据包有问题。
最佳答案
我的解决方案(受骗的邮件列表启发)如下:
class PicklablePacket:
"""A container for scapy packets that can be pickled (in contrast
to scapy packets themselves)."""
def __init__(self, pkt):
self.contents = bytes(pkt)
self.time = pkt.time
def __call__(self):
"""Get the original scapy packet."""
pkt = scapy.Ether(self.contents)
pkt.time = self.time
return pkt
我想通过
scapy
传递Packet
Queue
的任何地方,我只需将其包装在PicklablePacket
中,然后再对其进行__call__
。我不知道没有以这种方式保留的数据。但是,此方法仅适用于Ethernet
数据包。 (在常规NIC(不是WLAN)上嗅探到的所有数据包都是以太网。)它也可能会扩展为适用于其他类型。关于python - 如何 pickle 一个鱼鳞状的小包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4156328/