如何腌制一个scapy包?

Hel*_*hne 12 python pickle scapy

我需要腌制一个scapy包.大部分时间都可以使用,但有时候pickler会抱怨一个函数对象.根据经验:ARP数据包泡菜很好.一些UDP数据包存在问题.

Hel*_*hne 7

我的解决方案(受到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
Run Code Online (Sandbox Code Playgroud)

在任何地方,我希望scapy Packet通过一个,Queue我只需将它包装在一个PicklablePacket__call__之后.我不知道没有以这种方式保留的数据.但是这种方法仅适用于Ethernet数据包.(在常规NIC(而不是WLAN)上嗅探的所有数据包都是以太网.)它可能也可以扩展为适用于其他类型的数据包.