wake-up-neo.com

Wie prüfe ich den Internetzugang mit dem bash-Skript in Linux?

In meiner Schule ist das Internet nicht verfügbar (jede Nacht nach 23: 0 wird die Schule das Internet töten, um uns ins Bett zu legen> ... <), dann wird der Ping nie aufhören, obwohl ich den Parameter ping -w1 ... verwendet habe. 

Das heißt, wenn ich ping -q -w1 -c1 8.8.8.8 verwende, um zu überprüfen, ob das Internet auf/ab ist, wird es ohne Ausgabe da sein und wird nicht beendet, genau wie ich eine einzelne cat verwende. 

Kannst du meine Frage verstehen? Ich weiß nicht, warum es so ist, aber ich denke, das Problem hängt mit dem school-internet-service zusammen. Irgendein Vorschlag? (Ich denke, wget kann eine gute Alternative sein, aber wie soll ich damit umgehen?)

16
Libin Wen

Wget verwenden:

#!/bin/bash

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

Wenn die Schule ihren Router tatsächlich abschaltet, anstatt den gesamten Datenverkehr auf eine Seite "Warum sind Sie nicht im Bett" umzuleiten, müssen Sie nicht die gesamte Webseite herunterladen oder HTTP-Header senden. Sie müssen lediglich eine Verbindung herstellen und prüfen, ob jemand zuhört.

nc -z 8.8.8.8 53

Dies gibt "Verbindung zu 8.8.8.8 Port 53 [TCP/Domäne] war erfolgreich!" und den Wert 0 zurückgeben, wenn jemand zuhört. 

Wenn Sie es in einem Shell-Skript verwenden wollen:

nc -z 8.8.8.8 53  >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi
14
Andrew
#!/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;

die Ausgabe erzeugt Folgendes:

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

die Zahl am Ende einer Zeile zeigt die Dauer des vorherigen Zustands an, d. h. 19 nach oben, 7 Sekunden nach unten

2
Cyril R

Verwenden Sie die Timeout-Option -t:

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

Installieren Sie fping:> weniger problem als ping.

fping google.com | grep alive

zum Beispiel verwenden wie:

#!/bin/bash

itest=$(fping google.com | grep alive)

while [ "$itest" == "" ] 
        do
        sleep 5
        itest=$(fping google.com | grep alive)
done
echo now online
2
Lizen Kohlhaas

Ohne 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

Genießen ;)

1
user3439968

Mit dem obigen Beispiel habe ich dieses Skript geschrieben, um den Status Ihrer Verbindung zu protokollieren: https://Gist.github.com/cganterh/ffc2fffa8263857cbece

Speichern Sie den folgenden Code in einer name.sh-Datei.

#!/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
1

Zuverlässiger alter ping in einem separaten Bash-Skript:

#!/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

Schreiben Sie dies in ein separates Skript. Es behandelt verschiedene Netzwerksituationen als (1) nicht mit einem Netzwerk verbunden, (2) mit dem Netzwerk verbunden, kann aber nicht auf das Internet (oder zumindest Google) und (3) mit dem Internet zugreifen.


Sie können später den exit code des Skripts verwenden, um die Konnektivität zu überprüfen, z.

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