it-swarm.com.de

Wie kann ich die Internetverbindung in einer Konsole überprüfen?

Gibt es eine einfache Möglichkeit, die Internetverbindung von der Konsole aus zu überprüfen? Ich versuche, in einem Shell-Skript herumzuspielen. Ich scheine eine Idee zu haben, wget --spider http://www.google.co.in/ und den HTTP-Antwortcode zu überprüfen, um zu interpretieren, ob die Internetverbindung einwandfrei funktioniert. Aber ich denke, es muss ein einfacher Weg sein, ohne eine Seite zu überprüfen, die niemals abstürzt;)

Edit: Es scheint so, als ob es viele Faktoren geben kann, die individuell untersucht werden können, eine gute Sache. Im Moment ist es meine Absicht zu überprüfen, ob mein Blog ausgefallen ist. Ich habe Cron eingerichtet, um es jede Minute zu überprüfen. Dazu überprüfe ich den HTTP-Antwortcode von wget -spider in meinem Blog. Wenn es nicht 200 ist, benachrichtigt es mich (ich glaube, dies ist besser, als nur zu pingen, da die Site möglicherweise stark ausgelastet ist und eine Zeitüberschreitung aufweist oder sehr spät reagiert). Gestern gab es ein Problem mit meinem Internet. LAN war gut verbunden, aber ich konnte auf keine Seite zugreifen. Daher erhalte ich immer wieder Benachrichtigungen, da das Skript in der wget-Antwort keine 200 gefunden hat. Jetzt möchte ich sicherstellen, dass eine Benachrichtigung angezeigt wird, wenn eine Internetverbindung besteht.

Die Überprüfung auf DNS- und LAN-Konnektivität ist für mich ein bisschen übertrieben, da ich nicht so genau herausfinden muss, um welches Problem es sich handelt. Also, was schlagen Sie vor, wie ich es mache?

Hier ist mein Skript, um die Ausfallzeiten meines Blogs zu überprüfen:

#!/bin/bash

# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0

# Traverse the string considering it as an array of words
for x in $RESULT; do
    if [ "$x" = '200' ]; then
        FLAG=1 # This means all good
    fi
done

if [ $FLAG -eq '0' ]; then
    # A good point is to check if the internet is working or not
        # Check if we have internet connectivity by some other site
        RESULT=`wget --spider http://www.facebook.com 2>&1`
        for x in $RESULT; do
            if [ "$x" = '200' ]; then
                FLAG=1 # This means we do have internet connectivity and the blog is actually down
            fi
        done

    if [ $FLAG -eq '1' ]; then
        DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."         
    fi  
fi

exit

Auf diese Weise muss ich nur dann auf Internetverbindung prüfen, wenn ein Problem mit meinem Blog-Antwortcode vorliegt. Es ist ein bisschen schwer (da ich kein Ping verwende), sollte aber keine falsch positiven Ergebnisse liefern. Richtig? Wie kann ich auch das Pingen zu einer anderen Site, wie Facebook, Google, Yahoo usw., zufällig einstellen? Auch (ich habe versucht, jegliche E/A zu vermeiden) kann ich in eine Protokolldatei schreiben, mit der ich die Anzahl der Ausfallzeitprüfungen und -prüfungen überprüfen kann Überspringen Sie dann weitere Überprüfungen, bis die Site nicht mehr verfügbar ist, oder führen Sie längere Überprüfungen durch (10 Minuten statt jeder Minute). Was denkst du?

30
Ashfame

Überprüfen, ob eine bestimmte Website aktiv ist

Erstens sind mehrere gute Online-Überwachungsdienste verfügbar. Pingdom enthält ein kostenloses Konto für die Überwachung eines Ziels. (Haftungsausschluss: Ich bin nicht in irgendeiner Weise mit Pingdom verbunden).

Zweitens ist es eine gute Idee, wget --spider für Ihr eigenes Skript zu verwenden. Sie erhalten einige Fehlalarme, wenn Ihr Computer heruntergefahren ist oder wenn Ihr DNS-Server nicht funktioniert. Das Überprüfen des Rückkehrcodes ist eine einfache Möglichkeit, dies zu implementieren:

wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
  echo "Website failed!" | mail -s "Website down" [email protected]
fi

Wiederum weist dieser Ansatz Mängel auf. Wenn Ihr Provider Ihren DNS-Eintrag zwischengespeichert hat, der DNS-Server jedoch nicht verfügbar ist, können andere Benutzer nicht auf Ihre Site zugreifen, obwohl die Überwachung anzeigt, dass alles in Ordnung ist. Sie können eine kurze Problemumgehung mit Host schreiben, zum Beispiel Host example.com <your dns server IP>. Dies gibt einen Fehler zurück, wenn der DNS-Server nicht antwortet, auch wenn OpenDNS oder der DNS-Server Ihres eigenen Anbieters einwandfrei funktionieren.

Überprüfen Sie, ob das Internet funktioniert

Es ist nicht in jedem Fall einfach, damit umzugehen.

Sie können beispielsweise ping -c1 auf mehreren bekannten Websites (z. B. www.google.com, facebook.com und ping.funet.fi) ausführen und die Rückkehrcodes überprüfen, um festzustellen, ob ein Ziel erreichbar ist. Sie können den Rückkehrcode mithilfe der Variablen $? automatisch überprüfen. Der Parameter -c1 begrenzt die Anzahl der Ping-Pakete auf eins.

Bei einigen öffentlichen WLANs können Probleme auftreten, wenn ein Anmeldegateway vorhanden ist, das alle Pings und HTTP-Anforderungen umleitet. In diesem Fall erhalten Sie möglicherweise Ping-Antworten und fehlerfreie HTTP-Statuscodes, auch wenn Sie nicht auf andere Websites zugreifen können.

Wenn Sie den Kabelstatus überprüfen möchten, können Sie verwenden

Sudo ethtool eth0

Aus der Ausgabe (Auszug):

Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes

Dies sagt jedoch nichts darüber aus, ob Sie wirklich über eine Verbindung verfügen oder nicht, sondern nur, ob ein Kabel angeschlossen ist und etwas am anderen Ende ist.

29
Olli

Ich habe gerade verwendet

nm-online

dies hält an, bis der Netzwerkmanager eine Netzwerkverbindung hergestellt hat. Gut gearbeitet. Sie können auch andere Sachen damit machen.

7
ntsecrets

Ich benutze diese Methode ...

 if [["$ (ping -c 1 8.8.8.8 | grep '100% Paketverlust')"! = ""]]; dann 
 echo "Internet ist nicht vorhanden" 
 exit 1 
 else 
 echo "Internet ist vorhanden" 
 wget www.site.com 
 fi 
7
bais bais

Die Überprüfung, ob eine Site aktiv ist, erfolgt normalerweise mit einem Überwachungstool wie nagios. Dadurch wird die Site kontinuierlich überwacht und Sie können über Ausfälle informiert werden.

Wenn ich über die Befehlszeile überprüfe, ob das Internet verfügbar ist, führe ich eine Reihe von Schritten aus:

  • Check Internet is up ping google.com (überprüft DNS und bekannte erreichbare Site).
  • Überprüfen Sie, ob die Website in Betrieb ist. Verwenden Sie wget oder w3m, um die Seite abzurufen.

Wenn das Internet nicht verfügbar ist, diagnostizieren Sie es nach außen.

  • Überprüfen Sie, ob das Gateway pingfähig ist. (Überprüfen Sie ifconfig für die Gateway-Adresse.)
  • Überprüfen Sie, ob die DNS-Server pingfähig sind. (Adressen finden Sie in /etc/resolv.conf.)
  • Überprüfen Sie, ob die Firewall blockiert ist. (Überprüfen Sie/var/log/syslog, während ich Blöcke protokolliere.)

Wenn das Internet funktioniert, die Site jedoch nicht erreichbar ist, überprüfen Sie dies mit w3m http://isup.me/example.com und ersetzen Sie example.com durch die Site, die nicht erreichbar ist. Verwenden Sie wget, lynx oder einen beliebigen verfügbaren Befehlszeilenbrowser, wenn der w3m-Browser nicht installiert ist.

