Tag Archive for ascii

ASCII Art en logs de servidor Web

Como estamos en vísperas del día de los Reyes Magos, hoy traemos una entrada divertida y que esperamos que os guste. Eso sí, como siempre, dadle buen uso. Vamos a insertar un poco de “arte” a modo de ASCII Art en los logs de un servidor Web. Mola, ¿no?

No es nada nuevo, de hecho la idea surge a raíz de un tweet de Mercè Molist donde se mostraba un mensaje que habían dejado en unos logs de un servidor. Me pareció bastante ingenioso, así que investigando un poco (es bastante simple como veréis a continuación) decidí replicarlo pero incluyendo un ASCII Art.

¿No sabéis lo que es? Seguro que estáis hartos de verlo, algo como esto:

 __  __           __   _                ________  _          
   / / / ____ ______/ /__(_____  ____ _   / ____/ /_(__________ 
  / /_/ / __ `/ ___/ //_/ / __ \/ __ `/  / __/ / __/ / ___/ __ \
 / __  / /_/ / /__/ ,< / / / / / /_/ /  / /___/ /_/ / /__/ /_/ /
/_/ /_/\__,_/\___/_/|_/_/_/ /_/\__, /  /_____/\__/_/\___/\____/ 
                              /____/

¿Y cómo lo vamos a hacer? Muy sencillo, seguiremos los siguientes pasos, que como podréis comprobar, son muy simples:

  1. Guardar nuestro ASCII Art en un fichero.
  2. Crear un script en Python que lea línea por línea el fichero.
  3. Por cada línea leída, hace una petición HTTP al servidor Web.

Aquí lo interesante es que modificaremos las cabeceras de HTTP en función de cómo queramos hacer la petición, y es que dependerá de varios factores, por ejemplo de cómo esté configurado el formato de log en el servidor.

Algo que en los servidores Apache, por ejemplo, se podría definir con la siguiente línea en su archivo de configuración:

CustomLog ${APACHE_LOG_DIR}/access.log combined

En el caso de servidores Web de tipo Apache, el formato de logs se puede personalizar, y existen varios formatos para ello. Por ejemplo, con el formato de log “common“, un access.log de un Apache tendría este aspecto:

[05/Jan/2016:11:02:26 +0100] “GET / HTTP/1.1” 200 572

Sin embargo, por ejemplo con el formato de log “combined“, un access.log tendría el siguiente aspecto:

[05/Jan/2016:11:40:53 +0100] “GET / HTTP/1.1” 200 572 “-” “”

En este último formato (combined), los dos últimos valores que van entre comillas, justo después del 572 (tamaño de petición), son el Referer (origen de la petición) y el User-agent, respectivamente.

Si el servidor está usando este formato, con nuestro script en Python podemos “jugar” a insertar nuestro ASCII Art a través de una de estas cabeceras.

Read more