test paquetes opciones network internet hacer example como check linux bash wifi ping

paquetes - ¿Cómo verificar el acceso a internet usando bash script en linux?



ping linux opciones (8)

ping confiable en un script bash separado:

#!/bin/bash ipaddr=''8.8.8.8'' # Google''s public DNS server [[ -z `ping -c1 $ipaddr |& grep -o ''Network is unreachable''` ]] || exit 1 [[ -z `ping -c3 $ipaddr |& grep -o ''100% packet loss''` ]] && exit 0 || exit 1

Pon esto en un guión separado. Manejará diferentes situaciones de red, ya que (1) no está conectado a una red, (2) está conectado a la red pero no puede acceder a Internet (o al menos a Google), y (3) está conectado a Internet.

Luego puede usar el exit code de exit code del script para verificar la conectividad, por ejemplo,

~$ script-name && echo online || echo offline

En mi escuela, Internet no está disponible (todas las noches, después de las 23: 0, la escuela eliminará Internet, para colocarnos en la cama> .. <), luego el ping nunca se detendrá, aunque he usado el parámetro ping -w1 ...

Es decir, cuando uso: ping -q -w1 -c1 8.8.8.8 para verificar si Internet está arriba / abajo, estará allí sin salida y no saldrá, como si estuviera usando un solo cat .

¿Puedes entender mi pregunta? No sé por qué es así, pero creo que el problema está relacionado con el servicio de Internet de la escuela . ¿Cualquier sugerencia? (Creo que wget puede ser una buena alternativa, pero ¿cómo usarlo?)


Instale fping:> menos problema luego haga ping.

fping google.com | grep alive

para usar, por ejemplo, como:

#!/bin/bash itest=$(fping google.com | grep alive) while [ "$itest" == "" ] do sleep 5 itest=$(fping google.com | grep alive) done echo now online


Si la escuela realmente apaga su enrutador en lugar de redirigir todo el tráfico a una página de "por qué no estás en la cama", entonces no es necesario descargar una página web completa ni enviar encabezados HTTP. Todo lo que tienes que hacer es simplemente hacer una conexión y comprobar si alguien está escuchando.

nc -z 8.8.8.8 53

Esto dará como resultado "La conexión al 8.8.8.8 puerto 53 [tcp / dominio] se realizó correctamente" y devuelve un valor de 0 si alguien está escuchando.

Si quieres usarlo en un script de shell:

nc -z 8.8.8.8 53 >/dev/null 2>&1 online=$? if [ $online -eq 0 ]; then echo "Online" else echo "Offline" fi


Usando el ejemplo anterior, escribí este script para registrar el estado de su conexión: https://gist.github.com/cganterh/ffc2fffa8263857cbece

Primero, guarde el siguiente código en un archivo name.sh

#!/bin/bash while true do wget -q --tries=10 --timeout=20 -O - http://google.com > /dev/null if [[ $? -eq 0 ]]; then echo $(date) "1" | tee -a log.csv else echo $(date) "0" | tee -a log.csv fi sleep 5 done

Luego, ejecute el archivo name.sh en la terminal, luego verifique la información de estado del registro en log.csv de la misma carpeta.


Utilice la opción de tiempo de espera -t :

ping -q -t 5 -w1 -c1 8.8.8.8 t


Utilizando wget:

#!/bin/bash wget -q --tries=10 --timeout=20 --spider http://google.com if [[ $? -eq 0 ]]; then echo "Online" else echo "Offline" fi


Sin wget

#!/bin/bash echo -e "GET http://google.com HTTP/1.0/n/n" | nc google.com 80 > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Online" else echo "Offline" fi

Disfrutar;)


#!/bin/bash INTERNET_STATUS="UNKNOWN" TIMESTAMP=`date +%s` while [ 1 ] do ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1 if [ $? -eq 0 ] ; then if [ "$INTERNET_STATUS" != "UP" ]; then echo "UP `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))"; INTERNET_STATUS="UP" fi else if [ "$INTERNET_STATUS" = "UP" ]; then echo "DOWN `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))"; INTERNET_STATUS="DOWN" fi fi sleep 1 done;

la salida producirá algo como:

bash-3.2$ ./internet_check.sh UP 2016-05-10T23:23:06BST 4 DOWN 2016-05-10T23:23:25BST 19 UP 2016-05-10T23:23:32BST 7

el número al final de una línea muestra la duración del estado anterior, es decir, 19 arriba, 7 segundos abajo