42 votes

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

Existe-t-il un moyen simple de vérifier la connectivité Internet depuis la console ? J'essaie de jouer dans un script shell. Une idée que j'ai est d'utiliser wget --spider [http://www.google.co.in/](http://www.google.co.in/) et de 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 plus simple sans avoir besoin de vérifier un site qui ne plante jamais ;)

Éditer : Il semble qu'il y ait beaucoup de facteurs qui peuvent être examinés individuellement, c'est une bonne chose. Mon intention pour le moment est de vérifier si mon blog est en panne. J'ai configuré une tâche cron pour vérifier cela toutes les minutes. Pour cela, je vérifie le code de réponse HTTP de wget --spider pour mon blog. Si ce n'est pas 200, il me notifie (je crois que ce sera mieux que de simplement le pinguer, car le site peut être sous une charge importante et peut être en train de temporiser ou de répondre très tard). Hier, il y avait un problème avec mon Internet. Le LAN était connecté correctement mais je ne pouvais tout simplement pas accéder à aucun site. Donc je continue de recevoir des notifications car le script ne pouvait pas trouver 200 dans la réponse de wget. Maintenant je veux m'assurer qu'il m'affiche une notification lorsque j'ai une connectivité Internet.

Donc, vérifier la connectivité DNS et LAN est un peu excessif pour moi car je n'ai pas vraiment besoin de savoir quel est le problème. Alors que suggérez-vous comment je peux le faire ?

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

#!/bin/bash

# Envoyer la sortie de wget dans une variable et non ce que fetches wget
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0

# Parcourir la chaîne en la considérant comme un tableau de mots
for x in $RESULT; do
    if [ "$x" = '200' ]; then
        FLAG=1 # Cela signifie tout va bien
    fi
done

if [ $FLAG -eq '0' ]; then
    # Un bon point est de vérifier si Internet fonctionne ou non
        # Vérifier si nous avons une connectivité Internet par un autre site
        RESULT=`wget --spider http://www.facebook.com 2>&1`
        for x in $RESULT; do
            if [ "$x" = '200' ]; then
                FLAG=1 # Cela signifie que nous avons une connectivité Internet et que le blog est effectivement en panne
            fi
        done

    if [ $FLAG -eq '1' ]; then
        DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Alerte de temps d'arrêt !" "http://blog.ashfame.com/ est en panne."         
    fi  
fi

exit

Ainsi, je n'ai besoin de vérifier la connectivité Internet que là où il y a un problème avec le code de réponse de mon blog. C'est un peu lourd (car je n'utilise pas ping) mais ne devrait pas donner de faux positifs. N'est-ce pas ? De plus, comment puis-je randomiser les pings vers un site différent à chaque fois, comme facebook, google, yahoo, etc. De plus (j'essayais d'éviter toute E/S) je peux écrire dans un fichier journal par lequel je peux vérifier le nombre de vérifications des temps d'arrêt et ensuite sauter les vérifications ultérieures jusqu'à ce que le site soit en panne ou provoque des vérifications plus longues (10 minutes au lieu de chaque minute). Qu'en pensez-vous ?

4voto

abranhe Points 141

Je suis en train d'utiliser cette méthode :

if curl -s --head  --request GET www.google.com | grep "200 OK" > /dev/null ; then
    echo "Internet présent"
else
    echo "Internet n'est pas présent"
fi

Il essaiera de se connecter à un site web bien connu et s'il peut s'y connecter, alors nous supposerons qu'il y a internet.

3voto

Venkat Kotra Points 419

Vérifier si Internet fonctionne

sudo nm-tool | grep "État : connecté" | wc -l

Extrait de la sortie :

1 #Le système est connecté à Internet

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

0voto

octius4u Points 1

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

echo $(nm-online) $? problèmes de connexion

0voto

Sam Points 1

J'ai cherché un script qui testerait continuellement ma connexion internet, qui serait lancé chaque fois que mon serveur serait en ligne et j'ai créé ceci :

  1. Tout 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 "$1" in
      start)
            log_daemon_msg "Démarrage du testeur de connexion Internet"
            /etc/init.d/testcond &
            echo $! > $PIDFILE
            log_end_msg $?
        ;;
      stop)
            log_daemon_msg "Arrêt du testeur de connexion Internet"
            PID=$(cat $PIDFILE)
            kill -9 "$PID"
            log_end_msg $?
        ;;
      *)
        echo "Utilisation: /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
        #attendre 5 secondes 
        sleep 5
        itest=$(fping 8.8.8.8 | grep alive)
    done
    date | mail -s "Le serveur est en ligne et Internet fonctionne" votre_email@gmail.com
    
    #boucler indéfiniment
    while [ "1" == "1" ] 
    do
        itest=$(fping 8.8.8.8 | grep alive)
        #si Internet est hors service
        if [ "$itest" == "" ] 
        then
            #echo Internet est hors service
            #noter l'heure à laquelle il a été trouvé en panne
            current_time=$(date)
            echo "Internet a été trouvé hors service @ $current_time" >> /mnt/data/Server/internet_log.txt
            #boucler jusqu'à ce qu'il revienne
            while [ "$itest" == "" ] 
            do
                #attendre 60 secondes 
                sleep 60
                itest=$(fping 8.8.8.8 | grep alive) # tester Internet
            done
            #quand il revient
            current_time=$(date)
            echo "Internet est de retour        @ $current_time" >> /mnt/data/Server/internet_log.txt
            body=$(tail -2 /mnt/data/Server/internet_log.txt)
            echo "$body" | mail -s "Internet est de retour en ligne" votre_email@gmail.com
        fi
        #echo Internet est en ligne
        #attendre 60 secondes
        sleep 60
    done
  4. Ensuite, j'ai exécuté les commandes ci-dessous pour ajouter au démarrage :

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

0voto

pabloab Points 47

Vérifier si Internet fonctionne n'est pas si trivial. ping est ICMP, donc cela peut fonctionner même si le proxy web est hors service. Quelque chose de similaire se produit avec DNS si vous testez avec une adresse IP.

Comme ma connexion Internet est instable, j'ai créé ce script (basé sur celui-ci) qui émet un doux son de corde pour me téléphoner, et utilise également les notifications Ubuntu lorsque la connexion Internet revient:

#!/bin/bash

hash play 2>&- || { echo >&2 "J'ai besoin de «play» mais il n'est pas installé. Essayez apt-get install sox. Abandon."; exit 1; }

WGET="`which wget`"
URL="http://www.google.com"
delay=3;
noConnectionMessage="Pas de connexion, nouvel essai dans $delay secondes...";
connectionMessage="NOUS AVONS INTERNET! :) Nouvel essai dans $delay secondes...";

echo "TESTEUR INTERNET: Appuyez sur Ctrl+C pour quitter";
rm --force /tmp/index.site

function playSound {
    time=1;    # Temps de lecture
    if [ `sox --version| grep -oP "v[0-9.]+" | sed "s/[v.]//g"` -lt 1431 ]; then    #analyser la version de sox, si elle est supérieure à v14.3.1, peut utiliser pluck
        play -q -n synth $time sine;
    else
        play -q -n synth $time pluck $1;
        #pour i in G4 G4 G4 E4;do play -n synth 0.1 pluck $i repeat 2;done    # Vous pouvez jouer avec quelque chose comme ça aussi :) (les trois premières notes de la 5ème symphonie de Beethoven)
    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 "L'ADRESSE est de retour"
        notify-send -i "notification-network-wireless-full" "État de la connexion:" "$connectionMessage";
        echo $connectionMessage;
        playSound E3
    fi
    sleep $delay;
done

exit 0;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X