Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 12/02/2013, à 13:02

DonutMan75

[RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Bonjour à tous,

j'aimerais faire un script qui analyse en dynamique la sortie d'un tcpdump.

Par exemple, je reçois une ligne de tcpdump.
    - Si proto = ARP alors echo "Requete ARP"
    - Si port = 80 alors echo "Echange WEB"
    - etc.


Le but n'est pas vraiment pratique mais plutôt didactique.

J'ai envisagé deux pistes

  1. Une redirection de l'entrée standard de mon script vers mon tcpdump

  2. Un script awk et une commande du genre "tcpdump -i eth0 | mon_script_awk"

Je me concentre dans un premier temps sur la première option (je ne connais pas bien awk).

J'envisageais quelque chose comme ça :

#!/bin/sh

# Redirection de l'entrée standard vers tcpdump
exec < $(sudo tcpdump -i eth0)

read LIGNE
echo "J'AI RECU CETTE LIGNE : $LIGNE"

Bien évidemment ça ne marche pas.....

Le exec vous paraît-il correct ?
Comment puis-je mettre en place une boucle du genre "TANT QUE read <> EOF, ALORS fais-ci fais-ça" ?

Merci d'avance smile

Donut

Dernière modification par DonutMan75 (Le 12/02/2013, à 23:53)

Hors ligne

#2 Le 12/02/2013, à 13:26

pingouinux

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Voici l'équivalent de ce que tu essayes de faire :

while read LIGNE; do echo "J'AI RECU CETTE LIGNE : $LIGNE"; done < <(sudo tcpdump -i eth0)

Hors ligne

#3 Le 12/02/2013, à 13:43

DonutMan75

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Bonjour pingouinux,

voici mon script en prenant en compte ta remarque :

#!/bin/sh

while read LIGNE; do
	echo "J'AI RECU : $LIGNE";
done << $(sudo tcpdump -i eth0)

mais il ne se passe strictement rien...

$ ./tcptest.sh
$

Je me suis dit que ça venait peut-être du sudo qui demandait un mot de passe en interactif, du coup j'ai remplacé le sudo tcpdump par un ll mais sans plus de succès... sad

#!/bin/sh

while read LIGNE; do
	echo "J'AI RECU : $LIGNE";
done << $(ll *)

As-tu une idées d'où ça pourrait venir ?

Merci d'avance smile


Donut

Hors ligne

#4 Le 12/02/2013, à 13:55

pingouinux

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Ce n'est pas

done << $(sudo tcpdump -i eth0)

mais

done < <(sudo tcpdump -i eth0)

Hors ligne

#5 Le 12/02/2013, à 14:13

Arbiel

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Bonjour

@pingouinux
Je me permets de m'immiscer dans la conversation pour te demander une petite explication.

Les deux commandes

while read LIGNE; do echo "J'AI RECU CETTE LIGNE : $LIGNE"; done < <(sudo tcpdump -i eth0)
sudo tcpdump -i eth0 | while read LIGNE; do echo "J'AI RECU CETTE LIGNE : $LIGNE"; done 

ont elles le même effet ?

Dans l'affirmative, la première, dont j'ai remarqué à plusieurs reprises l'utilisation par les membres de notre forum, est-elle plus avantageuse que la seconde ?

D'avance, je te remercie pour ces informations

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 14.04 64 bits

Hors ligne

#6 Le 12/02/2013, à 14:36

DonutMan75

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Re-bonjour,

avec ce code :

#!/bin/sh

while read LIGNE; do
	echo "J'AI RECU : $LIGNE";
done < <(sudo tcpdump -i eth0)

J'ai l'erreur suivante :

$ ./tcptest.sh 
./tcptest.sh: line 6: syntax error near unexpected token `<'
./tcptest.sh: line 6: `done < <(sudo tcpdump -i en0)'

Par ailleurs, que fait la commande "< <" ?? Je ne connaissais que la redirection "<<" ou "<"
J'interprétais "done <<$(sudo tcpdump -i eth0)" par :
   1 - Exécuter la commande sudo tcpdump -i eth0
   2 - Diriger la sortie de cette commande vers l'entrée standard de la boucle while

Merci d'avance

Donut

Hors ligne

#7 Le 12/02/2013, à 14:39

DonutMan75

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Bon, j'ai copié/collé la ligne de Pingouinux et ça marche parfaitement...
Je ne comprends pas pourquoi mon code ne fonctionne pas (je n'ai fait que la mettre sur plusieurs lignes et indenter de ci de là...)

Hors ligne

#8 Le 12/02/2013, à 14:43

pingouinux

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

@Arbiel : Ces deux commandes ont effectivement le même effet. Il me semble que la première est plus performante, mais je préfère que quelqu'un connaissant mieux le sujet te réponde.

Hors ligne

#9 Le 12/02/2013, à 14:47

pingouinux

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

@DonutMan75  #6 :
La 1ère ligne de ton script doit être #!/bin/bash, sinon, la syntaxe < <(…) n'est pas reconnue.

Hors ligne

#10 Le 12/02/2013, à 15:53

credenhill

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

hello

sudo tcpdump -li eth0 | awk  '{print "J'\''AI RECU :", $0}'

Hors ligne

#11 Le 12/02/2013, à 16:36

DonutMan75

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Effectivement avec bash, ça marche...
Comment s'appelle cette commande "< <" ? J'ai du mal à trouver des infos dessus ^^

Sinon, quelqu'un sait-il pourquoi ma solution ne fonctionne pas ?

Merci d'avance

Donut

Hors ligne

#12 Le 12/02/2013, à 18:51

pingouinux

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

DonutMan75  #11 a écrit :

Comment s'appelle cette commande "< <" ? J'ai du mal à trouver des infos dessus

Pour <(…), voir man bash, rubrique Process Substitution.

Sinon, quelqu'un sait-il pourquoi ma solution ne fonctionne pas ?

Elle fonctionne comme ceci :

#!/bin/bash

# Redirection de l'entrée standard vers tcpdump
exec < <(sudo tcpdump -i eth0)

while read LIGNE
do
   echo "J'AI RECU CETTE LIGNE : $LIGNE"
done

Sans la boucle while, on ne lit que la première ligne du résultat de tcpdump.

Hors ligne

#13 Le 12/02/2013, à 23:52

DonutMan75

Re : [RESOLU] Script qui analyse en dynamique la sortie d'un TCPDUMP

Ok super smile
Merci pour toutes ces informations smile

Bonne soirée

Donut

Hors ligne

Haut de page ↑