Comment tester une connexion Internet sans envoyer de requête ping à un site Web? Je veux dire, que se passe-t-il s'il y a une connexion mais que le site est en panne? Y a-t-il un contrôle pour une connexion avec le monde?
bash
connection
ping
lauriys
la source
la source
Réponses:
Sans ping
-q : mode silence
--spider : n'obtenez pas, vérifiez simplement la disponibilité de la page
$?: code retour du shell
0 : code shell "Tout est OK"
Sans wget
la source
nc
pour vous assurer qu'il expire . quelque chose commenc google.com 80 -w 10
Ping votre passerelle par défaut:
la source
function ping_gw() { ... && return 0 || return 1 }
puis utilisé comme ceci:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
et j'ai toujours une passerelle par défaut et elle est pingable, même si je ne peux en fait pas atteindre le monde extérieur.Super merci à l'utilisateur somedrew pour son message ici: https://bbs.archlinux.org/viewtopic.php?id=55485 le 20/09/2008 02:09:48
Voici mon script pour tester une connexion réseau autre que la boucle de retour. J'utilise ce qui suit dans un autre script que j'ai pour tester périodiquement si mon site Web est accessible. Si ce n'est PAS accessible, une fenêtre contextuelle me signale un problème.
Le script ci-dessous m'empêche de recevoir des messages contextuels toutes les cinq minutes lorsque mon ordinateur portable n'est pas connecté au réseau.
Remarque pour les nouveaux utilisateurs de bash: la dernière instruction «if» teste si NON [!] En ligne et se termine si c'est le cas. Voir man bash et recherchez «Les expressions peuvent être combinées» pour plus de détails.
PS Je pense que le ping n'est pas la meilleure chose à utiliser ici car il vise à tester une connexion à un hôte particulier PAS à tester s'il existe une connexion à un réseau de quelque sorte que ce soit.
PPS The Above fonctionne sur Ubuntu 12.04 Le / sys peut ne pas exister sur certaines autres distributions. Voir ci-dessous:
la source
cat /sys/class/net/wwan0/carrier
Ne fonctionne pas sur ubuntu 14.04 LTS.2>/dev/null
aprèscat /sys/class/net/$interface/carrier
pour ne pas avoir de sortie d'erreur au cas où le réseau est désactivé.Cela fonctionne à la fois sur MacOSX et Linux:
la source
ping: invalid option -- w
)fping google.com
ou tout simplementfping 8.8.8.8
faire la magie avec un bonus vous obtenez le code de statut sans avoir besoin de le tester ("google.com is alive
") ...Dans Bash, en utilisant son wrapper réseau via / dev / { udp , tcp } / host / port :
(
:
est le Bash no-op, car vous voulez juste tester la connexion, mais pas le traitement.)la source
J'ai écrit des scripts avant cela, utilisez simplement telnet pour vous connecter au port 80, puis transmettez le texte:
suivi de deux séquences CR / LF.
À condition de récupérer une forme de réponse HTTP, vous pouvez généralement supposer que le site fonctionne.
la source
La réponse principale ne tient pas compte du fait que vous pouvez avoir une connexion parfaitement stable à votre passerelle par défaut, mais cela ne signifie pas automatiquement que vous pouvez réellement atteindre quelque chose sur Internet. Le PO demande comment il / elle peut tester une connexion avec le monde. Je suggère donc de modifier la réponse principale en changeant l'adresse IP de la passerelle en une adresse IP connue (xyzw) qui se trouve en dehors de votre LAN.
La réponse deviendrait donc:
Suppression également des backticks défavorables pour la substitution de commande [1] .
Si vous voulez juste vous assurer que vous êtes connecté au monde avant d'exécuter du code, vous pouvez également utiliser:
la source
assurez-vous que votre réseau autorise le trafic TCP entrant et sortant, vous pourrez alors récupérer votre adresse IP publique avec la commande suivante
la source
Exécutez la commande suivante pour vérifier si un site Web est actif et quel message d'état le serveur Web affiche:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
Le code d'état «200 OK» signifie que la demande a réussi et qu'un site Web est accessible.
la source
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Si votre serveur de noms local est en panne,
est une adresse IP toujours active et facile à retenir (c'est en fait un serveur de noms, même).
la source
le réponse la plus votée ne fonctionne pas pour MacOS, donc pour ceux sur Mac, j'ai testé avec succès ceci:
testé sur MacOS High Sierra 10.12.6
la source
route
commande enroute -n get default 2> /dev/null | grep gateway
pour éviter d'écrire une erreur dans stderr en mode hors connexion.Ce script bash vérifie en permanence Internet et émet un bip lorsque Internet est disponible.
la source
chemin le plus court:
fping 4.2.2.1
=> "4.2.2.1 est vivant"je préfère cela car c'est une sortie plus rapide et moins verbeuse que
ping
, l'inconvénient est que vous devrez l'installer.vous pouvez utiliser n'importe quel DNS public plutôt qu'un site Web spécifique.
fping -q google.com && echo "do something because you're connected!"
-q
renvoie un code de sortie, donc je montre juste un exemple d'exécution de quelque chose que vous êtes en ligne.à installer sur mac:
brew install fping
; sur ubuntu:sudo apt-get install fping
la source
Ping a été conçu pour faire exactement ce que vous cherchez à faire. Cependant, si le site bloque l'écho ICMP, vous pouvez toujours faire le telnet sur le port 80 d'un site, wget ou curl.
la source
Vérifier la page d'index de Google est une autre façon de le faire:
la source
De la même manière que la réponse de @ Jesse , cette option pourrait être beaucoup plus rapide que n'importe quelle solution utilisant
ping
et peut-être légèrement plus efficace que la réponse de @ Jesse .Explication:
Cette commande utilise
find
avec-exec
pour exécuter la commande sur tous les fichiers non nommés*lo*
dans/sys/class/net/
. Il doit s'agir de liens vers des répertoires contenant des informations sur les interfaces réseau disponibles sur votre machine.La commande en cours d'
sh
exécution est une commande qui vérifie le contenu du fichiercarrier
dans ces répertoires. La valeur de$interface/carrier
a 3 significations - Citations :La première option n'est pas prise en compte dans la réponse de @ Jesse . La
sh
commande rayée est:cat
est utilisé pour vérifier le contenu decarrier
et rediriger toute la sortie vers la sortie standard même en cas d'échec car le fichier n'est pas lisible. Sigrep -q
trouve"1"
parmi ces fichiers, cela signifie qu'il y a au moins 1 interface connectée. Le code de sortie degrep -q
sera le code de sortie final.Usage
Par exemple, en utilisant l'état de sortie de cette commande, vous pouvez l'utiliser pour démarrer un gnubiff dans votre
~/.xprofile
uniquement si vous avez une connexion Internet.Référence
/sys/class/net/
la source
Pong ne signifie pas que le service Web sur le serveur est en cours d'exécution; cela signifie simplement que le serveur répond à l'écho ICMP. Je recommanderais d'utiliser curl et de vérifier sa valeur de retour.
la source
Si votre objectif est de vérifier réellement l' accès à Internet , la plupart des réponses existantes à cette question sont erronées. Quelques points à prendre en compte:
Dans cet esprit, je pense que la meilleure stratégie consiste à contacter plusieurs sites via une connexion HTTPS et à renvoyer true si l'un de ces sites répond.
Par exemple:
Usage:
Quelques notes sur cette approche:
la source
if wait $pid;
. Je ne sais pas pourquoi cela ne fonctionne pas sur votre système. Êtes-vous sûr d'utiliser bash?wait
comprends maintenant que le code de retour est en effet en cours de test. J'ai recopié votre code et aujourd'hui ça marche - oups! J'ai dû foirer quelque chose la dernière fois même si je ne comprends pas quoi ni comment. Néanmoins, mea culpa. Toutes mes excuses.Avec cette commande:
.
la source
C'est nettement plus rapide que n'importe quelle solution publiée ici, et peut être utilisé pour tester un hôte spécifique .
L'astuce consiste à résoudre l'IP en utilisant un solveur DNS moins occupé que celui utilisé par
ping
:la source