rendered paste body#!/usr/bin/env pythonimport socketimport threadingfrom base64 import b64encodefrom time import localtimefrom time import strftimeclass server: def __init__(self, port): self.port = port self.input = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.input.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.input.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.input.bind(('', port)) def read(self, length): return self.input.recvfrom(length) def respond(self, data, target, port): self.input.sendto(data, (target, port))class client: def __init__(self, port): self.port = port self.out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.out.bind(('', port)) def write(self, data, target, port): self.out.sendto(data, (target, port)) return self.out.recvfrom(8192)def ehandle(reply): if(reply[0].startswith('NAK:')): error = reply[0].replace('NAK:','',1) if(error == 'UNKNWN\n'): return 'Error: We tried to send data the recipient '+reply[1][0]+' doesn\'t understand' elif(error == 'CRPTXT:MALFRM\n'): return 'Error: the encrypted data we sent couldn\'t be decrypted' else: return 'Error: An unknown error ocurred' elif(reply[0].startswith('ACK:')): message = reply[0].replace('ACK:','',1) if(message == 'PLNTXT\n'): return 'OK: successfully sent plaintext' elif(message == 'CRPTXT\n'): return 'OK: successfully sent encrypted text' else: return 'Warning: data successfully sent, but received strange reply' else: return 'Error: unknown reply'def listen(s): while 1: message, address = s.read(8192) ts = '\n'+strftime('(%H:%M:%S)',localtime()) if(message.startswith('PLNTXT:')): text = message.replace('PLNTXT:', '', 1) print ts, "("+address[0]+"):", text, s.respond("ACK:PLNTXT\n", address[0], address[1]) elif(message.startswith('CRPTXT:')): try: text = b64decode(message.replace('CRPTXT:', '', 1)) print ts, "("+address[0]+"):", text s.respond("ACK:CRPTXT\n", address[0], address[1]) except: print ts, address[0], "sent malformed encrypted data." s.respond("NAK:CRPTXT:MALFRM\n", address[0], address[1]) else: print ts, address[0], "sent an unknown request." s.respond("NAK:UNKNWN\n", address[0], address[1])def messenge(s): remotehost = socket.gethostbyname(raw_input('connect to: ')) while 1: print ehandle(s.write('PLNTXT:'+raw_input('message: ')+'\n', remotehost, 31337))insock = server(31337)outsock = client(31338)st = threading.Thread(target=listen, args=(insock,))st.start()ct = threading.Thread(target=messenge, args=(outsock,))ct.start()