小编nic*_*odz的帖子

使用多处理时未更新 Python 实例变量

我在更新变量方面遇到了一个不寻常的问题。我已经构建了一个简单的类对象来帮助我进行一些网络嗅探。我想做一个并行进程,它允许我运行一些网络测试并捕获使用 python 生成的流量,这样我就可以扩展程序来做一些了不起的事情。我正在使用 scapy 的嗅探功能来帮助进行界面嗅探。

Scapy 的嗅探器允许您将一个函数传递给它自己的函数,该函数允许您创建“停止嗅探”条件。在我的例子中,我已经创建了函数stop_filter,我希望通过简单地更新self.stop_sniffing实例变量来停止 Scapy sniff 函数。我在下面展示了程序输出,它显示self.stop_sniffing在 Function 中设置为 True stop,但在stop_filter. 我不知道为什么会发生这种情况,也没有想到解决方案,因为这是一个如此奇怪的问题。

如果任何有新鲜眼光的人都能看到我在这里做了什么疯狂的事情,将不胜感激!

from scapy.all import *
from multiprocessing import Process


class DatasetSniffer:
    def __init__(self, iface, local_dir='.'):
        self.iface = iface
        self.master = None
        self.local_dir = local_dir
        self.stop_sniffing = False # Never updates! why!?
        self.writer = PcapWriter(local_dir+"/master.pcap", append=True, sync=True)

    def stop_filter(self, p):
        # Note: 'p' gets passed in by Scapy function 'sniff'
        print self.stop_sniffing
        # Return 'True' to stop …
Run Code Online (Sandbox Code Playgroud)

python multithreading scapy

1
推荐指数
1
解决办法
1257
查看次数

标签 统计

multithreading ×1

python ×1

scapy ×1