我在更新变量方面遇到了一个不寻常的问题。我已经构建了一个简单的类对象来帮助我进行一些网络嗅探。我想做一个并行进程,它允许我运行一些网络测试并捕获使用 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)