Comment filtrer les infos d'un ping en temps réel? [Résolu/Fermé]

Signaler
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013
-
dubcek
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
-
Bonjour,
Bonjour,
J'essaie de filtrer et d'enregistrer dans un fichier uniquement les lignes que renvoi une commande ping et qui contiennent une valeur time >50.

Par exemple:
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=4.85 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=1.37 ms
64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=1.07 ms
64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=1.05 ms
64 bytes from 192.168.1.1: icmp_req=5 ttl=64 time=1.17 ms
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms
64 bytes from 192.168.1.1: icmp_req=7 ttl=64 time=1.06 ms
64 bytes from 192.168.1.1: icmp_req=8 ttl=64 time=0.977 ms
64 bytes from 192.168.1.1: icmp_req=9 ttl=64 time=1.54 ms
64 bytes from 192.168.1.1: icmp_req=10 ttl=64 time=1.62 ms
64 bytes from 192.168.1.1: icmp_req=11 ttl=64 time=1.10 ms

je souhaiterai donc pendant la commande de ping, enregistrer dans un fichier, uniquement les lignes ayant un "time" supérieur à 10. Soit dans ce cas, seulement la ligne:
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms

Avec un ping + cut j'arrive à extraire toutes les valeur situées après le "time=", mais du coups je n'est plus la ligne complète. De plus je n'arrive pas à appliquer un if la valeur situé après le "time=" de la ligne du ping en cours est >10 alors affiche la ligne du ping en cours.

J'espère avoir été claire.
Merci pour votre aide.




12 réponses

Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
et avec
$ t=50; ping 192.168.1.1 | awk -W interactive -F "[ =]*" -v t=$t '$(NF-1) > t {print}' 
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 87037 internautes nous ont dit merci ce mois-ci

Messages postés
1184
Date d'inscription
lundi 23 juillet 2012
Statut
Membre
Dernière intervention
28 mai 2019
115
Salut,

une solution via awk :
ping -i 0.2 192.168.1.1 | awk -F"=" '{S=substr($NF,1,length($NF)-3);if (S>10) {print S} }'
Salut,


Je ne vois pas l'utilité de pinguer en réseau local.
lsda26
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

L'intérêt de pinger un réseau local a, au contraire tout sont sens, car pinger un switch saturé par sa limite de commutation, son utilisation cpu élevée, ou une saturation de son lien fera apparaître des temps de réponse élevés et donc anormal.
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

Bonjour tuxboy et merci pour ton aide.
Mais cette commande ne semble pas fonctionner car cela m'affiche uniquement des valeurs par rafale des valeurs de la variable S qui sont en plus inférieur à 10. Alors que je ne devrais avoir que celle supérieur à 10.
De plus je ne veut pas afficher que S. Je veut afficher les lignes complètes du ping qui on une valeur S>10.
Mais je ne sais pas si c'est possible de mettre en mémoire la chaine de caractère de la ligne du ping dans une variable A=>chercher dans cette variable A si une valeur est supérieur à 10=>si oui, afficher la chaine entière contenue dans la variable A.
Biensur tous celà assez rapidement pour ne pas trops dévier entre le momment du ping et sont affichage à l'écran.
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

En grattant un peu, j'arrive à avoir à peu près ce que je veut avec cette commande:
ping 192.168.1.1 | awk -F "=" '{S=substr($NF,1,length($NF)-3);if (S>=5) {print $0} }'
Je dis à peu près car, en fait je n'arrive pas à voir les ligne de ping qui verifie la condition, en continu. On dirait qu'une grande quantité de ligne de ping verifiant la condition sont stocké en mémoire avant de les afficher par grappe après une long période sans rien afficher.
De quoi celà peut-il venir? Je voudrait traiter avec le awk, ping à son arrivé et donc les afficher tout de suite si il vérifie la condition...
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
hello
quelle version de awk ?
awk --version
essayer
$ t=50; ping 192.168.1.1 | awk -F "[ =]*" -v t=$t '$(NF-1) > t {print; fflush()}' 
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

voici ce que me renvoi la console après avoir lancé la commande: awk --version
awk: not an option: --version

Avec la commande précédente, on voie toujours apparaître les ligne de ping par vague de parfois 5 lignes, 15 lignes, etc...
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

Ca y est, ca semble fonctionner comme il faut avec cette dernière commande!
Merci bien!
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013

Juste une dernière chose:
Avec la commande:
ping $IP -c 1 | grep icmp | awk -W interactive -F "[ =]*" -v t=$t '$(NF-1) > t {print}'

comment afficher la date+hh:mm:ss au debut de chaque ligne qui ressort après le awk

Merci
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
pas besoin du grep
ping $IP -c 1 | awk -W interactive -F "[ =]*" -v t=$t '/icmp/ && $(NF-1) > t {"date +\"%D %T\""|getline d; print d, $0}'
Cette ligne de commande me renvoie de fausse valeur du ping de l'ordre de 400 à 1300ms alors qu'un ping simple me donne environ 0.1ms.
Peut-être est-ce du au temps de traitement de la commande?
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
la commande awk ne fait qu'afficher ce qui sort du ping