Las distracciones en internet, como las redes sociales o los sitios de noticias, pueden ser un gran obstáculo para trabajar o estudiar eficientemente. Afortunadamente, puedes tomar el control y bloquear temporalmente estos sitios directamente desde tu computadora.
Este artículo te mostrará cómo crear un script simple en Python para bloquear y desbloquear el acceso a cualquier sitio web. Utilizaremos un método poderoso y universal: la modificación del archivo hosts de tu sistema operativo.
¿Qué es el Archivo hosts?

Antes de sumergirnos en el código, es importante entender qué es el archivo hosts. En términos sencillos, es un archivo de texto plano que tu sistema operativo utiliza como una «libreta de direcciones» local para traducir nombres de dominio (como www.google.com) a direcciones IP.
Cuando intentas acceder a un sitio web, tu computadora revisa primero este archivo. Si encuentra una entrada para ese dominio, utiliza la dirección IP especificada ahí, ignorando por completo la consulta a los servidores DNS de internet.
Podemos aprovechar este comportamiento para nuestro propósito: si le decimos a nuestro archivo hosts que el dominio de un sitio web que queremos bloquear (por ejemplo, www.facebook.com) corresponde a la dirección IP de nuestra propia computadora (127.0.0.1), cualquier intento de acceder a ese sitio será redirigido a la nada, bloqueando efectivamente el acceso.
Ubicación del Archivo hosts
La ubicación de este archivo varía según el sistema operativo:
- En Windows:
C:\Windows\System32\drivers\etc\hosts - En Linux y macOS:
/etc/hosts
Nota importante: Modificar este archivo requiere permisos de administrador (en Windows) o de superusuario (root en Linux/macOS), ya que es un archivo protegido del sistema. Más adelante veremos cómo manejar esto.
Script de Python para Bloquear Sitios
Nuestro script en Python hará el trabajo sucio por nosotros: añadirá o quitará las líneas necesarias del archivo hosts para bloquear o desbloquear los sitios que definamos.
import platform
import os
# --- Configuración ---
# Dirección IP a la que se redirigirán los sitios bloqueados.
# 127.0.0.1 es la dirección de "localhost", es decir, tu propia computadora.
IP_REDIRECCION = "127.0.0.1"
# Lista de los sitios web que quieres bloquear.
# No es necesario incluir "www." al principio, aunque puedes añadir ambas versiones por si acaso.
SITIOS_A_BLOQUEAR = [
"facebook.com",
"www.facebook.com",
"twitter.com",
"www.twitter.com",
"instagram.com",
"www.instagram.com",
"youtube.com",
"www.youtube.com"
]
# --- Lógica del Script ---
def obtener_ruta_hosts():
"""
Determina la ruta del archivo hosts según el sistema operativo.
"""
sistema_operativo = platform.system()
if sistema_operativo == "Windows":
# La ruta en Windows. os.path.join se asegura de usar las barras correctas.
return os.path.join(os.environ["SystemRoot"], "System32", "drivers", "etc", "hosts")
elif sistema_operativo == "Linux" or sistema_operativo == "Darwin": # Darwin es el nombre para macOS
# La ruta en sistemas tipo Unix.
return "/etc/hosts"
else:
# Si no es Windows, Linux o macOS, no sabemos dónde está el archivo.
print(f"Sistema operativo '{sistema_operativo}' no soportado.")
return None
def bloquear_sitios(ruta_hosts):
"""
Añade las entradas de bloqueo al archivo hosts.
"""
try:
with open(ruta_hosts, 'a') as archivo: # 'a' es para añadir (append) al final del archivo.
archivo.write("\n# --- Sitios bloqueados por script de Python ---\n")
for sitio in SITIOS_A_BLOQUEAR:
linea_a_escribir = f"{IP_REDIRECCION}\t{sitio}\n"
archivo.write(linea_a_escribir)
print("¡Sitios bloqueados exitosamente!")
print("Nota: Puede que necesites limpiar la caché de tu navegador o DNS para que los cambios surtan efecto.")
except PermissionError:
print("Error de Permiso: No se pudo escribir en el archivo hosts.")
print("Por favor, ejecuta este script con permisos de administrador (o como superusuario con 'sudo').")
except Exception as e:
print(f"Ocurrió un error inesperado: {e}")
def desbloquear_sitios(ruta_hosts):
"""
Elimina las entradas de bloqueo del archivo hosts.
"""
try:
# Leemos todas las líneas del archivo
with open(ruta_hosts, 'r') as archivo:
lineas = archivo.readlines()
# Escribimos de nuevo el archivo, pero omitiendo las líneas de los sitios bloqueados
with open(ruta_hosts, 'w') as archivo: # 'w' es para escribir (write), borra el contenido anterior.
for linea in lineas:
# Si la línea no contiene ninguno de los sitios a bloquear, la escribimos.
if not any(sitio in linea for sitio in SITIOS_A_BLOQUEAR):
archivo.write(linea)
print("¡Sitios desbloqueados exitosamente!")
except PermissionError:
print("Error de Permiso: No se pudo escribir en el archivo hosts.")
print("Por favor, ejecuta este script con permisos de administrador (o como superusuario con 'sudo').")
except Exception as e:
print(f"Ocurrió un error inesperado: {e}")
# --- Ejecución Principal ---
if __name__ == "__main__":
ruta_hosts = obtener_ruta_hosts()
if ruta_hosts:
# Menú simple para el usuario
while True:
eleccion = input("¿Qué quieres hacer? (B)loquear, (D)esbloquear, (S)alir: ").lower()
if eleccion == 'b':
bloquear_sitios(ruta_hosts)
break
elif eleccion == 'd':
desbloquear_sitios(ruta_hosts)
break
elif eleccion == 's':
break
else:
print("Opción no válida. Inténtalo de nuevo.")
¿Cómo Ejecutar el Script con Permisos de Administrador?
Como mencionamos, este método no funcionará si no ejecutas el script con los permisos adecuados.
- En Windows:
- Abre el Símbolo del sistema (cmd) o PowerShell como Administrador. Para ello, busca «cmd» en el menú de inicio, haz clic derecho sobre él y selecciona «Ejecutar como administrador».
- Navega hasta la carpeta donde guardaste tu script de Python (usando el comando
cd ruta\a\tu\carpeta). - Ejecuta el script con el comando:
python tu_script.py
- En Linux o macOS:
- Abre una terminal.
- Navega hasta la carpeta donde guardaste el script (usando
cd ruta/a/tu/carpeta). - Ejecuta el script usando el comando
sudo:sudo python3 tu_script.py - El sistema te pedirá tu contraseña de usuario para conceder los permisos.
¿Es Posible Hacerlo Sin Permisos de Administrador?
La respuesta corta es: no, no es posible modificar el archivo hosts del sistema sin permisos de administrador. Y esto es por una buena razón. Si cualquier programa pudiera modificar este archivo, sería un riesgo de seguridad enorme, ya que un software malicioso podría redirigirte de la página de tu banco a un sitio falso para robar tus credenciales.
El método del archivo hosts es poderoso precisamente porque es una configuración a nivel de sistema operativo.
Alternativas que no requieren permisos de administrador:
Si no tienes acceso de administrador o prefieres un método menos invasivo, existen otras opciones:
- Extensiones de Navegador: Existen muchas extensiones para Chrome, Firefox, etc., diseñadas para bloquear sitios web. Estas solo afectan al navegador donde están instaladas y no requieren permisos especiales.
- Software de Control Parental o Enfoque: Aplicaciones como Cold Turkey o Freedom están diseñadas para este propósito y ofrecen muchas más opciones, como bloqueos programados.
- Configuración de tu Router: Algunos routers permiten bloquear dominios a nivel de red, afectando a todos los dispositivos conectados a tu Wi-Fi.
Conclusión
Modificar el archivo hosts con un script de Python es una forma potente y educativa de tomar el control sobre tu entorno digital. Aunque requiere permisos elevados, te da un control total a nivel de sistema operativo. Es un excelente proyecto para entender más sobre cómo funciona tu computadora y para poner en práctica tus habilidades de programación en Python con una tarea real y útil.

Deja una respuesta