Crear un Servidor Web con una linea Python

Hoy tuve que enviar a atryx un fichero de codigo.
Como tenemos un servidor de Open Pastebin NG pude haber copiado el contenido del archivo en el pastebin y enviárselo, adjuntarlo a un correo, subirlo al servidor mediante FTP… Pero me vino a la mente un sencillo truco basado en python que serviría perfectamente para esta ocasión 🙂

Lo primero que tenemos que hacer es configurar nuestro router para que, cuando llegue una petición HTTP a nuestra IP, sepa lo que tiene que hacer.
Esta característica se suele llamar «Port Forwarding» o «Forwarding» a secas, y redireccionará el tráfico de un puerto concreto a la IP interna que le pongamos.
Puedes conocer tu IP interna con el comando:
$ ifconfig si te encuentras en GNU/Linux
ó
$ ipconfig si te encuentras en Windows
En mi caso, la IP de mi ordenador era 192.168.0.12 (seguramente tengas una ip muy similar).

Mi router está en la IP 192.168.0.1, así que puedo entrar con Firefox en su administración con su usuario y contraseña correspondientes…

En el apartado de Forwarding, establezco el puerto 80 para la IP de mi PC. Ten en cuenta que esto varia mucho de unos routers a otros, busca más información en la web sobre cómo se hace en el tuyo.

Ahora el router ya está redirigiendo las peticiones al puerto 80 a nuestra máquina. Si tenemos algún servidor web como Apache, sus carpetas públicas ya serán accesibles via internet, pero… ¿Y si no?
Aquí viene lo bueno: podemos utilizar el modulo SimpleHTTPServer de Python para crear un servidor temporal. Abrimos un terminal y nos dirigimos a la carpeta donde se encuentren los documentos, en mi caso es «Documentos/blog»; y allí ejecutamos la orden:
$ sudo python -m SimpleHTTPServer 80 donde 80 es el puerto donde actuará. Se nos preguntará nuestra contraseña…

Y ya tenemos el servidor corriendo!
Para acceder a él, tendremos que teclear en el navegador nuestra IP externa. Puedes consultarla en ShowMyIP.
En mi caso, el directorio donde lo lancé contiene un archivo hola.txt. Esto sería suficiente para que alguien que conociese nuestra IP pudiese acceder a él y descargárselo a su PC.

Pero tambien podemos crear algo más elaborado, como una pagina web HTML completa. Yo he hecho un index.html para la ocasión…

Para cerrar el servidor, basta con cortar el proceso con CTRL+C.

Por seguridad, he ocultado mi IP externa. Algunos consejos básicos serían:
1. Ojo con las carpetas en las que abres el servidor. Todos sus subdirectorios serán accesibles.
2. Si utilizas esto durante un periodo prolongado de tiempo, deberías considerar instalar un servidor más potente como Apache y proteger los directorios con .htaccess
3. Si tienes una IP estática (hoy en día no es muy habitual, pero sigue habiéndolas) podrías apuntar un dominio a tu IP de forma permanente para que fuese más facil acceder, pero en ese caso estarías mucho más expuesto.
4. No descartes la opción de instalar un firewall si te encuentras en Windows o configurar bien las reglas del firewall de Linux (iptables).
5. Usa el sentido común: si solo quieres compartir unos pocos archivos con algún amigo o familiar, sencillamente cierra el servidor cuando los haya descargado.

8 comentarios en “Crear un Servidor Web con una linea Python

    1. Hola Fernando, fíjate bien en cómo funciona esto.

      El HTML no lo «incrustas» en el servidor. Debes tener los archivos HTML en un directorio de tu ordenador y luego, abrir el terminal, navegar hasta ese directorio y ahí introducir el comando.

      Te dejo un ejemplo. Abrimos el terminal y vamos tecleando lo siguiente
      $ cd Documentos
      $ cd MiWeb
      $ sudo python -m SimpleHTTPServer 80

      Espero haberte aclarado la duda. Un saludo!

      Me gusta

  1. Hola!
    Acabo de leer tu tutorial, y me surge una duda que quizás me puedas ayudar:
    Hago todos los pasos, pero no consigo acceder a mi servidor desde fuera de la red.
    Es decir, desde localhost:8080 puedo ver el index.html correctamente, pero desde 83.5.45.27:8080 (la ip externa, no es ésta, pero es parecida) no me carga nada.
    He abierto el puerto en el router, pero nada. Y no tengo firewall. Utilizo ubuntu 12.04

    Gracias!!

    Por cierto, tecleando la ip externa sin puerto, me abre la página para entrar al router. Como si entrara en la puerta de enlace internta (192.168.1.1)

    Me gusta

    1. Hola Pablo,

      A mi también me ha sucedido esto hace muy poco y aun lo estoy investigando. De todas formas, si has abierto el puerto, la página si que será accesible desde el exterior.
      Me imagino que tiene que ver con las configuraciones de los routers, pero aún no he podido aclarar la razón.

      un saludo!

      Me gusta

Replica a Emilio Cancelar la respuesta

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.