Comment tester une connexion Internet avec bash?
Comment peut une connexion internet être testé sans un ping vers un site web?
Je veux dire, que si il y a un lien, mais le site est down? Est-il vérifier pour une connexion avec le monde?
- ping plusieurs sites différents?
- mais je ne veux pas de ping des sites web, il n'y a pas d'autre option?
- Je veux juste voir qu'il y a peut-être d'autre moyen!
- Il n'y a pas de meilleur moyen que de l'envoi et de la réception d'un paquet unique à un ensemble d'adresses que vous ne savez pas à aller hors ligne tout à la fois, une autre façon est de vérifier votre jeu actuel DNS si vous ne voulez pas que votre demande de ping une plus domaine public.
- Je ne peux pas parler pour l'original interlocuteur de raisons, mais certains endroits bloc de ping. Par exemple, sur mon lieu de travail je ne peux pas le ping en dehors de tout mon sous-réseau.
- Je veux savoir si quelqu'un est à l'écoute, sans faire de bruit!
Vous devez vous connecter pour publier un commentaire.
Sans ping
-q : mode Silence
--spider : ne pas l'obtenir, il suffit de consulter la page de la disponibilité
$? : shell code de retour
0 : shell "Tout est OK" code
Sans wget
nc
pour s'assurer qu'il expire. quelque chose commenc google.com 80 -w 10
ping
de commande.wget
a bien fonctionné maisget
retourne toujours faux (même avec une connexion internet)wget
ninc
(git-bash sur windows), mais il a curl. Pourriez-vous inclure lecurl
équivalent de lawget
réponse? en particulier, je ne suis pas sûr de ce qui serait l'équivalent exact de--spider
pour le roulage. Merci!Un Ping de votre passerelle par défaut:
function ping_gw() { ... && return 0 || return 1 }
et ensuite utilisé comme:ping_gw || (echo "no network, bye" && exit 1)
/sbin
répertoire n'est pas dans le chemin d'accès par défaut (comme Mageia), il faut ajoutersudo
ou/sbin/
avant ça, comme ça:ping -q -w 1 -c 1 `/sbin/ip r | grep default | cut -d ' ' -f 3`
ifconfig down wlan0
et j'ai encore une passerelle par défaut et il est pingable, même si j'en fait ne peut pas atteindre le monde extérieur.ip r
et la commande échoue. Un bon moyen serait probablement ping à la fois, cependant, j'ai changé la commande grep pourgrep -m 1 default
juste essayer à la première, et maintenant il retourne OK.without pinging some website
Super Merci à l'utilisateur somedrew leur post ici: https://bbs.archlinux.org/viewtopic.php?id=55485 sur 2008-09-20 02:09:48
Voici mon script de test pour une connexion réseau autre que la boucle de retour.
J'utilise le ci-dessous dans un autre script que j'ai périodiquement pour tester si mon site est accessible. Si elle n'est PAS accessible, une fenêtre pop-up me prévient d'un problème.
Le script ci-dessous qui m'empêche de recevoir des messages popup toutes les cinq minutes, chaque fois que mon portable n'est pas connecté au réseau.
Note pour ceux qui sont nouveaux à bash: La finale de " si " déclaration des tests, si ce n'est PAS [!] en ligne et se ferme si c'est le cas. Voir man bash et de la recherche pour "Expressions peuvent être combinés pour plus de détails.
P. S. je me sens ping n'est pas la meilleure chose à utiliser ici, car il vise à tester une connexion à un hôte particulier PAS de test si il y a une connexion à un réseau de toute sorte.
P. P. S. Les travaux ci-Dessus sur Ubuntu 12.04 Le /sys ne peut pas exister sur d'autres distros. Voir ci-dessous:
cat /sys/class/net/wwan0/carrier
ne fonctionne pas sur ubuntu 14.04 LTS.2>/dev/null
aprèscat /sys/class/net/$interface/carrier
de ne pas avoir d'erreur de sortie en cas de réseau est désactivée.Cela fonctionne sur les deux MacOSX et Linux:
ping: invalid option -- w
)fping google.com
ou tout simplementfping 8.8.8.8
fait la magie avec un bonus, vous obtenez le code d'état sans avoir besoin de le tester ("google.com is alive
")...J'ai écrit des scripts avant que simplement utiliser telnet pour vous connecter sur le port 80, puis de transmettre le texte:
suivie par deux CR/LF séquences.
À condition que vous obtenez en retour une certaine forme de réponse HTTP, vous pouvez généralement supposer que le site fonctionne.
La réponse sommet rate le fait que vous pouvez avoir une parfaite connexion stable à votre passerelle par défaut, mais cela ne signifie pas automatiquement que vous pouvez réellement atteindre quelque chose sur l'internet. L'OP demande comment il/elle peut tester une connexion avec le monde. Je suggère donc de modifier la réponse sommet, en changeant l'IP de la passerelle à l'IP (x.y.z.w), qui est à l'extérieur de votre réseau local.
Donc, la réponse devient:
Supprimant également la unfavored backticks pour la substitution de commande[1].
Si vous voulez juste assurez-vous que vous êtes connecté au monde avant l'exécution du code, vous pouvez également utiliser:
assurez-vous que votre réseau TCP trafic, alors vous pourriez récupérer votre public face IP avec la commande suivante
Exécuter la commande suivante pour vérifier si un site web est en place, et ce message d'état du serveur web montre:
$ 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 d'un site internet est accessible.
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Si votre serveur est en panne,
est un facile-à-souvenez-vous toujours d'adresses IP (c'est en fait un serveur de noms, même).
En Bash, en utilisant son réseau wrapper par /dev/{udp,tcp}/hôte/port:
plus court chemin:
fping 4.2.2.1
=> "4.2.2.1 est vivant"je préfère ce que c'est plus rapide et moins verbeux sortie de
ping
, inconvénient est que vous aurez à installer.vous pouvez utiliser n'importe quel public dns plutôt que d'un site web spécifique.
fping -q google.com && echo "do something because you're connected!"
-q
renvoie un code de sortie, donc je suis juste montrer un exemple d'exécution de quelque chose que vous êtes en ligne.à installer sur le mac:
brew install fping
; sur ubuntu:sudo apt-get install fping
La top voté répondre ne fonctionne pas pour MacOS donc, pour ceux sur un mac, j'ai testé avec succès ce:
testé sur MacOS High Sierra 10.12.6
route
commande pourroute -n get default 2> /dev/null | grep gateway
pour éviter d'écrire une erreur vers stderr en mode hors connexion.Ping a été conçu pour faire exactement ce que vous cherchez à faire. Toutefois, si le site ICMP echo, alors vous pouvez toujours faire du telnet sur le port 80 de certains site, wget ou curl.
Vérification de l'index de Google de la page est une autre façon de faire:
De même pour @Jesse répondre, cette option pourrait être beaucoup plus rapide que n'importe quelle solution à l'aide de
ping
et peut-être légèrement plus efficace que le @Jesse répondre.Explenation:
Cette commande utilise
find
avec-exec
pour exécuter une commande sur tous les fichiers qui ne sont pas nommées*lo*
dans/sys/class/net/
. Ceux-ci devraient être des liens vers des répertoires contenant des informations sur les interfaces réseau disponibles sur votre machine.La commande exécutée est une
sh
de commande qui vérifie le contenu du fichiercarrier
dans ces répertoires. La valeur de$interface/carrier
a 3 significations - Citant:La première option n'est pas prise en charge dans @Jesse répondre. Le
sh
commande rayé est:cat
est utilisé pour vérifier le contenu decarrier
de rediriger tous sortie standard, même quand il échoue parce que le fichier n'est pas lisible.Si
grep -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 dernier code de sortie.D'utilisation
Par exemple, à l'aide de cette commande de sortie de statut, vous pouvez l'utiliser démarrer une gnubiff dans votre
~/.xprofile
seulement si vous avez une connexion internet.De référence
/sys/class/net/
Ce script bash vérifier en continu sur Internet et de faire un bip sonore lorsque la connexion Internet est disponible.
Pong ne veut pas dire de service web sur le serveur est en cours d'exécution; il signifie simplement que le serveur est de répondre à l'écho ICMP.
Je recommande l'utilisation de curl et vérifier sa valeur de retour.
Si votre objectif est de vérifier pour Internet d'accès, un grand nombre de réponses à cette question sont imparfaits. Quelques choses que vous devriez être au courant:
Avec cela à l'esprit, je crois que la meilleure stratégie est de contacter plusieurs sites via une connexion HTTPS et retourne true si l'un de ces sites répond.
Par exemple:
Utilisation:
Quelques notes à propos de cette approche:
if wait $pid;
. Aucune idée de pourquoi cela ne fonctionne pas sur votre système. Êtes-vous sûr que vous utilisez bash?wait
et maintenant de comprendre le code de retour est en effet en cours d'essai. Je re-copié le code, et aujourd'hui, il fonctionne - oups! Je dois avoir loupé quelque chose, la dernière fois même si je ne comprends pas quoi ou comment. Néanmoins, mea culpa. Des excuses.C'est notamment plus rapide que n'importe quelle solution posté ici, et peut être utilisé pour tester un hôte spécifique trop.
Le truc, c'est la résolution de l'adresse IP à l'aide d'un moins occupé DNS solveur que celle employée par
ping
: