website_blocker.py
#!/usr/bin/env python3 """ Website Blocker — Block distracting websites by modifying the hosts file. This script adds entries to your system's hosts file to redirect specified websites to 127.0.0.1 (localhost), effectively blocking them. Usage: sudo python website_blocker.py block # Block all sites sudo python website_blocker.py unblock # Unblock all sites python website_blocker.py status # Show blocked sites """ import sys import platform # ============================================================ # CONFIGURATION — edit this list to block different sites # ============================================================ SITES_TO_BLOCK = [ # Social media "www.facebook.com", "facebook.com", "www.twitter.com", "twitter.com", "www.instagram.com", "instagram.com", "www.reddit.com", "reddit.com", # Video / entertainment "www.youtube.com", "youtube.com", "www.tiktok.com", "tiktok.com", "www.twitch.tv", "twitch.tv", ] REDIRECT_IP = "127.0.0.1" # Markers keep our entries isolated so we never touch # other entries in the hosts file. START_MARKER = "# >>> WEBSITE BLOCKER START >>>" END_MARKER = "# <<< WEBSITE BLOCKER END <<<" # ============================================================ # Cross‑platform hosts path # ============================================================ def get_hosts_path(): """Return the absolute path to the hosts file for this OS.""" system = platform.system() if system == "Windows": return r"C:\Windows\System32\drivers\etc\hosts" # macOS and Linux both use /etc/hosts return "/etc/hosts" HOSTS_PATH = get_hosts_path() # ============================================================ # Core operations # ============================================================ def block_websites(): """Write (or refresh) the blocker block into the hosts file.""" # Read the current file with open(HOSTS_PATH, "r") as fh: content = fh.read() # Strip any previous block so we start fresh if START_MARKER in content: content = content.split(START_MARKER)[0].rstrip("\n") + "\n" # Build the block block_lines = [START_MARKER + "\n"] for site in SITES_TO_BLOCK: block_lines.append(f"{REDIRECT_IP}\t{site}\n") block_lines.append(END_MARKER + "\n") # Write everything back with open(HOSTS_PATH, "w") as fh: fh.write(content) fh.writelines(block_lines) unique_sites = len(SITES_TO_BLOCK) // 2 print(f"[+] Blocked {unique_sites} websites " f"({len(SITES_TO_BLOCK)} URLs) → {REDIRECT_IP}") def unblock_websites(): """Remove the blocker block from the hosts file.""" with open(HOSTS_PATH, "r") as fh: content = fh.read() if START_MARKER not in content: print("[*] No websites are currently blocked.") return # Cut out the marked section before = content.split(START_MARKER)[0].rstrip("\n") after = content.split(END_MARKER)[-1] new_content = before + "\n" + after.lstrip("\n") with open(HOSTS_PATH, "w") as fh: fh.write(new_content) print("[+] All websites unblocked. Focus mode off.") def show_status(): """Print which websites are currently blocked.""" with open(HOSTS_PATH, "r") as fh: content = fh.read() if START_MARKER not in content: print("[*] No websites are currently blocked.") return block = content.split(START_MARKER)[1].split(END_MARKER)[0] sites = [line.strip() for line in block.split("\n") if line.strip() and not line.strip().startswith("#")] print(f"[*] {len(sites)} URLs currently blocked → {REDIRECT_IP}:") for site in sites: print(f" {site.split()[-1]}") # ============================================================ # CLI entry point # ============================================================ if __name__ == "__main__": if len(sys.argv) < 2: print("Website Blocker — block distracting sites via /etc/hosts\n") print("Usage:") print(" sudo python website_blocker.py block") print(" sudo python website_blocker.py unblock") print(" python website_blocker.py status") sys.exit(1) command = sys.argv[1].lower() if command == "block": block_websites() elif command == "unblock": unblock_websites() elif command == "status": show_status() else: print(f"[!] Unknown command: {command}") print("Valid commands: block, unblock, status") sys.exit(1)Join 50,000+ Python Programmers & Enthusiasts like you!
Email address Subscribe This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.Ethical Hacking with Python EBook
Web Security with Python EBook
Cryptography with Python EBook
Practical Python PDF Processing EBook
Real-Time Traffic Monitoring System with YOLOv9 eBook
Mastering YOLO: Build an Automatic Number Plate Recognition System
© 2026 The Python Code. All rights reserved.