#!/usr/bin/python from __future__ import print_function import datetime import socket import random, string import daemon, getopt, sys def myrandom(length): return ''.join(random.choice(string.lowercase) for i in range(length)) def server(): TCP_IP = '::' TCP_PORT = 1337 BUFFER_SIZE = 1024 s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) s.listen(1) print('DebugReport server listening on [{0}]:{1}'.format(TCP_IP, TCP_PORT)) while 1: conn, addr = s.accept() report_id = myrandom(10) filename = 'reports/' + datetime.date.today().strftime('%Y-%m-%d_') + report_id + '.gz' f = open(filename, 'w') while 1: data = conn.recv(BUFFER_SIZE) if not data: break f.write(data) # python will convert \n to os.linesep f.flush() f.close() # send reply to reportee conn.send(report_id) conn.close() print('new report "{0}" from [{2}]:{3} stored as "{1}"'.format(report_id, filename, addr[0], addr[1])) pass if __name__ == '__main__': try: opts, args = getopt.getopt(sys.argv[1:], "d", ["do-not-daemonize", ""]) except: print ('Unrecognized option') sys.exit(2) daemonize = True for opt, arg in opts: if opt in ("-d", "--do-not-daemonize"): daemonize = False else: assert False if daemonize == False: server() else: with daemon.DaemonContext(): server()