#!/usr/bin/env python3 import http.server import socketserver import socket import threading import webbrowser from datetime import datetime def get_local_ip(): """Get the local IPv4 address""" try: with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect(("8.8.8.8", 80)) local_ip = s.getsockname()[0] return local_ip except Exception: return "127.0.0.1" def start_server(port=8000): """Start HTTP server on specified port""" local_ip = get_local_ip() print(f"Starting HTTP server...") print(f"Local IPv4 address: {local_ip}") print(f"Server running on:") print(f" Local: http://localhost:{port}") print(f" Network: http://{local_ip}:{port}") print(f"Started at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print(f"\nPress Ctrl+C to stop the server") print("-" * 50) class CustomHandler(http.server.SimpleHTTPRequestHandler): def log_message(self, format, *args): print(f"[{datetime.now().strftime('%H:%M:%S')}] {format % args}") try: with socketserver.TCPServer(("", port), CustomHandler) as httpd: threading.Timer(1.0, lambda: webbrowser.open(f"http://localhost:{port}")).start() httpd.serve_forever() except KeyboardInterrupt: print(f"\n\nServer stopped at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") except OSError as e: if "Address already in use" in str(e): print(f"Error: Port {port} is already in use. Try a different port.") else: print(f"Error starting server: {e}") if __name__ == "__main__": import sys port = 8000 if len(sys.argv) > 1: try: port = int(sys.argv[1]) if port < 1 or port > 65535: raise ValueError("Port must be between 1 and 65535") except ValueError as e: print(f"Invalid port: {e}") print("Usage: python script.py [port]") sys.exit(1) start_server(port)