Comment puis-je vérifier la connectivité Internet dans une console?

24

Existe-t-il un moyen facile de vérifier la connectivité Internet depuis la console? J'essaie de jouer dans un script shell. Une idée que je semble être à wget --spider http://www.google.co.in/ et vérifier le code de réponse HTTP pour interpréter si la connexion Internet fonctionne correctement. Mais je pense qu'il doit y avoir un moyen facile sans avoir besoin de vérifier un site qui ne plante jamais;)

Modifier: Il semble y avoir beaucoup de facteurs pouvant être examinés individuellement, une bonne chose. Mon intention pour le moment est de vérifier si mon blog est en panne. J'ai installé cron pour le vérifier toutes les minutes. Pour cela, je vérifie le code de réponse HTTP de wget --spider sur mon blog. Si ce n'est pas 200, il m'avertit (je pense que ce sera mieux que de le faire cingler, car le site peut être très chargé et peut arriver à expiration ou répondre très tard). Hier, il y a eu un problème avec mon Internet. LAN était bien connecté mais je ne pouvais accéder à aucun site. Je continue donc à recevoir des notifications car le script n'a pas pu trouver 200 dans la réponse wget. Maintenant, je veux m'assurer qu'il affiche la notification lorsque j'ai la connectivité Internet.

Donc, vérifier la connectivité DNS et LAN est un peu exagéré pour moi, car je n’ai pas vraiment besoin de savoir quel est le problème. Alors, que proposez-vous comment je le fais?

Voici mon script pour continuer à vérifier les temps d’arrêt pour mon blog:

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

De cette manière, je dois vérifier la connectivité Internet uniquement lorsque le code de réponse à mon blog présente un problème. C'est un peu lourd (car je n'utilise pas de ping) mais ne devrait pas donner de faux positifs. Droite? Aussi, comment puis-je randomiser ping à un autre site à chaque fois, comme facebook, google, yahoo etc. Aussi (j'essayais d'éviter toute E / S) je peux écrire dans un fichier journal par lequel je peux vérifier le nombre de contrôles d'arrêt et sautez ensuite d'autres contrôles jusqu'à ce que le site soit arrêté ou que les vérifications soient plus longues (10 minutes au lieu de chaque minute). Que pensez-vous?

    
posée Ashfame 24.02.2011 - 21:42
la source

10 réponses

24

Vérifier si un site Web spécifique est actif

Premièrement, plusieurs bons services de surveillance en ligne sont disponibles. Pour en choisir un, Pingdom inclut un compte gratuit pour surveiller une cible. (Déni de responsabilité: je ne suis en aucun cas affilié à Pingdom).

Deuxièmement, utiliser wget --spider pour votre propre script est une bonne idée. Vous obtiendrez des faux positifs lorsque votre ordinateur est en panne ou lorsque votre serveur DNS ne fonctionne pas. La vérification du code retour est un moyen simple d’implémenter cela:

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

Encore une fois, cette approche présente des lacunes. Si votre fournisseur a mis en cache votre enregistrement DNS, mais que le serveur DNS est en panne, les autres utilisateurs ne peuvent pas accéder à votre site même si la surveillance indique que tout va bien. Vous pouvez écrire une solution de contournement courte avec host , par exemple host example.com <your dns server IP> . Cela retournera une erreur si le serveur DNS ne répond pas, même si OpenDNS ou le serveur DNS de votre propre fournisseur fonctionne correctement.

Vérifier si Internet fonctionne

Il n’ya pas vraiment de moyen facile de gérer cela dans tous les cas.

Vous pouvez par exemple exécuter ping -c1 sur plusieurs sites bien connus (par exemple, www.google.com, facebook.com et ping.funet.fi) et vérifier les codes de retour pour déterminer si une destination est accessible. Vous pouvez vérifier automatiquement le code de retour en utilisant la variable $? . Le paramètre -c1 limite le nombre de paquets ping à un.

Vous pouvez rencontrer des problèmes avec certaines wifis publiques quand il existe une passerelle de connexion qui redirige toutes les requêtes ping et HTTP. Si c'est le cas, vous pouvez obtenir des réponses ping et des codes d'état HTTP sans erreur, même lorsque vous ne pouvez accéder à aucun autre site.

Si vous souhaitez vérifier l’état du câble, vous pouvez utiliser

sudo ethtool eth0

De sortie (extrait):

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

Cependant, cela ne veut pas dire si vous avez vraiment une connectivité ou non, si le câble est connecté et si quelque chose est à l’autre bout.

    
réponse donnée Olli 24.02.2011 - 21:47
la source
6

J'utilise cette méthode ...

if [[ "$(ping -c 1 8.8.8.8 | grep '100% packet loss' )" != "" ]]; then
    echo "Internet isn't present"
    exit 1
else
    echo "Internet is present"
    wget www.site.com
fi
    
réponse donnée bais bais 14.10.2013 - 11:18
la source
5

