Recomiendo no usar ping
para determinar la conectividad. Hay demasiados administradores de red que deshabilitan ICMP (el protocolo que usa) debido a las preocupaciones sobre los ataques de inundación de ping que se originan en sus redes.
En cambio, utilizo una prueba rápida de un servidor confiable en un puerto que puede esperar que esté abierto:
if nc -zw1 google.com 443; then
echo "we have connectivity"
fi
Esto usa netcat ( nc
) en su modo de escaneo de puertos , un empuje rápido ( -z
es el modo cero E / S [usado para escanear] ) con un tiempo de -w 1
espera rápido ( espera como máximo un segundo). Comprueba Google en el puerto 443 (HTTPS).
He usado HTTPS en lugar de HTTP como un esfuerzo para proteger contra portales cautivos y proxies transparentes que pueden responder en el puerto 80 (HTTP) para cualquier host. Esto es menos probable cuando se usa el puerto 443, ya que habría una falta de coincidencia de certificados, pero aún así sucede.
Si desea probarse contra eso, deberá validar la seguridad en la conexión:
test=google.com
if nc -zw1 $test 443 && echo |openssl s_client -connect $test:443 2>&1 |awk '
handshake && $1 == "Verification" { if ($2=="OK") exit; exit 1 }
$1 $2 == "SSLhandshake" { handshake = 1 }'
then
echo "we have connectivity"
fi
Esto busca una conexión (en lugar de esperar a que se abra el tiempo de espera de openssl) y luego realiza el protocolo de enlace SSL, ingresando la fase de verificación. Sale silenciosamente ("verdadero") si la verificación fue "OK" o si sale con un error ("falso"), entonces informamos el hallazgo.
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'