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()
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()
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)