def run(): logging.basicConfig( format="%(asctime)s %(levelname) 7s %(module)s: %(message)s", level=logging.DEBUG) parser = argparse.ArgumentParser(description='Localtunnel server daemon') parser.add_argument('frontend_port', metavar='frontend_port', type=int, help='port to run public frontend', default=8000) parser.add_argument('backend_port', metavar='backend_port', type=int, help='port to run backend server', default=8001) parser.add_argument('-d', '--domainpart', type=int, help='domain part (from the right) to extract tunnel name') args = parser.parse_args() logging.info("starting frontend on {0}...".format(args.frontend_port)) logging.info("starting backend on {0}...".format(args.backend_port)) if args.domainpart: Tunnel.domain_part = args.domainpart Tunnel.backend_port = args.backend_port frontend = gevent.server.StreamServer( ('0.0.0.0', args.frontend_port), frontend_handler) backend = gevent.server.StreamServer( ('0.0.0.0', args.backend_port), backend_handler) try: Tunnel.schedule_cleanup() gevent.joinall(group([ gevent.spawn(frontend.serve_forever), gevent.spawn(backend.serve_forever), ])) except KeyboardInterrupt: pass
def run(): parser = argparse.ArgumentParser( description='Open a public HTTP tunnel to a local server') parser.add_argument('port', metavar='port', type=int, help='local port of server to tunnel to') parser.add_argument('-n', dest='name', metavar='name', default=str(uuid.uuid4()).split('-')[-1], help='name of the tunnel (default: randomly generate)') parser.add_argument('-c', dest='concurrency', type=int, metavar='concurrency', default=3, help='number of concurrent backend connections') parser.add_argument('-s', dest='host', metavar='address', default='v2.localtunnel.com', help='localtunnel server address (default: v2.localtunnel.com)') args = parser.parse_args() tunnel_data = { 'name': args.name, 'client': client_name(), 'init': True, } host = args.host.split(':') if len(host) == 1: backend_address = (host[0], discover_backend_port(host[0])) else: backend_address = (host[0], discover_backend_port(host[0], int(host[1]))) try: spawn_args = [client_connector, backend_address, args.port, tunnel_data] gevent.joinall(group([ gevent.spawn(*spawn_args) for n in range(args.concurrency) ])) except KeyboardInterrupt: pass
def run(): parser = argparse.ArgumentParser( description='Open a public HTTP tunnel to a local server') parser.add_argument('port', metavar='port', type=int, help='local port of server to tunnel to') parser.add_argument('-n', dest='name', metavar='name', default=str(uuid.uuid4()).split('-')[-1], help='name of the tunnel (default: randomly generate)') parser.add_argument('-c', dest='concurrency', type=int, metavar='concurrency', default=3, help='number of concurrent backend connections') parser.add_argument( '-s', dest='host', metavar='address', default='v2.localtunnel.com', help='localtunnel server address (default: v2.localtunnel.com)') args = parser.parse_args() tunnel_data = { 'name': args.name, 'client': client_name(), 'init': True, } host = args.host.split(':') if len(host) == 1: backend_address = (host[0], discover_backend_port(host[0])) else: backend_address = (host[0], discover_backend_port(host[0], int(host[1]))) try: spawn_args = [ client_connector, backend_address, args.port, tunnel_data ] gevent.joinall( group([gevent.spawn(*spawn_args) for n in range(args.concurrency)])) except KeyboardInterrupt: pass
def run(): logging.basicConfig( format="%(asctime)s %(levelname) 7s %(module)s: %(message)s", level=logging.DEBUG) parser = argparse.ArgumentParser(description='Localtunnel server daemon') parser.add_argument('frontend_port', metavar='frontend_port', type=int, help='port to run public frontend', default=8000) parser.add_argument('backend_port', metavar='backend_port', type=int, help='port to run backend server', default=8001) parser.add_argument( '-d', '--domainpart', type=int, help='domain part (from the right) to extract tunnel name') args = parser.parse_args() logging.info("starting frontend on {0}...".format(args.frontend_port)) logging.info("starting backend on {0}...".format(args.backend_port)) if args.domainpart: Tunnel.domain_part = args.domainpart Tunnel.backend_port = args.backend_port frontend = gevent.server.StreamServer(('0.0.0.0', args.frontend_port), frontend_handler) backend = gevent.server.StreamServer(('0.0.0.0', args.backend_port), backend_handler) try: Tunnel.schedule_cleanup() gevent.joinall( group([ gevent.spawn(frontend.serve_forever), gevent.spawn(backend.serve_forever), ])) except KeyboardInterrupt: pass