我需要 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/

10-10 01:05