Spaces:
Paused
Paused
| import argparse | |
| import asyncio | |
| import logging | |
| import multiprocessing | |
| import sys | |
| from pathlib import Path | |
| from stream.proxy_server import ProxyServer | |
| def parse_args(): | |
| """Parse command line arguments""" | |
| parser = argparse.ArgumentParser(description='HTTPS Proxy Server with SSL Inspection') | |
| parser.add_argument('--host', default='127.0.0.1', help='Host to bind the proxy server') | |
| parser.add_argument('--port', type=int, default=3120, help='Port to bind the proxy server') | |
| parser.add_argument('--domains', nargs='+', default=['*.google.com'], | |
| help='List of domain patterns to intercept (regex)') | |
| parser.add_argument('--proxy', help='Upstream proxy URL (e.g., http://user:pass@host:port)') | |
| return parser.parse_args() | |
| async def main(): | |
| """Main entry point""" | |
| args = parse_args() | |
| # Set up logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.StreamHandler() | |
| ] | |
| ) | |
| logger = logging.getLogger('main') | |
| # Create certs directory | |
| cert_dir = Path('certs') | |
| cert_dir.mkdir(exist_ok=True) | |
| # Print startup information | |
| logger.info(f"Starting proxy server on {args.host}:{args.port}") | |
| logger.info(f"Intercepting domains: {args.domains}") | |
| if args.proxy: | |
| logger.info(f"Using upstream proxy: {args.proxy}") | |
| # Create and start the proxy server | |
| proxy_server = ProxyServer( | |
| host=args.host, | |
| port=args.port, | |
| intercept_domains=args.domains, | |
| upstream_proxy=args.proxy, | |
| queue=None, | |
| ) | |
| try: | |
| await proxy_server.start() | |
| except KeyboardInterrupt: | |
| logger.info("Shutting down proxy server") | |
| except Exception as e: | |
| logger.error(f"Error starting proxy server: {e}") | |
| sys.exit(1) | |
| async def builtin(queue: multiprocessing.Queue = None, port=None, proxy=None): | |
| # Set up logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.StreamHandler() | |
| ] | |
| ) | |
| logger = logging.getLogger('main') | |
| # Create certs directory | |
| cert_dir = Path('certs') | |
| cert_dir.mkdir(exist_ok=True) | |
| if port is None: | |
| port = 3120 | |
| # Create and start the proxy server | |
| proxy_server = ProxyServer( | |
| host="127.0.0.1", | |
| port=port, | |
| intercept_domains=['*.google.com'], | |
| upstream_proxy=proxy, | |
| queue=queue, | |
| ) | |
| try: | |
| await proxy_server.start() | |
| except KeyboardInterrupt: | |
| logger.info("Shutting down proxy server") | |
| except Exception as e: | |
| logger.error(f"Error starting proxy server: {e}") | |
| sys.exit(1) | |
| if __name__ == '__main__': | |
| asyncio.run(main()) | |