ver - Comprobación de la disponibilidad del host mediante el uso de ping en scripts bash
ver trafico de red linux (6)
Quiero escribir un script, que seguiría comprobando si alguno de los dispositivos de la red, que debería estar en línea todo el día, está realmente en línea. Traté de usar ping, pero
if [ "`ping -c 1 some_ip_here`" ]
then
echo 1
else
echo 0
fi
da 1
no importa si ingreso una dirección IP válida o no válida. ¿Cómo puedo verificar si una dirección específica (o mejor cualquiera de los dispositivos de la lista de direcciones IP) se desconectó?
FYI, acabo de hacer una prueba utilizando el método anterior y si utilizamos multi ping (10 solicitudes)
ping -c10 8.8.8.8 &> / dev / null; echo $?
el resultado del comando multi ping será "0" si al menos uno de los resultados de ping es alcanzable, y "1" en caso de que no se pueda acceder a todas las solicitudes de ping.
Hay una versión avanzada de ping - "fping", que da la posibilidad de definir el tiempo de espera en milisegundos.
#!/bin/bash
IP=''192.168.1.1''
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo "Host found"
else
echo "Host not found"
fi
No necesita los backticks en la declaración if. Puedes usar este cheque
if ping -c 1 some_ip_here &> /dev/null
then
echo 1
else
echo 0
fi
El comando if verifica el código de salida del siguiente comando (el ping). Si el código de salida es cero (lo que significa que el comando salió exitosamente) se ejecutará el bloque siguiente. Si devuelve un código de salida distinto de cero, entonces se ejecutará el bloque else.
Ping devuelve diferentes códigos de salida dependiendo del tipo de error.
ping 256.256.256.256 ; echo $?
# 68
ping -c 1 127.0.0.1 ; echo $?
# 0
ping -c 1 192.168.1.5 ; echo $?
# 2
0 significa host accesible
2 significa inalcanzable
Puedo pensar en un trazador de líneas como este para ejecutar
ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail
Reemplace 127.0.0.1 con IP o nombre de host, reemplace los comandos de eco con lo que se debe hacer en ambos casos.
El código anterior tendrá éxito, tal vez intente con una IP o nombre de host que sepa que no es accesible.
Me gusta esto:
ping -c 1 google.com &> /dev/null && echo success || echo fail
y esto
ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail
up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
printf "Host $1 not responding to ping /n"
else
printf "Host $1 responding to ping /n"
fi