Advertisement
vadimpirog

Untitled

Jul 14th, 2022
948
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.25 KB | None | 0 0
  1. ```python
  2. #!/usr/bin/env python
  3.  
  4. import socket
  5. import threading
  6. import signal
  7. import sys
  8.  
  9. class Client(threading.Thread):
  10.     mutex = threading.RLock()
  11.     flags = {}
  12.  
  13.     def __init__(self, sock, *args, **kwargs):
  14.         super(Client, self).__init__(*args, **kwargs)
  15.         self.setDaemon(True)
  16.         self.sock = sock
  17.  
  18.     @classmethod
  19.     def add_flag(cls, flag_id, flag):
  20.         cls.lock()
  21.         cls.flags[flag_id] = flag
  22.         cls.unlock()
  23.  
  24.     @classmethod
  25.     def get_flag(cls, flag_id):
  26.         try:
  27.             return cls.flags[flag_id]
  28.         except KeyError:
  29.             ""
  30.  
  31.     @classmethod
  32.     def lock(cls):
  33.         cls.mutex.acquire()
  34.  
  35.     @classmethod
  36.     def unlock(cls):
  37.         cls.mutex.release()
  38.  
  39.     def get_line(self):
  40.         try:
  41.             msg = self.sock.recv(1000)
  42.             while "\n" not in msg:
  43.                 msg += self.sock.recv(1000)
  44.             msg = msg[:msg.find("\n")]
  45.             return msg
  46.         except Exception, ex:
  47.             return ""
  48.  
  49.     def store_flag(self):
  50.         global current_id
  51.         try:
  52.             self.sock.send("Your flag: ")
  53.             flag = self.get_line()
  54.             self.add_flag(current_id, flag)
  55.             self.sock.send("Flag successfully stored at id %d!\n" % current_id)
  56.             print "Got flag %s" % flag
  57.             current_id += 1
  58.         except Exception, ex:
  59.             print ex
  60.             self.sock.close()
  61.  
  62.     def print_flag(self):
  63.         try:
  64.             self.sock.send("Enter flag id: ")
  65.             flag_id = int(self.get_line())
  66.             flag = self.get_flag(flag_id)
  67.             if flag:
  68.                 self.sock.send("Here is your flag: %s!\n" % flag)
  69.             else:
  70.                 self.sock.send("No such flag!\n")
  71.         except ValueError:
  72.             self.sock.send("Id must be integer!\n")
  73.             self.print_flag()
  74.         except Exception, ex:
  75.             print ex
  76.             self.sock.close()
  77.  
  78.     def run(self):
  79.         self.sock.send("Hi there! Enter your command:\n")
  80.         self.sock.send("1. Store flag\n")
  81.         self.sock.send("2. Get flag\n")
  82.         self.sock.send("3. Exit\n")
  83.  
  84.         while sock:
  85.             try:
  86.                 self.sock.send("> ")
  87.                 msg = self.sock.recv(100500)
  88.                 cmd = msg.strip()
  89.             except:
  90.                 break
  91.             if cmd == "1":
  92.                 self.store_flag()
  93.             if cmd == "2":
  94.                 self.print_flag()
  95.             if cmd == "3":
  96.                 self.sock.send("Goodbye!\n")
  97.                 self.sock.close()
  98.         self.sock.close()
  99.  
  100. asock = None
  101. current_id = 0
  102. def shutdown_handler(signal_num, stack_frame):
  103.     global asock
  104.     asock.shutdown(socket.SHUT_RDWR)
  105.     asock.close()
  106.     asock = None
  107.     sys.exit(0)
  108.  
  109. if __name__ == "__main__":
  110.     signal.signal(signal.SIGINT, shutdown_handler)
  111.     current_id = 0
  112.     asock = socket.socket()
  113.     asock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  114.     asock.bind(("0.0.0.0", 1337))
  115.     asock.listen(100)
  116.     try:
  117.         while True:
  118.             sock = asock.accept()[0]
  119.             Client(sock).start()
  120.     except Exception, ex:
  121.         print ex
  122.     asock.shutdown(socket.SHUT_RDWR)
  123.     asock.close()
  124. ```
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement