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' != "" ]; thenpero 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, cronpor ejemplo, hacer algo cuando la conexión se cae como invocarifup --force [interface]

$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'>/dev/null>/dev/nullredirige la salida estándar para/dev/nullel 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 lasecholíneas.Recomiendo no usar
pingpara 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 (-zes el modo cero E / S [usado para escanear] ) con un tiempo de-w 1espera 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
-dpor ejemplo,nc -dzw1tambié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-den mis scripts, quizás porque nunca he tenido una tubería no utilizada. Eso debería ser seguro para agregar.-w 1todavía cuesta un segundo cuando no hay conectividad, aunque quizásnctenga algún tipo de problema oscuro en alguna parte. Si tiene instalada una versión reciente de nmap, puedencat --send-only --recv-only -w 334msreducir 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
$GWde 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
wgetdó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) EstablezcaLINE2o no lo use. (Sospecho que tienesLINE1/LINE2confundido coninet4/inet6.) ... (Continúa)