El paso a paso o código que hallarás en este artículo es la solución más rápida y válida que encontramos a tus dudas o problema.
Solución:
Prueba de la conectividad IPv4
Si su red permite hacer ping, intente hacer ping 8.8.8.8 (un servidor ejecutado por Google).
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
echo "IPv4 is up"
else
echo "IPv4 is down"
fi
Prueba de conectividad IP y DNS
Si solo desea que la prueba tenga éxito cuando el DNS también está funcionando, use un nombre de host.
if ping -q -c 1 -W 1 google.com >/dev/null; then
echo "The network is up"
else
echo "The network is down"
fi
Probando la conectividad web
Algunos cortafuegos bloquean los pings. Algunos lugares tienen un firewall que bloquea todo el tráfico excepto a través de un proxy web. Si desea probar la conectividad web, puede realizar una solicitud HTTP.
case "$(curl -s --max-time 2 -I http://google.com | sed 's/^[^ ]* *([0-9]).*/1/; 1q')" in
[23]) echo "HTTP connectivity is up";;
5) echo "The web proxy won't let us through";;
*) echo "The network is down or very slow";;
esac
te lo recomiendo mucho contra utilizando ping
para determinar la conectividad. Hay demasiados administradores de red que deshabilitan ICMP (el protocolo que utiliza) debido a las preocupaciones sobre los ataques de inundación de ping que se originan en sus redes.
En su lugar, 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 toque rápido (-z
es modo de E / S cero [used for scanning]) con un tiempo de espera rápido (-w 1
espera como máximo un segundo, aunque los usuarios de Apple OS X pueden necesitar usar -G 1
en lugar de). Comprueba Google en el puerto 443 (HTTPS).
He usado HTTPS en lugar de HTTP como un esfuerzo para protegerme 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 protegerse 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 verifica una conexión (en lugar de esperar a que se agote el tiempo de espera de openssl) y luego realiza el protocolo de enlace SSL, ingresando en la fase de verificación. Sale silenciosamente (“true”) si la verificación fue” OK “o si sale con un error (“false”), luego informamos el hallazgo.
Hice un script que usa múltiples formas de verificar la conexión a Internet (ping, nc y curl, gracias a Adam Katz, Gilles y Archemar). Espero que alguien lo encuentre útil. Siéntase libre de editarlo a su gusto / optimizarlo.
Comprueba su puerta de enlace, DNS y conexión a Internet (mediante curl, nc y ping). Coloque esto en un archivo y luego hágalo ejecutable (generalmente sudo chmod +x filename
)
#!/bin/bash
GW=`/sbin/ip route | awk '/default/ print $3 '`
checkdns=`cat /etc/resolv.conf | awk '/nameserver/ print $2' | awk 'NR == 1 print; exit'`
checkdomain=google.com
#some functions
function portscan
tput setaf 6; echo "Starting port scan of $checkdomain port 80"; tput sgr0;
if nc -zw1 $checkdomain 80; then
tput setaf 2; echo "Port scan good, $checkdomain port 80 available"; tput sgr0;
else
echo "Port scan of $checkdomain port 80 failed."
fi
function pingnet
#Google has the most reliable host name. Feel free to change it.
tput setaf 6; echo "Pinging $checkdomain to check for internet connection." && echo; tput sgr0;
ping $checkdomain -c 4
if [ $? -eq 0 ]
then
tput setaf 2; echo && echo "$checkdomain pingable. Internet connection is most probably available."&& echo ; tput sgr0;
#Insert any command you like here
else
echo && echo "Could not establish internet connection. Something may be wrong here." >&2
#Insert any command you like here
# exit 1
fi
function pingdns
#Grab first DNS server from /etc/resolv.conf
tput setaf 6; echo "Pinging first DNS server in resolv.conf ($checkdns) to check name resolution" && echo; tput sgr0;
ping $checkdns -c 4
if [ $? -eq 0 ]
then
tput setaf 6; echo && echo "$checkdns pingable. Proceeding with domain check."; tput sgr0;
#Insert any command you like here
else
echo && echo "Could not establish internet connection to DNS. Something may be wrong here." >&2
#Insert any command you like here
# exit 1
fi
function httpreq
sed 's/^[^ ]* *([0-9]).*/1/; 1q')" in
[23]) tput setaf 2; echo "HTTP connectivity is up"; tput sgr0;;
5) echo "The web proxy won't let us through";exit 1;;
*)echo "Something is wrong with HTTP connections. Go check it."; exit 1;;
esac
# exit 0
#Ping gateway first to verify connectivity with LAN
tput setaf 6; echo "Pinging gateway ($GW) to check for LAN connectivity" && echo; tput sgr0;
if [ "$GW" = "" ]; then
tput setaf 1;echo "There is no gateway. Probably disconnected..."; tput sgr0;
# exit 1
fi
ping $GW -c 4
if [ $? -eq 0 ]
then
tput setaf 6; echo && echo "LAN Gateway pingable. Proceeding with internet connectivity check."; tput sgr0;
pingdns
pingnet
portscan
httpreq
exit 0
else
echo && echo "Something is wrong with LAN (Gateway unreachable)"
pingdns
pingnet
portscan
httpreq
#Insert any command you like here
# exit 1
fi
Agradecemos que quieras añadir valor a nuestro contenido colaborando tu experiencia en las explicaciones.