5
BillThor

Dies ist das Shell-Skript, mit dem ich die Internetverbindung teste:

alarm.sh

#! /bin/bash

if curl --silent --head http://www.google.com/ |
    egrep "20[0-9] Found|30[0-9] Found" >/dev/null
then
    echo Internet status: OK
else
    echo Internet status: ERROR
    mpg321 alarm.mp3 &> /dev/null
fi
sleep 60
clear

./alarm.sh

Du musst curl und mpg321 installieren

Sudo apt-get install curl mpg321

Sie benötigen eine MP3-Audiodatei, die im selben Ordner in alarm.mp3 umbenannt wurde, wenn Sie akustische Alarmfunktionen wünschen. Schließlich konfigurieren Sie die URL der Website und passen egrep an Ihre Bedürfnisse an.

4
01BTC10

Überprüfen Sie, ob das Internet funktioniert

Sudo nm-tool | grep "State: connected" | wc -l

Aus der Ausgabe (Auszug):

1 #System is connected to internet

Wie von anderen erwähnt, sagt dies jedoch nichts darüber aus, ob Sie wirklich eine Verbindung haben oder nicht. Z.B. Sie könnten mit dem Router verbunden sein und der Router muss nicht unbedingt mit dem Internet verbunden sein.

2
Venkat Kotra

Ich benutze diese Methode:

if curl -s --head  --request GET www.google.com | grep "200 OK" > /dev/null ; then
    echo "Internet is present"
else
    echo "Internet isn't present"
fi

Es wird versucht, eine Verbindung zu einer bekannten Website herzustellen. Wenn eine Verbindung hergestellt werden kann, wird davon ausgegangen, dass das Internet vorhanden ist.

1

Ich suchte nach einem Skript, das meine Internetverbindung kontinuierlich testet und das gestartet wird, sobald mein Server hochgefahren ist.

  1. Installieren Sie zuerst fping

    apt-get install fping
    
  2. Erstelle ein Init-Skript im Ordner /etc/init.d mit folgendem Inhalt (ich habe es testcon genannt)

    #!/bin/bash
    
    PIDFILE=/var/run/testcon.pid
    
    . /lib/lsb/init-functions
    
    case "$1" in
      start)
            log_daemon_msg "Starting internet connection tester"
            /etc/init.d/testcond &
            echo $! > $PIDFILE
            log_end_msg $?
        ;;
      stop)
            log_daemon_msg "Stopping internet connection tester"
            PID=$(cat $PIDFILE)
            kill -9 "$PID"
            log_end_msg $?
        ;;
      *)
        echo "Usage: /etc/init.d/testcon {start|stop}"
        exit 1
        ;;
    esac
    
    exit 0
    
  3. Erstelle ein Skript im Ordner /etc/init.d mit folgendem Inhalt (ich habe es testcond genannt)

    #echo Computer starting or testing daemon init
    while [ "$itest" == "" ] 
    do
        #wait 5 seconds 
        sleep 5
        itest=$(fping 8.8.8.8 | grep alive)
    done
    date | mail -s "Server is up and Internet is online" [email protected]
    
    #loop forever
    while [ "1" == "1" ] 
    do
        itest=$(fping 8.8.8.8 | grep alive)
        #if internet is down
        if [ "$itest" == "" ] 
        then
            #echo Internet is down
            #log time it was found down
            current_time=$(date)
            echo "Internet was found down @ $current_time" >> /mnt/data/Server/internet_log.txt
            #loop until it is back
            while [ "$itest" == "" ] 
            do
                #wait 60 seconds 
                sleep 60
                itest=$(fping 8.8.8.8 | grep alive) # test the internet
            done
            #when it is back
            current_time=$(date)
            echo "Internet is back        @ $current_time" >> /mnt/data/Server/internet_log.txt
            body=$(tail -2 /mnt/data/Server/internet_log.txt)
            echo "$body" | mail -s "Internet is back online" [email protected]
        fi
        #echo Internet is online
        #wait 60 seconds
        sleep 60
            done
    
  4. Dann führe ich die folgenden Befehle aus, um sie dem Start hinzuzufügen:

    Sudo update-rc.d testcon defaults
    Sudo update-rc.d testcon enable
    
  5. Starten Sie neu