La vérification pour voir si un site est en marche se fait généralement avec un outil de surveillance tel que nagios . Cela permettra de surveiller en permanence le site et peut vous informer des pannes.

Lorsque vous vérifiez si Internet est en ligne depuis la ligne de commande, je passe par plusieurs étapes:

  • Vérifiez que Internet est actif ping google.com (vérifie le DNS et le site accessible connu).
  • Vérifiez que le site Web est actif, utilisez wget ou w3m pour récupérer la page.

Si Internet n’est pas en place, diagnostiquez vers l’extérieur.

  • Vérifiez que la passerelle est pingable. (Vérifiez ifconfig pour l'adresse de la passerelle.)
  • Vérifiez que les serveurs DNS peuvent faire l’objet d’un ping. (Vérifiez /etc/resolv.conf pour les adresses.)
  • Vérifiez si le pare-feu est bloqué. (Vérifiez / var / log / syslog comme je bloque les blocs.)

Si Internet est actif, mais que le site est hors service, vérifiez avec w3m http://isup.me/example.com que example.com est remplacé par le site qui apparaît. Utilisez wget, lynx ou quel navigateur de ligne de commande est disponible si vous ne disposez pas du navigateur w3m.

    
réponse donnée BillThor 27.02.2011 - 17:20
la source
3

Je viens d'utiliser

nm-online

qui s'interrompt jusqu'à ce qu'une connexion réseau soit présente par le gestionnaire de réseau. Bien travaillé Vous pouvez aussi faire autre chose avec ça.

    
réponse donnée ntsecrets 26.12.2016 - 00:03
la source
3

Ceci est le script de shell que j'utilise pour tester la connectivité Internet:

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

Vous devrez installer curl et mpg321

sudo apt-get install curl mpg321

Vous aurez besoin d’un fichier audio .mp3 renommé alarm.mp3 dans le même dossier si vous voulez une fonctionnalité d’alarme sonore. Configurez enfin l'URL du site Web et répondez à vos besoins.

    
réponse donnée 01BTC10 21.04.2012 - 01:34
la source
2

Vérifier si Internet fonctionne

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

De sortie (extrait):

1 #System is connected to internet

Cependant, comme mentionné par d’autres, cela ne veut pas dire si vous avez vraiment une connectivité ou non. Par exemple. Vous pourriez être connecté au routeur et le routeur n'est pas nécessairement connecté à Internet.

    
réponse donnée Venkat Kotra 19.11.2012 - 01:46
la source
0

J'avais besoin d'aide pour la même question et j'ai reçu ma réponse de cette façon:

echo $(nm-online) $? connection problems
    
réponse donnée octius4u 23.04.2014 - 09:21
la source
0

Vérifier si Internet fonctionne n'est pas si simple. ping est ICMP, donc il peut fonctionner même si le proxy Web est en panne. Quelque chose de similaire se produit avec DNS si vous testez avec une adresse IP.

Depuis que ma connexion Internet est instable, j'ai créé ce script ( basé sur celui-ci ) qui émet un son d'accord doux pour m'appeler, et utilise également Ubuntu notifier lorsque la connexion Internet revient:

#!/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 ;
        #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;
    
réponse donnée pabloab 18.11.2014 - 14:31
la source
0

Je cherchais un script qui testerait continuellement ma connexion Internet, qui serait lancé à chaque fois que mon serveur serait en marche et que je le ferais:

  1. D'abord, installez fping

    apt-get install fping
    
  2. Créez un script d'initialisation dans le dossier /etc/init.d avec le contenu suivant (je l'ai appelé testcon)

    #!/bin/bash
    
    PIDFILE=/var/run/testcon.pid
    
    . /lib/lsb/init-functions
    
    case "" 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. Créez un script dans le dossier /etc/init.d avec le contenu suivant (je l’ai appelé testcond)

    #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. Puis je lance les commandes ci-dessous pour ajouter au démarrage:

    sudo update-rc.d testcon defaults
    sudo update-rc.d testcon enable
    
  5. Redémarrer

réponse donnée Rafael 08.05.2014 - 02:00
la source
0

J'ai été confronté à des déjections aléatoires de connexions Wi-Fi par ma puce Broadcom BCM94331CD . J'ai conçu le script bash suivant (boucle infinie) en vérifiant chaque seconde si la connexion Internet Wi-Fi est opérationnelle. Une autre ligne de commande proposée ici attendra au moins 5 à 10 secondes avant de se fermer avec un statut, par exemple, ping . En attendant, je cherche également une solution définitive.

À partir des résultats sur askubuntu, je devrai purger le package bcmwl-kernel-source car j'utilise firmware-b43-installer et b43-fwcutter .

Merci à tous pour leurs suggestions (ci-dessus).

Ce script doit être ajouté dans les programmes de démarrage et ne nécessite pas le privilège super user pour s'exécuter également.

#!/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
    
réponse donnée Antonio 04.03.2018 - 00:11
la source

Lire d'autres questions sur les étiquettes