Comment obtenir le pourcentage de paquets reçus de Ping en bash?
Lorsqu'une requête ping à un hôte, je veux que ma sortie juste pour montrer le pourcentage de paquets (5 envoyé). Je suppose que j'ai besoin d'utiliser grep
en quelque sorte, mais je ne peux pas comprendre comment (je suis nouveau à bash de programmation). Voici où j'en suis: ping -c 5 -q $host | grep ?
. Ce qui devrait aller dans un grep? Je pense que je vais devoir faire un peu d'arithmétique pour obtenir le pourcentage de reçus, mais je peux le gérer. Comment puis-je sors l'info j'ai besoin du résumé de ping sera sortie?
OriginalL'auteur austinminn | 2011-11-29
Vous devez vous connecter pour publier un commentaire.
Comme toujours, il y a beaucoup de façons de le faire., mais voici qu'une seule option:
Cette expression sera de capturer le pourcentage des chiffres de "X% de perte de paquets"
Vous pouvez ensuite soustraire la "perte" pourcentage de 100 pour obtenir le "succès" pourcentage:
OriginalL'auteur Martin
Jusqu'à présent, nous avons obtenu une réponse à l'aide de grep, sed, perl, en colombie-britannique, et bash. Voici la saveur de AWK, "un langage de programmation interprété conçu pour un traitement de texte". Cette approche est conçu pour la lecture/la capture en temps réel de perte de paquets d'informations à l'aide de ping.
À voir seulement de perte de paquets d'informations:
De commande
De sortie
Cependant, je trouve qu'il est utile de voir de l'entrée d'origine. Pour cela, il suffit d'ajouter
print $0;
pour le dernier bloc dans le script:De commande
De sortie
Comment tout cela fonctionne?
Vous lisez la commande, il a essayé, et ça marche!!! Donc ce qui se passe exactement?
Nous commençons par la commande ping google.com et la tuyauterie de sortie en
awk
, l'interprète. Le tout dans des guillemets simples définit la logique de notre script.Ici, il est dans un espace convivial format:
On peut le décomposer en trois éléments:
Chaque fois ping sorties de l'information, le script AWK, de consommer et de l'exécuter cette logique par rapport à cela.
Recueillir Des Données
Celui-ci dispose de trois actions; la définition de la
sent
,received
, etloss
variables.NR
est un AWK variable pour le nombre d'enregistrements. Dans AWK, un enregistrement correspond à une ligne. Dans notre cas, une seule ligne de sortie de ping. La première ligne de sortie de ping est un en-tête et ne représente pas une réelle requête ICMP. Nous avons donc créer une variable,sent
, et de l'attribuer le numéro de ligne courant moins un.Ici, nous utilisons une Régulière Expresssion,
^.*(time=.+ ms).*$
, afin de déterminer si la requête ICMP a été un succès ou pas. Depuis tous les succès de ping renvoie la longueur de temps qu'il a fallu, nous les utilisons comme nos clés.Pour ceux qui ne sont pas grandes, avec des modèles regex, c'est ce que la nôtre signifie:
^
de départ au début de la ligne.*
correspondent à rien jusqu'à la prochaine règle(time=.+ ms)
match "temps=N ms", où N peut être un ou plus de n'importe quel caractère.*
correspondent à rien jusqu'à la prochaine règle$
arrêter à la fin de la ligneLorsque le profil correspond, on incrémente le
received
variable.Calculer La Perte
Maintenant que nous savons combien de requêtes ICMP ont été envoyés et reçus, nous pouvons commencer à faire le calcul pour déterminer la perte de paquets. Pour éviter un diviser par zéro erreur, nous nous assurons une demande a été envoyée avant de faire les calculs. Le calcul lui-même est assez simple:
received/sent
= pourcentage de réussite au format décimal*100
= convertir un nombre décimal à l'entier le format100-
= inverser le pourcentage de réussite à l'échecDe sortie
Enfin, nous avons juste besoin d'imprimer les informations pertinentes.
Je ne veux pas me souvenir de tout cela
Au lieu de taper ça à chaque fois, ou de la chasse à cette réponse, vous pouvez enregistrer le script dans un fichier (par exemple,
packet_loss.awk
). Ensuite, tout ce que vous devez est de type:OriginalL'auteur Exide
En supposant que votre ping résultats ressemblent:
La tuyauterie de votre
ping -c 5 -q
par:Rendements:
Et puis vous pouvez effectuer votre calcul.
Le nombre de paquets envoyés a été spécifié dans la commande ping ligne.
OriginalL'auteur MattH
OriginalL'auteur uzsolt
Essayer un script:
L'enregistrer, et de l'exécuter avec deux ligne de commande args. Le premier est le nombre de paquets, la deuxième est l'hôte.
OriginalL'auteur Spencer Rathbun
Fait ce travail pour vous?
Il prend le pourcentage indiqué par
ping
et soustrait à partir de 100 pour obtenir le pourcentage de paquets reçus.OriginalL'auteur choroba