def testMultipleClients(self): echo = BotCommClient("", 424242, self.key, self.iv, "ECHO") foo = BotCommClient("", 424242, self.key, self.iv, "FOO") echo.start() foo.start() m1 = BotMessage("norm", ["Foo", "Bar"]) m2 = BotMessage("foo", "A foo") echo.send(m1) foo.send(m2) r1 = echo.receive(True, 1) foo.kill() echo.kill()
def run(self): self.logger.debug("Starting SubmitBot webserver thread") self.webserver.start() server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient( server_info.host, server_info.port, server_info.key, server_info.iv, "SUBMIT_BOT") self.running = True collector = getSharedCollector() try: self.comm.start() while(self.running): msg = self.comm.receive() assert(msg.type == "COLLECT_FLAGS") flags = collector.collect() self.comm.send(BotMessage("COLLECT_FLAGS_RESULT",flags)) self.comm.kill() except Exception as e: self.logger.error("Exception %s" % e)
def run(self): server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient( server_info.host, server_info.port, server_info.key, server_info.iv, "SCOREBOARD_BOT") self.comm.start() self.server = ScoreboardServerThread(self.scoreboard_conf.port) default_text = self.__genDefaultTable() self.server.updateScoreText(default_text) self.server.start() while(True): msg = self.comm.receive() assert(msg.type == "UPDATE_SCORES") team_off_scores,team_def_scores,service_status = msg.data assert(len(team_off_scores) == self.conf.numTeams()) assert(len(team_def_scores) == self.conf.numTeams()) assert(len(service_status) == self.conf.numTeams()) table_text = self.__genScoreTable(team_off_scores,team_def_scores,service_status) self.server.updateScoreText(table_text)
def run(self): self.__processConfig() server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient(server_info.host, server_info.port, server_info.key, server_info.iv, "USENIX_EXPLOIT_BOT") self.comm.start() while (True): msg = self.comm.receive() self.logger.debug("recvd msg: %s (%r)" % (msg.type, str(msg.data))) if (msg.type == "TERMINATE"): self.logger.info("Received TERM message from gameserver") break elif (msg.type == "EXECUTE_ROUND"): results = self.__executeExploits(msg.data) self.comm.send(BotMessage("USENIX_EXPLOIT_RESULTS", results)) else: assert (False), "Invalid msg type received" self.comm.kill()
def testTypes(self): msg = BotMessage("rev", ["Foo", "Bar"]) comm = BotCommClient("", 424242, self.key, self.iv, "ECHO") comm.start() comm.send(msg) rcv = comm.receive(True, 5) comm.kill() self.assert_(rcv.type == "rev") self.assert_(rcv.data == ["Bar", "Foo"])
def testBasicCommRequest(self): req = BotMessage("req1", ["Foo", "Bar"], True) comm = BotCommClient("", 424242, self.key, self.iv, "ECHO") comm.start() rcv = comm.request(req, "req_result1", 1.0) comm.kill() self.assert_(rcv.type == "req_result1") self.assert_(rcv.data == ["Foo", "Bar"])
def testManyMessage(self): comm = BotCommClient("", 424242, self.key, self.iv, "ECHO") comm.start() for i in range(0, 100): msg = BotMessage("norm", ["Test_%d" % i]) comm.send(msg) for i in range(0, 100): rcv = comm.receive(True, 1) self.assert_(rcv.data == ["Test_%d" % i]) comm.kill()
def testMultiMessage(self): m1 = BotMessage("norm", ["Foo", "Bar"]) m2 = BotMessage("rev", ["Foo", "Foo"]) comm = BotCommClient("", 424242, self.key, self.iv, "ECHO") comm.start() comm.send(m1) comm.send(m2) r1 = comm.receive(True, 1) r2 = comm.receive(True, 1) comm.kill() self.assert_(r1.data == ["Foo", "Bar"]) self.assert_(r2.data == ["Foo", "Foo"])
def testServerStatePassing(self): foo = BotCommClient("", 424242, self.key, self.iv, "FOO") bar = BotCommClient("", 424242, self.key, self.iv, "BAR") echo = BotCommClient("", 424242, self.key, self.iv, "ECHO") foo.start() bar.start() echo.start() m1 = BotMessage("foo", "A foo message") m2 = BotMessage("norm", ["Foo", "Bar"]) for i in range(3): foo.send(m1) echo.send(m2) r1 = echo.receive(True, 1) r2 = bar.receive(True, 1) self.assert_(r1.data == ["Foo", "Bar"]) self.assert_(r2.data == "Got Foo?") foo.kill() bar.kill() echo.kill()
def run(self): self.scheduler = ServiceTaskScheduler(self.conf, self.init) try: self.logger.info("=== Starting ===") server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient(server_info.host, server_info.port, server_info.key, server_info.iv, "SERVICE_BOT") self.comm.start() running = True while (running): msg = self.comm.receive() self.logger.debug("recvd msg: %s (%r)" % (msg.type, str(msg.data))) if (msg.type == "EXECUTE_ROUND"): round = msg.data self.logger.info("=== Service Round(%d) Starting ===" % round) results = self.scheduler.execute(round) result_msg = self.__parseResults(round, results) self.comm.send(result_msg) self.logger.debug("Results: %r" % str(result_msg.data)) self.logger.info("=== Service Round(%d) Ending ===" % round) elif (msg.type == "TERMINATE"): self.logger.info("Received TERM message from gameserver") running = False else: self.logger.error("Unknown message: %s %s" % (msg.type, str(msg.data))) assert (False) except KeyboardInterrupt: self.logger.warn("Servicebot caught Keyboard Interrupt!") finally: #cleanup self.logger.info("Terminating...") # FIXME - What is this comment for? print "WTF", self.scheduler self.scheduler.quit() self.comm.kill() self.logger.info("Terminated...")
def run(self): self.attack_manager.start() server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient(server_info.host, server_info.port, server_info.key, server_info.iv, "ATTACK_BOT") self.comm.start() if (self.auto_restart == True): self.logger.info("Starting (AUTO Logic)") self.__mainLoopAuto() else: self.logger.info("Starting (WAIT Logic)") self.__mainLoopWait()
def run(self): self.cmd_q = Queue.Queue() server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient(server_info.host, server_info.port, server_info.key, server_info.iv, "USENIX_REPORT_BOT") self.comm.start() report_thread = UsenixReportServerThread(self, self.port) report_thread.setDaemon(True) report_thread.start() while (True): msg = self.comm.receive(False) if (msg != None): if (msg.type == "TERMINATE"): break try: cmd, q = self.cmd_q.get(True, 1) except Queue.Empty: continue if (cmd == "SLA_REQ"): self.comm.send(BotMessage("REQUEST_SLA", None)) msg = self.comm.receive() if (msg.type == "TERMINATE"): break elif (msg.type == "REQUEST_SLA_RESULT"): q.put(msg.data) elif (cmd == "SRV_REQ"): self.comm.send(BotMessage("REQUEST_REPORT", None)) msg = self.comm.receive() if (msg.type == "TERMINATE"): break elif (msg.type == "REQUEST_REPORT_RESULT"): q.put(msg.data) self.comm.kill()
def run(self): server_info = self.conf.getGameStateServerInfo() self.comm = BotCommClient(server_info.host, server_info.port, server_info.key, server_info.iv, "ATTACK_WEB_BOT") self.comm.start() self.webserver = WebserverThread(self) self.webserver.start() while (True): cmd, thread_q = self.cmd_q.get() if (cmd == "LIST_EXPLOITS"): msg = self.comm.request(BotMessage("LIST_EXPLOITS", None), 5) assert (msg.type == "LIST_EXPLOITS_RESULT") thread_q.put(msg.data) elif (cmd == "GET_FLAG_STATS"): msg = self.comm.request(BotMessage("GET_FLAG_STATS", None), 5) if (msg != None): assert (msg.type == "GET_FLAG_STATS_RESULT") thread_q.put(msg.data) thread_q.put(None) elif (cmd.startswith("GET_LOG:")): (exploit, lines) = cmd[8:].split("|") msg = self.comm.request(BotMessage(cmd, (exploit, lines)), 5) thread_q.put(msg.data) elif (cmd.startswith("GET_EXPLOIT:")): exploit = cmd[12:] msg = self.comm.request(BotMessage(cmd, (exploit, )), 5) thread_q.put(msg.data) elif (cmd.startswith("TOGGLE_EXPLOIT:")): self.comm.send(BotMessage(cmd, None)) msg = self.comm.getPendingMessages() if (msg != None): self.logger.error("Unexpected message: %r %r" % (msg.type, msg.data)) self.webserver.join()
def testCommRequestExtraMessage(self): req = BotMessage("req2", ["Foo", "Bar"], True) comm = BotCommClient("", 424242, self.key, self.iv, "ECHO") comm.start() for i in range(0, 50): msg = BotMessage("norm", ["Test_%d" % i]) comm.send(msg) for i in xrange(5): rcv = comm.request(req, "req_result2", 1.0) self.assertEquals(rcv.type, "req_result2") self.assertEquals(rcv.data, ["Foo", "Bar"]) for i in range(0, 50): rcv = comm.receive(True, 1) self.assert_(rcv.data == ["Test_%d" % i]) for i in xrange(5): xtra = comm.receive(True, 1) self.assert_(xtra != None) self.assertEquals(xtra.data, i + 1) comm.kill()