Ejemplo n.º 1
0
def main():
    if len(sys.argv) < 2:
        print("usage: wemoUploadExec <target ip address> <file> <parameters>")
        exit(1)

    targetIp = sys.argv[1]
    targetPort = 49153

    sourceIp = getLocalIp(targetIp, targetPort)
    sourcePort = 8080

    webApp = Bottle()

    webServer = BottleServer(webApp, sourceIp, sourcePort)

    run(targetIp, webServer)

    webServer.stop()
Ejemplo n.º 2
0
def main():
    if len(sys.argv) < 2:
        print("usage: wemotool <target ip address>")
        exit(1)

    targetIp = sys.argv[1];
    targetPort = 49153

    sourceIp = getLocalIp(targetIp, targetPort);
    sourcePort = 8080

    server = BottleServer(rootApp, sourceIp, sourcePort)

    retry = True

    while retry:
        retry = False

        wemoTelnet.run(targetIp, server)

        print("telnet ready on " + targetIp + ":23")

        tn = telnetlib.Telnet(targetIp, 23, timeout=1)
        tn.read_until("# ")

        fwversion = tnRegex(tn,"cat /etc/ver.txt","^(WeMo.*)$")
        print("fw version: "+fwversion)

        bootstate = tnRegex(tn, "uboot_env getenv bootstate", "^getenv : bootstate with ([0-9]).*$")
        print("bootstate: " + bootstate)

        check_boot = tnRegex(tn, "uboot_env getenv check_boot", "^getenv : check_boot with ([0-9]).*$")
        print("check_boot: " + check_boot)

        if bootstate=="0" or bootstate == "1":
            print("bootstate is "+bootstate+", running from slot 1")
            print("changing boot slot and rebooting")

            tnExec(tn,"uboot_env setenv bootstate 2")
            tnExec(tn,"uboot_env setenv check_boot 0")
            tn.write("reboot\n")

            print("waiting for wemo to reboot")
            while isOpen(targetIp,targetPort):
                sys.stdout.write(".")
                time.sleep(0.5)

            print("booting up...")

            while not isOpen(targetIp,targetPort):
                sys.stdout.write(".")
                time.sleep(0.5)

            print("wemo rebooted, starting over...")
            retry = True
        elif bootstate=="2" or bootstate == "3":
            print("bootstate is " + bootstate + ", running from slot 2")
            print("preparing firmware update")

            print tnExec(tn,"wget -O /tmp/image http://"+server.host+":"+str(server.port)+"/image")
            print("writing firmware update")
            print tnExec(tn,"fwupgrade image")

            bootstate = tnRegex(tn, "uboot_env getenv bootstate", "^getenv : bootstate with ([0-9]).*$")
            print("bootstate: " + bootstate)

            check_boot = tnRegex(tn, "uboot_env getenv check_boot", "^getenv : check_boot with ([0-9]).*$")
            print("check_boot: " + check_boot)

            print("rebooting")
            time.sleep(2)
            tn.write("reboot\n")
            time.sleep(2)


        tn.close()
        print("telnet closed")


    server.stop()
Ejemplo n.º 3
0
 def __init__(self, db_col, cfg_file="scorebotcfg.json", obj_id=None):
     threading.Thread.__init__(self)
     self.col = db_col
     self.flag_queue = Queue.Queue()
     self.flag_answer_queue = Queue.Queue()
     self.msg_queue = Queue.Queue()
     self.logger_obj = Logger("scorebot")
     self.oqueue = Queue.Queue()
     self.equeue = Queue.Queue()
     self.logger = ThreadedLogger("ctfgame.log", self.oqueue, self.equeue)
     self.logger.start()
     self.pp = pprint.PrettyPrinter(indent=2)
     self.blues_queues = {}
     self.teams_rounds = {}
     # todo - fix why this isn't actually the first round!
     self.this_round = 1
     self.interval = 120
     self.inround = False
     self.go_time = time.time()
     self.save_time = time.time()
     self.save_interval = 10
     if obj_id:
         bson_id = ObjectId(obj_id)
         self.obj_id = bson_id
         json_obj = self.col.find_one(self.obj_id)
         if globalvars.debug:
             self.pp.pprint(json_obj)
         game = jaraco.modb.decode(decode_dict(json_obj))
         if "config" in game:
             self.flag_store = FlagStore(self.logger_obj, self.flag_queue,
                                         self.flag_answer_queue)
             self.json_cfg_obj = JsonConfig(cfg_file, self.flag_store)
             (self.blue_teams,
              self.injects) = self.json_cfg_obj.process(game["config"])
         else:
             raise Exception("No config section in restore object!")
         self.message_store = MessageStore(self.logger_obj, self.msg_queue)
         self.flag_server = FlagServer(self.logger_obj, self.flag_queue,
                                       self.flag_answer_queue,
                                       self.msg_queue)
         for team in self.blue_teams.keys():
             self.blue_teams[team].add_queue(self.flag_queue)
         if "scores" in game:
             scores = game["scores"]
             if "blueteams" in scores:
                 for team in self.blue_teams:
                     if team in scores["blueteams"]:
                         blue_score = scores["blueteams"][team]
                         self.blue_teams[team].set_scores(blue_score)
                     else:
                         raise Exception(
                             "Missing scores for team %s in restore object!"
                             % team)
             else:
                 raise Exception(
                     "Missing blueteams score block in restore object!" %
                     team)
         else:
             raise Exception("Missing scores block in restore object!" %
                             team)
         if "flags" in game:
             all_flags = game["flags"]
             self.flag_store.restore(all_flags)
     else:
         self.obj_id = obj_id
         self.flag_store = FlagStore(self.logger_obj, self.flag_queue,
                                     self.flag_answer_queue)
         self.json_cfg_obj = JsonConfig(cfg_file, self.flag_store)
         (self.blue_teams, self.injects) = self.json_cfg_obj.process()
         self.message_store = MessageStore(self.logger_obj, self.msg_queue)
         self.flag_server = FlagServer(self.logger_obj, self.flag_queue,
                                       self.flag_answer_queue,
                                       self.msg_queue)
         for team in self.blue_teams.keys():
             self.blue_teams[team].add_queue(self.flag_queue)
             blue_queue = Queue.Queue()
             self.blues_queues[team] = blue_queue
             self.blue_teams[team].set_queue(blue_queue)
             self.teams_rounds[team] = True
     self.movies = Movies(self.logger_obj)
     #self.movies.set_movie()
     self.bottle_server = BottleServer(self.blue_teams, self.flag_store,
                                       self.message_store, self.movies,
                                       '0.0.0.0', 8090)