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 ?

36voto

Olli Points 8476

Vérification si un site Web spécifique est en ligne

Tout d'abord, plusieurs bons services de surveillance en ligne sont disponibles. Pour en choisir un, Pingdom propose un compte gratuit pour surveiller une cible. (Clause de non-responsabilité : je ne suis pas affilié à Pingdom d'aucune manière).

Deuxièmement, utiliser wget --spider pour votre propre script est une bonne idée. Vous obtiendrez quelques faux positifs lorsque votre ordinateur est hors service, ou lorsque votre serveur DNS ne fonctionne pas. Vérifier le code de retour est une façon simple de procéder:

wget --spider --quiet http://exemple.com
if [ "$?" != 0 ]; then
  echo "Le site Web a échoué!" | mail -s "Site Web hors service" votre_email@fournisseur.tld
fi

Néanmoins, il existe des lacunes dans cette approche. Si votre fournisseur a mis en cache votre enregistrement DNS, mais que le serveur DNS est hors service, d'autres ne pourront pas accéder à votre site même si la surveillance indique que tout va bien. Vous pouvez écrire une petite solution de contournement avec host, par exemple host exemple.com . Cela renverra une erreur si le serveur DNS ne répond pas, même si OpenDNS ou le serveur DNS de votre fournisseur fonctionne correctement.

Vérification si Internet fonctionne

Il n'y a 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 atteignable. 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 certains réseaux Wi-Fi publics lorsqu'il y a une passerelle de connexion qui redirige tous les pings et requêtes HTTP. Si c'est le cas, vous pouvez recevoir des réponses aux pings et des codes d'état HTTP non erronés, même lorsque vous ne pouvez pas accéder à d'autres sites.

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

sudo ethtool eth0

À partir de la sortie (extrait) :

Vitesse : 1000Mb/s
Duplex : Complet
Port : Paire torsadée
Lien détecté : oui

Cependant, cela ne vous dit pas si vous avez vraiment une connectivité ou non, simplement que le câble est connecté et que quelque chose est de l'autre côté.

10voto

ntsecrets Points 101

J'ai simplement utilisé

nm-online

qui met en pause jusqu'à ce qu'une connexion réseau soit présente par le gestionnaire de réseau. Ça a bien fonctionné. Vous pouvez également faire d'autres choses avec.

9voto

bais bais Points 91

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

if \[\[ "$(ping -c 1 8.8.8.8 | grep 'perte de paquets 100%' )" != "" \]\]; then
    echo "Internet n'est pas présent"
    exit 1
else
    echo "Internet est présent"
    wget www.site.com
fi

8voto

AdamB Points 1290

Vérifier si un site est en ligne est généralement fait avec un outil de monitoring comme nagios. Cela surveillera continuellement le site et peut vous informer des pannes.

Lors de la vérification de la connexion Internet depuis la ligne de commande, je passe par plusieurs étapes:

  • Vérifier si Internet est accessible ping google.com (vérifie le DNS et un site accessible connu).
  • Vérifier si le site web est accessible en utilisant wget ou w3m pour récupérer la page.

Si Internet n'est pas accessible, diagnostiquer vers l'extérieur.

  • Vérifier si la passerelle est joignable. (Vérifier ifconfig pour l'adresse de la passerelle.)
  • Vérifier si les serveurs DNS sont joignables. (Vérifier /etc/resolv.conf pour les adresses.)
  • Vérifier si le pare-feu bloque quelque chose. (Vérifier /var/log/syslog car j'y enregistre les blocages.)

Si Internet est accessible mais que le site est inaccessible, vérifiez avec w3m http://isup.me/example.com en remplaçant example.com par le site qui semble être inaccessible. Utilisez wget, lynx ou n'importe quel navigateur en ligne de commande que vous avez disponible si vous n'avez pas le navigateur w3m installé.

4voto

Novarg Points 41

Ceci est le script 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 État de l'Internet : OK
else
    echo État de l'Internet : ERREUR
    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 son .mp3 renommé en alarm.mp3 dans le même dossier si vous voulez une fonctionnalité d'alarme audible. Enfin, configurez l'URL du site web et egrep selon vos besoins.

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