我需要腌制一个scapy
包.大部分时间都可以使用,但有时候pickler会抱怨一个函数对象.根据经验:ARP数据包泡菜很好.一些UDP数据包存在问题.
我的解决方案(受到scapy邮件列表的启发)如下:
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)上嗅探的所有数据包都是以太网.)它可能也可以扩展为适用于其他类型的数据包.