#!/usr/bin/python2 import time import socket import requests import threading from colorama import Fore, Back, Style TIMEOUT = 0.1 SLEEP = 0 BUFF = 8192 HOST = "192.168.1.2" TEAM_NAME = [ "RevID.CTF", "Youtube", "Flag Earth", "UMN", "Pengen Mandi", "Gundar Cysec", "gaboet berfaedah", "Fake Team", "UNAIR FT SHL", "Jangan Dibaca tJOY", ] CHALLENGE = [ "MTP - Crypto", "Sophisticated Calculator - Pwn", "My Secure Web App - Web", "Save HTML Design - Web", "Name Generator - Pwn", "Web Image Search - Web", ] EXPECTED_ANSWER = { 1: " ! +-+-+-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+\n ^ |S|l|a|s|h|R|o|o|t| |C|T|F| |3|.|0|\n / \\ +-+-+-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+\n /___\\\n |= =| +-+-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+\n | B | |M|i|s|s|i|o|n| |T|o| |D|y|s|n|o|m|i|a|\n | A | +-+-+-+-+-+-+-+ +-+-+ +-+-+-+-+-+-+-+-+\n | L |\n /| I |\\ [G] Get Session\n / |##!##| \\ [S] Set Session\n| / ^ | ^ \\ | [T] Generate Token\n|/ (( | )) \\| [L] Let's Go\n (( )) [C] Cancel\n ( )\n .\n \n", 2: "Welcome to Online Calculator v3.1\n\nOperator supported: + - * /\nex: 2 + 2\nex: 2 + a //'a' to use last results\n\n------------------------------------\n>", 5: ">> Your Nick: ", } LOCK = threading.Lock() class Challenge(object): down = 0 stat = 1 def __init__(self, challPort, challName): self.name = challName self.port = challPort def set_down(self): if self.stat: self.stat = 0 self.down = time.time() def set_up(self): self.stat = 1 self.down = 0 def get_downtime(self): return int(round(time.time() - self.down)) class Team(object): def __init__(self, port, teamName): self.name = teamName self.port = port self.challengeList = [Challenge(index, challName) for index, challName in enumerate(CHALLENGE, start=1)] def main(): teamList = [Team(port, teamName) for port, teamName in enumerate(TEAM_NAME, start=1)] while True: for team in teamList: for chall in team.challengeList: #threading._start_new_thread(test_challenge, (team, chall)) test_challenge(team, chall) time.sleep(SLEEP) def success(team, chall): msg = now() + "[6" + str(team.port).zfill(2) + str(chall.port).zfill(2) + \ "] " + team.name + " " + chall.name + " is UP" if not chall.stat: msg += " again total down time = " + str(chall.get_downtime()) + "s" with open("new_check.log", "a") as log: log.write(msg + "\n") chall.set_up() LOCK.acquire() print(Fore.GREEN + msg + Style.RESET_ALL) LOCK.release() def failed(team, chall): chall.set_down() msg = now() + "[6" + str(team.port).zfill(2) + str(chall.port).zfill(2) + "] " + \ team.name + " " + chall.name + " is DOWN for " + \ str(chall.get_downtime()) + "s" with open("new_check.log", "a") as log: log.write(msg + "\n") LOCK.acquire() print(Fore.RED + msg + Style.RESET_ALL) LOCK.release() def now(): return time.strftime("%X ") def test_challenge(team, chall): port = 60000+team.port*100+chall.port ''' if chall.port == 3: return ''' if chall.name[-3:] == "Web": chk = test_web(port) else: chk = test_socket(port) if chk: success(team, chall) else: failed(team, chall) def test_socket(port): try: socket.setdefaulttimeout(TIMEOUT) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, port)) r = "" t = EXPECTED_ANSWER[port % 100] chk = False while not chk: r += s.recv(BUFF) chk = r == t return chk except KeyboardInterrupt: exit(0) except: return False def test_web(port): try: r = requests.get("http://"+HOST+":"+str(port), timeout=TIMEOUT) chk1 = True # r.text == EXPECTED_ANSWER[get_chall(port)] chk2 = r.status_code == requests.codes.ok if chk1 and chk2: return True else: return False except KeyboardInterrupt: exit(0) except: return False if __name__ == '__main__': main()