def __init__(self, options): self.genReq = options.get("genreq") # Get active plugins lplugins = None if options.get("script_string"): lplugins = Facade().get_parsers(options.get("script_string")) if not lplugins: raise FuzzException( FuzzException.FATAL, "No plugin selected, check the --script name or category introduced." ) recursive = lplugins or options.get("rlevel") > 0 filtering = options.get('filter_params')['active'] is True # Create queues (in reverse order) # genReq ---> seed_queue -> http_queue -> [round_robin] -> [plugins_queue] * N -> process_queue -> [routing_queue] -> [filter_queue]---> results_queue self.results_queue = MyPriorityQueue() self.filter_queue = FilterQ(options.get("filter_params"), self.results_queue) if filtering else None self.routing_queue = RoutingQ( None, self.filter_queue if filtering else self.results_queue) if recursive else None self.process_queue = ProcessorQ( options.get("rlevel"), self.genReq.stats, self.routing_queue if recursive else self.filter_queue if filtering else self.results_queue) self.plugins_queue = None if lplugins: cache = HttpCache() self.plugins_queue = RoundRobin([ JobMan(lplugins, cache, self.process_queue), JobMan(lplugins, cache, self.process_queue), JobMan(lplugins, cache, self.process_queue) ]) self.http_queue = HttpQueue( options, self.plugins_queue if lplugins else self.process_queue) self.seed_queue = SeedQ(self.genReq, options.get("sleeper"), self.http_queue) # recursion routes if recursive: self.routing_queue.set_routes({ "<class 'framework.fuzzer.fuzzobjects.FuzzRequest'>": self.seed_queue, "framework.plugins.pluginobjects.PluginRequest": self.http_queue, "framework.fuzzer.fuzzobjects.FuzzResult": self.filter_queue if filtering else self.results_queue }) ## initial seed request self.seed_queue.put_priority(1, self.genReq)