Script en Python que comprueba el estado de un sitio web y devuelve los valores necesarios para pasar el estado al sistema de monitorización Pandora FMS. El script Python permite obtener el estado o bien mediante su código devuelto o bien mediante la comparación con algún valor devuelto en alguna de sus cabeceras (headers). Generamos un ejecutable portable de la aplicación Python tanto para Windows como para Linux.

Código fuente completo del script Python EstadoSitio.py para comprobar el estado de un sitio web

A continuación, mostramos él código fuente completo en Python para obtener el estado de un sitio web:

Las opciones del script Python EstadoSitio.py:

  • -h, –help: muestra la ayuda del comando, con los posibles parámetros y su descripción.
  • ur URLRAIZ, –urlraiz URLRAIZ: URL raíz a analizar (sin http://).
  • -uc URLCOMPLETA, –urlcompleta URLCOMPLETA: URL completa a analizar (con http o https://).
  • -p PUERTO, –puerto PUERTO: puerto de conexión (80, 443, etc.).
  • -m MODULO, –modulo MODULO: nombre del módulo para Pandora FMS.
  • -v, –version: muestra por pantalla la versión de OpenSSL usada.
  • -e, –ComprobarPorEncabezado: para obtener si la web está OK usará un encabezado (header) y su valor, el nombre del encabezado a comparar se le debe pasar por el parámetro -en y el valor a comparar por el parámetro -ev.
  • -c, –ComprobarPorCodigoRespuesta: para obtener si la web está OK mediante el código de estado devuelto por el servidor.
  • -en ENCABEZADONOMBRE, –EncabezadoNombre ENCABEZADONOMBRE: si usamos el parámetro -e, deberemos añadir este parámetro para indicar el nombre del encabezado para obtener su valor y comprobar si es igual. Por ejemplo ‘X-Redirect-By’. El valor del encabezado se indica en el parámetro -ev.
  • -ev ENCABEZADOVALOR, –EncabezadoValor ENCABEZADOVALOR: si hemos usado el parámetro -e, indicaremos en este parámetro el valor del encabezado (indicando en -en) a comparar.
  • -me, –MostrarEncabezados: muestra todos los encabezados (headers) del sitio web y su valor.

Generar ejecutable portable EstadoSitio.exe a partir de EstadoSitio.py en Windows

Para generar el ejecutable portable del script Python anterior, lo guardaremos en un fichero con el nombre EstadoSitio.py y lo colocaremos en una carpeta del equipo Windows. Este equipo tendrá instalado Python y pyinstaller, como indicamos en este tutorial:

Aunque lo explicamos para Linux, el proceso para Windows es exactamente igual, instalando pyinstaller en Python con:

Una vez instalado pyinstaller, abriremos una ventana de MS-DOS (cmd o símbolo de sistema) y accederemos a la carpeta donde se encuentre el script Python EstadoSitio.py, en nuestro caso en la carpeta D:\Mis documentos\ProyectoA\Python\EstadoSitioWeb:

Ejecutaremos el siguiente comando para generar el fichero ejecutable portable EstadoSitio.exe que podemos llevarnos a cualquier otro equipo Windows. Funcionará sin necesidad de instalar ningún software adicional:

La herramienta pyinstaller habrá generado un fichero ejecutable con el nombre EstadoSitio.exe en la carpeta dist. Podremos ejecutarlo con el parámetro -h para mostrar la ayuda:

Este fichero está listo para poder ser ejecutando en cualquier equipo Windows, como mostramos más adelante.

A la hora de generar el ejecutable con pyinstaller, si nos muestra este error:

«pyinstaller.exe» no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.

Se debe a que no tenemos añadida la ruta del ejecutable pyinstaller.exe en la variable de entorno PATH del equipo. Podemos solucionar este problema buscando dónde tenemos el ejecutable pyinstaller.exe. que en el caso de Windows 11 y una instalación estándar de Python 3.12, el ejecutable de pyinstaller se encuentra en:

C:\Users\usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts

Para agregar la ruta a la variable de entorno PATH, abriremos las propiedades del sistema (tecla de Windows + Pausa). Pulsaremos en «Configuración avanzada del sistema»:

Pulsaremos en «Variables de entorno» en la pestaña «Opciones avanzadas»:

Seleccionaremos la variable de entorno «Path» y pulsaremos en «Editar»:

Añadiremos una nueva línea con la ruta donde se encuentre el fichero pyinstaller.exe y pulsaremos «Aceptar»:

De esta forma, funcionará el comando pyinstaller.exe ejecutado desde una ventana de MS-DOS o Símbolo de sistema (cmd).

Generar ejecutable portable EstadoSitio a partir de EstadoSitio.py en Linux

De la misma forma que hemos hecho en un equipo Windows, en Linux es similar. Copiaremos el código fuente Python del script EstadoSitio.py en un fichero y, ubicándonos en la ruta donde se encuentre dicho fichero, ejecutaremos:

Ejemplo de uso de la aplicación Python EstadoSitio.py

Desde un equipo Windows, con el fichero ejecutable EstadoSitio.exe, desde una ventana de MS-DOS (Símbolo de sistema o cmd), accederemos a la carpeta donde tengamos el ejecutable EstadoSitio.exe y. Para comprobar si el sitio web proyectoa.com está activo, comparando el valor de la cabecera «Server» con «HTTPd», ejecutaremos el siguiente comando:

El comando devolverá el siguiente texto por consola si el sitio web está activo, en este caso, si el valor devuelto en la cabecera «Server» es «HTTPd»:

En el caso de que el sitio web no esté activo o haya habido algún error en su comprobación,. Por ejemplo, si el valor devuelto de la cabecera Server es diferente al consultado (lo hemos cambiado a «HTTPdd» para forzar el error), devolverá:

Y si se ha producido algún error al comprobar el sitio web, devolverá el error en «description»:

Puesto que el formato de salida es para el sistema de monitorización Pandora FMS, mostrará en «data», el valor «1» si el sitio web es correcto o «0» si no lo es. Y siempre devolverá el formato admitido por los sensores de Pandora FMS.

En este ejemplo, hemos usado el método de comprobar el valor de una cabecera. También podemos usar el comprobar el estado devuelto por el servidor. Por ejemplo, para comprobar si el sitio web proyectoa.com es correcto, con el código de estado devuelto, ejecutaremos:

El programa Python admite como estado correcto los siguientes códigos de estado:

  • 200 OK
  • 201 Created
  • 202 Accepted
  • 203 Non-Authoritative Information
  • 204 No Content
  • 205 Reset Content
  • 206 Partial Content
  • 207 Multi-Status (WebDAV)
  • 208 Already Reported (WebDAV)
  • 226 IM Used (HTTP Delta encoding)
  • 301 Moved Permanently

Hay que tener en cuenta que si el sitio web está protegido por un WAF (Web Application Firewall), el intento de obtención del estado podría considerarlo un ataque, devolviendo el código: 403 Forbidden. En este caso, es recomendable usar el método de obtener el valor de alguna cabecera (que hemos mostrado al principio de este punto).

En el caso de un equipo Linux, el script EstadoSitio.py funciona exactamente igual, colocándonos donde se encuentre el ejecutable EstadoSitio, ejecutaremos el siguiente comando para comprobar si el sitio web proyectoa.com está activo (mediante la comparación del valor de la cabecera «Server» a «HTTHd»):

Podremos comprobar que devuelve, exactamente, los mismos valores que si lo ejecutásemos en Windows.

El programa permite obtener todas las cabeceras de un sitio web y su valor, por si necesitamos usar el método de comprobación de cabecera, para ello añadiremos el parámetro -me:

Devolverá algo así como:

Podremos usar cualquiera de los encabezados devueltos: Date, Content-Type, Transfer-Encoding, Connection, Vary, Age, Server, etc. para comprobar si el sitio web está OK.

Descarga del código fuente Python y de los ejecutables para Windows y para Linux EstadoSitio.py

En el siguiente enlace podréis descargar el código fuente completo del script Python EstadoSitio.py, así como los ejecutables para Windows y para Linux: