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()
Example #2
0
	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)
Example #3
0
	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)
Example #4
0
    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()
Example #10
0
    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...")
Example #11
0
    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()
Example #12
0
    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()
Example #13
0
    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()
Example #14
0
    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()