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

Résolu
lsda26 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
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   Statut Membre Dernière intervention   190
 
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
Jacques
 
Salut,


Je ne vois pas l'utilité de pinguer en réseau local.
0
lsda26 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
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
lsda26
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
la commande awk ne fait qu'afficher ce qui sort du ping
0