Comment filtrer les infos d'un ping en temps réel?

Résolu/Fermé
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013 - 22 mai 2013 à 16:13
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 27 mai 2013 à 11:11
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.




A voir également:

12 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
24 mai 2013 à 11:07
et avec
$ t=50; ping 192.168.1.1 | awk -W interactive -F "[ =]*" -v t=$t '$(NF-1) > t {print}' 
1
tuxboy Messages postés 995 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 28 mai 2019 190
22 mai 2013 à 21:13
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} }'
0
Salut,


Je ne vois pas l'utilité de pinguer en réseau local.
0
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
Modifié par lsda26 le 23/05/2013 à 14:55
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.
0
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
24 mai 2013 à 08:22
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
24 mai 2013 à 09:55
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...
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
Modifié par dubcek le 24/05/2013 à 10:18
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()}' 
0
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
24 mai 2013 à 11:03
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...
0
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
24 mai 2013 à 11:34
Ca y est, ca semble fonctionner comme il faut avec cette dernière commande!
Merci bien!
0
lsda26 Messages postés 68 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 septembre 2013
24 mai 2013 à 16:51
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
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
25 mai 2013 à 08:36
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}'
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?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
27 mai 2013 à 11:11
la commande awk ne fait qu'afficher ce qui sort du ping
0