Encontré secuencias de comandos que dicen que comprueban la conectividad a Internet. Algunos verifican la dirección IP si la interfaz está activa PERO no verifica la conectividad a Internet. Encontré algunos que usan ping como este: if [ 'ping google.com -c 4 | grep time' != "" ]; then
pero a veces esto puede no ser confiable ya que el ping en sí mismo puede colgarse por alguna razón (por ejemplo, esperando algún IO atascado).
¿Alguna sugerencia sobre la forma adecuada / confiable de verificar la conectividad a Internet mediante scripts? ¿Tengo que usar algunos paquetes?
Necesita poder verificar periódicamente con, cron
por ejemplo, hacer algo cuando la conexión se cae como invocarifup --force [interface]
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'
>/dev/null
>/dev/null
redirige la salida estándar para/dev/null
el dispositivo nulo , que dispone de ella, ya que no se desea en este caso (lo único que importa es los valores de salida de los comandos). En cambio, la salida más aplicable se toma de lasecho
líneas.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:
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:
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.
fuente
-d
por ejemplo,nc -dzw1
también para que no escuche STDIN y se cuelgue indefinidamente en un script. y tal vez use 8.8.8.8 en lugar de google.com para guardar una búsqueda.nc -dzw1 8.8.8.8 443
-d
en mis scripts, quizás porque nunca he tenido una tubería no utilizada. Eso debería ser seguro para agregar.-w 1
todavía cuesta un segundo cuando no hay conectividad, aunque quizásnc
tenga algún tipo de problema oscuro en alguna parte. Si tiene instalada una versión reciente de nmap, puedencat --send-only --recv-only -w 334ms
reducir el tiempo de falla a un tercionc
(he descubierto que 334 ms es un buen tiempo de espera).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 encuentre esto útil. Siéntase libre de editarlo a su gusto / optimizarlo.
Comprueba su puerta de enlace, DNS y conexión a Internet (usando curl, nc y ping). Ponga esto en un archivo y luego hágalo ejecutable (generalmente
sudo chmod +x filename
)fuente
$GW
de entrada ?/sbin/ip route | awk '/default/ { print $3 }'
obtiene la dirección de la puerta de enlace desde la interfaz principal (con suerte). Si lo desea, puede configurar la dirección IP de la puerta de enlace usted mismo.hay muchas IP en internet, un enfoque ligero es hacer ping a algunas de ellas
una respuesta más completa podría ser obtener páginas usando
wget
dónde
fuente
Gracias a sus contribuciones de cada usuario y de otros sitios web, logré completar este script en 3 días. y lo dejaré libre para su uso.
Este script automatiza la renovación de la dirección IP cuando se pierde la conexión, lo hace de forma persistente.
pastebin: https://pastebin.com/wfSkpgKA
fuente
eth0
, pero esto no se menciona). (2) Uso del inglés. (3) Poner todas las variables de shell (p. Ej."$HOST"
,"$LINE1"
Y"$LOG"
) entre comillas dobles. (4) EstablezcaLINE2
o no lo use. (Sospecho que tienesLINE1
/LINE2
confundido coninet4
/inet6
.) ... (Continúa)