0
Rafael

Ich brauchte Hilfe bei der gleichen Frage und bekam meine Antwort auf diese Weise:

echo $(nm-online) $? connection problems
0
octius4u

Es ist nicht so einfach zu überprüfen, ob das Internet funktioniert. Ping ist ICMP, daher funktioniert es möglicherweise auch, wenn der Webproxy nicht verfügbar ist. Ähnliches tritt bei DNS auf, wenn Sie mit einer IP testen.

Da meine Internetverbindung instabil ist, habe ich dieses Skript erstellt ( basierend auf diesem ), das einen sanften Akkordton erzeugt, um mich anzurufen, und Ubuntu-Benachrichtigung verwendet, wenn die Internetverbindung wieder hergestellt wird:

#!/bin/bash

hash play 2>&- || { echo >&2 "I require «play» but it's not installed. Try apt-get install sox. Aborting."; exit 1; }

WGET="`which wget`"
URL="http://www.google.com"
delay=3;
noConnectionMessage="No connection, trying again in $delay seconds...";
connectionMessage="WE HAVE INTERNET! :) Trying again in $delay seconds...";

echo "INTERNET TESTER: Type Ctrl+C to quit";
rm --force /tmp/index.site

function playSound {
    time=1;    # Time played
    if [ `sox --version| grep -oP "v[0-9.]+" | sed "s/[v.]//g"` -lt 1431 ]; then    #analize sox version, if greater than v14.3.1 can use pluck
        play -q -n synth $time sine;
    else
        play -q -n synth $time pluck $1;
        #for i in G4 G4 G4 E4;do play -n synth 0.1 pluck $i repeat 2;done    # You can play with something like this also :) (first three notes from Beethoven 5th symphony)
    fi
}

while [ 1 -eq 1 ]; do
    $WGET -q --tries=10 --timeout=2 $URL -O /tmp/index.site &> /dev/null
    if [ ! -s /tmp/index.site ];then
        echo $noConnectionMessage;
        #playSound E2
        sleep 1;
    else
        #~ zenity --warning --text "ADDRESS is back"
        notify-send -i "notification-network-wireless-full" "Connection state:" "$connectionMessage";
        echo $connectionMessage;
        playSound E3
    fi
    sleep $delay;
done

exit 0;
0
pabloab

Mein Broadcom BCM94331CD Chip war mit zufälligen Ausfällen von WLAN-Verbindungen konfrontiert. Ich habe das folgende Bash-Skript (Endlosschleife) entwickelt, das jede Sekunde überprüft, ob die Internet-Wi-Fi-Verbindung funktioniert. Andere hier vorgeschlagene Befehlszeilen warten mindestens 5 bis 10 Sekunden, bevor sie mit dem Status ping geschlossen werden. In der Zwischenzeit suche ich auch nach einer endgültigen Lösung.

Aufgrund der Ergebnisse auf askubuntu muss ich das Paket bcmwl-kernel-source löschen, da ich firmware-b43-installer und b43-fwcutter verwende.

Vielen Dank an alle für ihre Vorschläge (oben).

Dieses Skript muss in den Startprogrammen hinzugefügt werden und benötigt nicht die Berechtigung super user, um ebenfalls ausgeführt zu werden.

#!/bin/bash
#

# Check if Wi-Fi is disabled e.g. 'out of range'
# If so quickly re-enable Wi-Fi
# Due to a problem with Broadcom proprietary driver in package firmware-b43-installer

# Script is part of Start-Up programs
# Stored in /usr/local/bin/
# Infinite loop checking every second if Wi-Fi is up and running

while true; do
  # https://askubuntu.com/questions/27954/how-can-i-check-internet-connectivity-in-a-console
  if [[ $(nmcli -f STATE -t g) != 'connected' ]]; then
    # Disable and Re-Enable Wi-Fi as the Wi-Fi is now 'out of range' (disconnected)
    nmcli radio wifi off
    nmcli radio wifi on
  fi
  sleep 1
done
0
Antonio