Existe-t-il un moyen simple de vérifier la connectivité Internet à partir de la console? J'essaie de jouer dans un script shell. Une idée semble être 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 facile sans avoir besoin de vérifier un site qui ne plante jamais;)wget --spider http://www.google.co.in/
Edit: On dirait qu'il peut y avoir 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é 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 simplement le cingler, car le site peut être sous forte charge et peut être en cours de temporisation ou répondre très tard). Hier, il y a eu un problème avec mon Internet. Le 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 une notification lorsque j'ai une connexion Internet.
Donc, vérifier la connectivité DNS et LAN est un peu exagéré pour moi car je n'ai pas vraiment besoin de comprendre de quel problème il s'agit. Alors, que proposez-vous comment je le fais?
Voici mon script pour continuer à vérifier les temps d'arrêt de 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 façon, je dois vérifier la connectivité Internet uniquement en cas de problème avec le code de réponse de mon blog. C'est un peu lourd (car je n'utilise pas de ping) mais ne devrait pas donner de faux positifs. Droite? De plus, comment puis-je randomiser le ping sur un site différent à chaque fois, comme Facebook, Google, Yahoo etc. puis ignorez les vérifications supplémentaires jusqu'à ce que le site soit en panne ou provoquez des vérifications plus longues (10 minutes au lieu de toutes les minutes). Qu'est-ce que tu penses?
la source
Réponses:
Vérifier si un site Web spécifique est en place
Premièrement, plusieurs bons services de surveillance en ligne sont disponibles. Pour en choisir un, Pingdom inclut un compte gratuit pour surveiller une cible. (Avertissement: 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 de mettre en œuvre ceci: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, d'autres 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 exemplehost example.com <your dns server IP>
. Cela renverra 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'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 retour pour déterminer si une destination est accessible. Vous pouvez vérifier automatiquement le code retour en utilisant une variable$?
. Le paramètre-c1
limite le nombre de paquets ping à un.Vous pouvez rencontrer des problèmes avec certains wifis publics lorsqu'il existe une passerelle de connexion qui redirige tous les pings et les requêtes 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
De la sortie (extrait):
Cependant, cela ne dit pas si vous avez vraiment une connectivité ou non, juste si le câble est connecté et que quelque chose se trouve à l'autre extrémité.
la source
host
(requête DNS). C'est aussi très rapide.J'utilise cette méthode ...
la source
ping -c 1 8.8.8.8
etping -c 1 www.google.com
. Comment c'est?Je viens d'utiliser
qui s'arrête jusqu'à ce qu'une connexion réseau soit présente par le gestionnaire de réseau. A bien fonctionné. Vous pouvez aussi faire d'autres choses avec.
la source
Vérifier pour voir si un site est en place se fait généralement avec un outil de surveillance comme
nagios
. Cela surveillera en permanence le site et pourra vous informer des pannes.Lorsque je vérifie si Internet fonctionne depuis la ligne de commande, je passe par un certain nombre d'étapes:
ping google.com
(vérifie le DNS et le site accessible connu).wget
ouw3m
pour récupérer la page.Si Internet n'est pas en place, diagnostiquez vers l'extérieur.
Si Internet est en place mais que le site est en panne, vérifiez le
w3m http://isup.me/example.com
remplacementexample.com
par le site qui apparaît en panne. Utilisez wget, lynx ou le navigateur de ligne de commande dont vous disposez si vous n'avez pas installé le navigateur w3m.la source
if ! wget --spider http:///example.com; then
.[ $? != 0 ]
est le même que le test! command
. wget est documenté pour retourner 0 en cas de succès et non 0 en cas d'échec. Le if se comporte de la même manière que vous le codiez. Si wget renvoie un échec sur une réponse 200, le test échouera dans les deux cas. De même s'il renvoie 0 pour un code de réponse autre que 200.Voici le script shell que j'utilise pour tester la connectivité Internet:
alarm.sh
Vous devrez installer curl et mpg321
Vous aurez besoin d'un fichier son .mp3 renommé alarm.mp3 dans le même dossier si vous voulez une fonctionnalité d'alarme sonore. Enfin, configurez l'URL du site Web et egrep selon vos besoins.
la source
egrep -q
place deegrep ... > /dev/null
while
boucle?alarm.sh
dans le wd, donc si vous appelez ce script à partir d'un répertoire différent, ce sera une erreur, ou s'il y a un script appeléalarm.sh
dans le wd, il l'appellera à la place. C'est donc une mauvaise pratique. Vous pouvez utiliser à la"$0"
place, mais unewhile
boucle serait préférable.Vérifier si Internet fonctionne
De la sortie (extrait):
Cependant, comme mentionné par d'autres, cela ne dit pas 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.
la source
nm-tool
a été supprimé dans Ubuntu 15.04+, mais vous pouvez l'utiliser à lanmcli
place. Par exemple[[ $(nmcli -f STATE -t g) = connected ]]
nmcli -f STATE -t nm
la bonne chose est d'être indépendant des sites Web!nm-tool
etnmcli
ne vous dira que si vous êtes connecté ou non au réseau local réseau , c'est-à-dire si vous êtes connecté ou non à votre wifi / Ethernet domestique. Il ne vous dira pas si vous pouvez atteindre quoi que ce soit au-delà de votre réseau local, c'est-à-dire Internet.J'utilise cette méthode:
Il essaiera de se connecter à un site Web bien connu et s'il peut s'y connecter, nous supposerons qu'il y a Internet.
la source
J'avais besoin d'aide pour la même question, et j'ai obtenu ma réponse de cette façon:
la source
nm-online
commande ... Il retournera 0 si tout va bien. Habituellement dans toutes lesUNIX
coquilles.Vérifier si Internet fonctionne n'est pas si simple. ping est ICMP, donc cela peut fonctionner même si le proxy web est en panne. Quelque chose de similaire se produit avec DNS si vous testez avec une IP.
Étant donné que ma connexion Internet est instable, j'ai créé ce script ( basé sur celui-ci ) qui émet un doux accord pour m'appeler, et utilise également Ubuntu pour avertir lorsque la connexion Internet revient:
la source
Je cherchais un script qui testerait continuellement ma connexion Internet, qui serait démarré chaque fois que mon serveur était en marche et j'ai fait ceci:
Tout d'abord, installez fping
Créez un script init dans le dossier /etc/init.d avec le contenu suivant (je l'ai appelé testcon)
Créez un script dans le dossier /etc/init.d avec le contenu suivant (je l'ai appelé testcond)
Ensuite, j'exécute les commandes ci-dessous pour ajouter au démarrage:
Redémarrer
la source
J'ai été confronté à des abandons aléatoires de connexions Wi-Fi par mon
Broadcom BCM94331CD
puce. J'ai conçu le script bash suivant (boucle infinie) vérifiant chaque seconde si la connexion Internet Wi-Fi est opérationnelle. L'autre ligne de commande proposée ici attendra au moins 5 à 10 secondes avant de se fermer avec un état ieping
. En attendant, je recherche également une solution définitive.À partir des résultats sur askubuntu, je devrai purger le
bcmwl-kernel-source
package au furfirmware-b43-installer
et à mesure que j'utilise etb43-fwcutter
.Merci à tous pour leurs suggestions (ci-dessus).
Ce script doit être ajouté dans les programmes de démarrage et n'a pas besoin de
super user
privilèges pour s'exécuter également.la source