Comment vérifier à partir d'une ligne de commande que le réseau est accessible?

12

Je veux m'envoyer un grognement une fois que le serveur SuSE a terminé le processus de démarrage. J'ai eu ce message socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Comment puis-je vérifier à partir de la ligne de commande si le réseau est accessible et attendre au cas où il ne l'est pas?


Radek
la source
Linux one-liner pour répondre oui ou non, sommes - nous connectés à Internet: ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". Cela fait cingler le serveur avec un paquet et greps la sortie pour la chaîne "perte de paquet de 0%". (l'espace avant le 0% est important) Si la commande retourne une ligne, vous êtes connecté, sinon, pas connecté.
Eric Leschinski

Réponses:

13

ping à un hôte extérieur peut échouer pour une multitude de raisons, dont seulement quelques-unes disent réellement quelque chose d'utile sur l'état de votre propre réseau.

Dans un premier temps, ouvrez une fenêtre de terminal et tapez ip route ls

Vous devriez voir une sortie dans le sens de

shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0  proto kernel  scope link  src 192.168.15.102 
default via 192.168.15.1 dev eth0 

Cela indique que votre réseau local est une connexion Ethernet ( eth0) avec l'adresse 192.168.15.0, et que sa passerelle par défaut via laquelle il accède au reste d'Internet se trouve sur 192.168.15.1.

Ensuite, vous pouvez essayer à pingcette adresse:

shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms

Si vous voyez quelque chose de similaire à ce qui précède, votre propre réseau local est, au moins, très bien. À ce stade, vous pouvez commencer à chercher avec des outils plus avancés, comme traceroutepour voir où votre connexion à la destination peut échouer.

Cependant, après une rapide vérification par Google de ce qui growlest réellement censé être, j'ai l'impression qu'il y a autre chose qui ne va pas. Pouvez-vous développer votre question pour nous donner quelques détails supplémentaires sur ce que vous essayez de faire, comment vous essayez de le faire et la sortie d'erreur complète? La ligne que vous nous donnez actuellement est brusquement coupée ...

Shadur
la source
3
ip route get 1.2.3.4est plus fiable que de le faire ip route ls. Le premier prendra effet toutes les règles qui sont en place en plus des itinéraires. Il supprime également la possibilité de mal lire les tables de routage.
Patrick
3

Un moyen très simple et rapide consiste à utiliser la pingcommande.

Vous pouvez simplement taper

 $ ping yahoo.com

(ou cnn.com ou tout autre hôte) et voyez si vous obtenez une sortie. Cela suppose que les noms d'hôtes peuvent être résolus (c'est-à-dire que dns fonctionne). Sinon, vous pouvez, espérons-le, fournir une adresse IP / un numéro valide d'un système distant et voir s'il peut être atteint.

Voici la page de manuel ping .

Mise à jour :

Comme exemple rapide, vous pouvez vérifier la valeur de retour (par exemple, avec "echo $?") de pingpour voir si la commande a réussi (vous pouvez toujours diriger la sortie de la commande vers > /dev/nul). Remarque J'utilise -c 1ici, mais vous pouvez en utiliser plus.

$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms

--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms

echo $?
0


$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here

$ echo $?
2
Levon
la source
Mais comment puis-je réaliser en utilisant ping que tout va bien?
Radek
1
@Radek Avez-vous déjà essayé de l'exécuter? ping vous indique s'il obtient des réponses.
jw013
Que se passe-t-il si le serveur est uniquement sur l'intranet et n'a pas accès au monde extérieur?
Radek
@ jw013: Je n'ai pas essayé ... Je ne sais pas utiliser ping depuis un script sans assistance.
Radek
3
@Radek c'est assez simple. Je suppose que par «connectivité», vous voulez dire qu'il peut parler à un autre hôte sur l'intranet. Donc, exécutez ping -c 2 -n <other host's IP>et opérez sur le code retour: si true (0), alors il a une connectivité; s'il est faux (1), il ne peut pas parler à cette machine.
lxop
2

mtr est un outil similaire au ping mais vous donne plus d'informations telles que la perte de paquets, les statistiques sur les temps de trajet des paquets, etc ...

Sardathrion - contre les abus SE
la source