From b0df2510a4d383e3d6048064035fc4153d69aba2 Mon Sep 17 00:00:00 2001 From: myitinos Date: Fri, 24 Aug 2018 23:34:07 +0800 Subject: [PATCH] first commit --- new_check.py | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 new_check.py diff --git a/new_check.py b/new_check.py new file mode 100644 index 0000000..f783ab8 --- /dev/null +++ b/new_check.py @@ -0,0 +1,174 @@ +#!/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()