首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >吡鲨数据包队列和泡菜错误

吡鲨数据包队列和泡菜错误
EN

Stack Overflow用户
提问于 2015-02-26 15:41:27
回答 1查看 583关注 0票数 0

我正在尝试使用pyshark来实时捕获数据包。

当我试图从multiprocessing.Queue获取数据包或不对它们进行腌制时,我会得到以下错误:

python2.7/site-packages/pyshark/packet/layer.py",第48行,以__getattr__表示 val =self.get_field_value(项目,raw=self.raw_mode) (...多次.) RuntimeError:调用Python时超过了最大递归深度。

我怀疑在重构对象时会出现问题,无论对象是从队列中退出,还是未被腌制。

然而,令人惊讶的是,当我使用Queue.Queue进行此操作时,没有出现错误。

下面是用于复制此问题的代码:

代码语言:javascript
复制
import pyshark
import multiprocessing
import Queue
import cPickle as pickle

# Capture on eth0
interface = pyshark.LiveCapture(interface="eth0")

def queue_test(queue):
    """ Puts captured packets in a queue, then un-queue them and display """
    for packet in interface.sniff_continuously(packet_count=5):
        queue.put(packet)
    while not queue.empty():
        packet = queue.get()
        print "Packet {} {}".format(packet.highest_layer,packet._packet_string)

def pickle_test():
    """ Immediately pickle and unpickle the packet to display it"""
    for packet in interface.sniff_continuously(packet_count=5):
        pickled_packet = pickle.loads(pickle.dumps(packet, pickle.HIGHEST_PROTOCOL))
        print "Packet #{}, {} {}".format(pickled_packet.highest_layer,pickled_packet._packet_string)


if __name__ == "__main__":
    normal_queue = Queue.Queue()
    process_queue = multiprocessing.Queue()

    # Runs fine
    queue_test(normal_queue)

    # Both crash with a RuntimeError
    queue_test(process_queue)
    pickle_test()

为什么我要得到RuntimeErrors,我能做些什么呢?

我做错什么了还是pyshark在做这件事上有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 07:46:31

由于在这里没有取得多大的成功,我在吉特布上发布了一个问题,它碰巧是图书馆中缺少的东西:

这是由于某些包使用的类覆盖getattr造成的。固定在541fc52

此问题的链接:https://github.com/KimiNewt/pyshark/issues/63

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28746662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档