def doActualFuzz(self): """ The main fuzzing loop. all magic is performed here sends results via queue to the parent Only called once, by the fuzzingmaster """ if "DebugWithFile" in self.config: utils.setupSlaveLoggingWithFile(self.threadId) random.seed(self.initialSeed) logging.info("Setup fuzzing...") signal.signal(signal.SIGINT, signal_handler) targetPort = self.config["target_port"] + self.threadId clientManager = ClientManager(self.config, self.threadId, targetPort) networkServerManager = ClientFuzzerServer(self.config, targetPort) # start the server if not networkServerManager.start(): return iterStats = { "count": 0, # number of iterations "crashCount": 0, # number of crashes, absolute "startTime": time.time(), "lastUpdateTime": time.time(), } sendDataResult = None print(str(self.threadId) + " Start fuzzing...") self.queue.put((self.threadId, 0, 0, 0)) fuzzingIterationData = None while True: self.updateStats(iterStats) logging.debug("\n\n") logging.debug("A fuzzing loop...") if self.config["debug"]: # lets sleep a bit time.sleep(0.5) selectedInput = self.selectInput() fuzzingIterationData = fuzzingiterationdata.FuzzingIterationData( self.config, selectedInput) if not fuzzingIterationData.fuzzData(): logging.error("Could not fuzz the data") return networkServerManager.setFuzzData(fuzzingIterationData) clientManager.execute() networkServerManager.handleConnection() networkServerManager.stop()