Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.59 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import socket
  4. import threading
  5. import signal
  6. import re
  7. import time
  8.  
  9. keys = [('o', '32894623d6789efa', 'a24c0b16a2b64235'),
  10.         ('e', 'a24c0b16a2b64235', '1ff39f02f6ffb05c'),
  11.         ('o', '1ff39f02f6ffb05c', '2ed6ed3e1078937b'),
  12.         ('e', '2ed6ed3e1078937b', 'a8eff9cc3d39b999'),
  13.         ('o', 'a8eff9cc3d39b999', 'd5071099f8fe8596'),
  14.         ('e', 'd5071099f8fe8596', '32894623d6789efa')];
  15.  
  16. keynum = 0
  17. def loadKeys(uip, umcast, ulogin, upasswd):
  18.     print "Request keys, ulogin = " + ulogin
  19.     global keynum
  20.     if ulogin == "getstream":
  21.         global keynum
  22.         keynum += 1
  23.         if keynum == len(keys):
  24.             keynum = 0
  25.     return keys[keynum]
  26. # def loadKeys(uip, umcast, ulogin, upasswd)
  27.  
  28. def checkLoginPasswd(ulogin, upasswd):
  29.     if(ulogin == 'getstream') : return 0
  30.     elif(ulogin == 'user1'):
  31.         if(upasswd != 'pass1') : return 202
  32.     else : return 201
  33.     return 0
  34.  
  35. class CSThread(threading.Thread):
  36.     def __init__(self, channel, details):
  37.         self.channel = channel
  38.         self.details = details
  39.         threading.Thread.__init__(self)
  40.  
  41.     def run(self):
  42.         umcast = '0'
  43.         ulogin = '0'
  44.         upasswd = '0'
  45.         query = self.channel.recv(256)
  46.         aquery = re.findall(r"\w+\=[\w\.]+", query)
  47.         for varval in aquery:
  48.             avarval = varval.split('=')
  49.             if avarval[0] == 'mcast': umcast = avarval[1]
  50.             elif avarval[0] == 'login': ulogin = avarval[1]
  51.             elif avarval[0] == 'passwd': upasswd = avarval[1]
  52.         (parity, key1, key2) = loadKeys(self.details[0], umcast, ulogin, upasswd)
  53.  
  54.         retCode = checkLoginPasswd(ulogin, upasswd)
  55.         msgString = ''
  56.         if(retCode == 0):
  57.             msgString = 'biss:' + parity + ':' + key1 + ':' + key2
  58.         else:
  59.             msgString = 'error:' + str(retCode)
  60.  
  61.         self.channel.send('HTTP/1.1 200 OK\r\n'
  62.                           'Server: keysrv v.0.0\r\n'
  63.                           'Content-Type: text/plain charset=utf-8\r\n\r\n'
  64.                           + msgString + '\n')
  65. # if parity == 'e':
  66. #     key1 is even
  67. #     key2 is odd
  68.         self.channel.close()
  69. # class CSThread
  70.  
  71.  
  72. def handlerQuit(signum, frame):
  73.     print '\rBye!'
  74.     exit(1)
  75.  
  76. # + main
  77. signal.signal(signal.SIGQUIT, handlerQuit)
  78. signal.signal(signal.SIGINT, handlerQuit)
  79.  
  80. srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  81. srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  82. srv.bind(('', 602))
  83. srv.listen(10)
  84.  
  85. while 1:
  86.     channel, details = srv.accept()
  87.     CSThread(channel, details).start()
  88. # - main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement