|
|
- #!/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()
|