Scripts bash: Escanear y monitorizar una red

Scripts bash: Escanear y monitorizar una red.

En este artículo vemos unos simples scripts bash con los cuales podremos escanear y monitorizar una red, lo haremos con la combinación de comandos bash y ping.

Estos scripts no realizan una monitorización completa como otras aplicaciones dedicadas, pero son útiles para redes domésticas y pequeñas empresas donde la implantación de un sistema complejo puede ser una carga excesiva para la propia red y el sistema.

Los ejemplos los hacemos desde «192.168.0.1«.

Scripts bash: Escanear y monitorizar una red 1

 

Escanear subred de la red

#!/bin/bash

is_alive_ping()
{
  ping -c 1 $1 > /dev/null
  [ $? -eq 0 ] && echo Node with IP: $i is up.
}

for i in 192.168.0.{1..255} 
do
is_alive_ping $i & disown
done

ejemplo de salida:

linux-ozl1:/home/ # bash 1.sh
Node with IP: 192.168.0.45 is up.
Node with IP: 192.168.0.1 is up.
Do you want to ping broadcast? Then -blinux-ozl1:/home/ # Node with IP: 192.168.0.108 is up.
Node with IP: 192.168.0.100 is up.

 

Notificar por mail que el server esta caído

Creamos el archivo.

nano scan-mail.sh

Copia y pega lo siguiente:
#!/bin/bash

for i in $@
do
ping -c 1 $i &> /dev/null

if [ $? -ne 0 ]; then
	echo "`date`: error de ping, $i host caido!" | mail -s "$i host caido!" mi@email
	 
fi
done

Guarda y cierra el editor.

Lo ejecutamos de la siguiente forma…

./scan-mail.sh 192.168.0.1

también funciona atacando a un dominio…
./scan-mail.sh sololinux.es

varias combinaciones…
./scan-mail.sh sololinux.es google.es 192.168.0.1

Scripts bash: Escanear y monitorizar una red 2

 

Crear un registro de la acción «Monitorizar una red»

Si el mail no está configurado en el sistema, el script creará un archivo de registro. La secuencia de comandos está envuelto en un bucle while infinito configurado para ejecutar la comprobación del ping cada hora (3600 segundos).

Si quieres usar el script con una tarea cron, elimina el bucle while.

Modifica el script según tus necesidades.

Creamos el script:

nano scan-mon-mail.sh

Copia y pega lo siguiente…
#!/bin/bash 
 
LOG=/tmp/mylog.log 
SECONDS=3600 

EMAIL=mi@email
 
for i in $@; do 
	echo "$i-UP!" > $LOG.$i 

done 
 
while true; do 
	for i in $@; do 

ping -c 1 $i > /dev/null 
if [ $? -ne 0 ]; then 
	STATUS=$(cat $LOG.$i) 
 		if [ $STATUS != "$i-DOWN!" ]; then 
 			echo "`date`: ping failed, $i host is down!" | 
			mail -s "$i host is down!" $EMAIL 

 		fi 
	echo "$i-DOWN!" > $LOG.$i 

else 
	STATUS=$(cat $LOG.$i)
 		if [ $STATUS != "$i-UP!" ]; then 
 			echo "`date`: ping OK, $i host is up!" | 
			mail -s "$i host is up!" $EMAIL

 		fi 
	echo "$i-UP!" > $LOG.$i 
fi 
done 

sleep $SECONDS 
done

Guarda y cierra el editor.

 

Lo ejecutamos de la siguiente forma…

./scan-mon-mail.sh 192.168.0.1

también funciona atacando a un dominio…
./scan-mon-mail.sh sololinux.es

varias combinaciones…
./scan-mon-mail.sh sololinux.es google.es 192.168.0.1

 

Espero te resulte útil.

Agregar comentario