Forum Programmation.shell Pour un mouchard réseau...

Posté par .
Tags : aucun
2
25
août
2008
Bonjour à tous.

Je désire renifler mon réseau pour connaître les différents flux qui s'y promènent. J'ai trouvé un petit outil trés sympathique qui se superpose à tcpdump afin de me fournir les infos dont j'ai besoin. L'outil en question est nstreams. Voici la commande qui permet de l'utiliser :
$> tcpdump -l -n | nstreams

Il s'agit donc d'un pipe qui récupère les infos fournis par tcpdump dans la console. Des paramètres à la suite de nstreams permettent de spécifier 2 fichiers de configuration et bien d'autre chose.

Ici se trouve la documentation en ligne de nstreams : http://www.hsc.fr/ressources/outils/nstreams/presentation/

Première difficulté : l'activité de nstreams génère un affichage dans la console. Pour plus de confort lors de l'analyse, je préférerais récupérer un fichier. Aussi je redirige la sortie de nstreams dans un fichier ce qui me donne la commande suivante :
$> tcpdump -l -n | nstreams -c -n >> /var/log/fichier-nstreams.log

Je désire transformer cet excellent outil en daemon sur une plate-forme à base de CentOS v5.1. Je me suis inspiré des scripts de daemon déjà présent dans le répertoire ~/init.d afin d'obtenir quelque-chose de correct. Voici le résultat :


#################################################
#!/bin/sh
# description: Start/stop nStreams Daemon
# chkconfig: - 99 10
# pidfile: /var/run/nstreamsd.pid

# J'appelle la bibliothèque de fonction.
# Peut-être est-ce inutile ???
. /etc/rc.d/init.d/functions

RETVAL=0
# Initialisation du nom du fichier log en vue d'une journalisation
ladate=`date +"%Y-%m-%d"`
NAME_LOG_FILE="nstreamsd-$ladate"

#Initialisation de la commande à lancer selon l'éxistance du fichier log
SCREEN_APPS1="tcpdump -l -n | nstreams -c /usr/local/etc/nstreamsd-services -n /usr/local/etc/nstreamsd-networks >> /var/log/$NAME_LOG_FILE.log"
SCREEN_APPS1="tcpdump -l -n | nstreams -c /usr/local/etc/nstreamsd-services -n /usr/local/etc/nstreamsd-networks > /var/log/$NAME_LOG_FILE.log"

start()
{
# Vérification de l'existance du processus
if [ -f /var/run/nstreamsd.pid ]; then

# Le processus existe
echo -n $"nStreams Deamon (pid $(pgrep -o nstreams)) is running."
else
# Le processus n'existe pas
echo -n $"Starting nstreamsd :"
# Verification de l'existance du fichier log
if [ -f /var/log/$NAME_LOG_FILE.log ]; then
# Le fichier log existe
screen -S nstreamsd -m -d $SCREEN_APPS1 >/dev/null 2>&1
# $SCREEN_APPS1 >/dev/null 2>&1
else
# Le fichier log n'existe pas
screen -S nstreamsd -m -d $SCREEN_APPS2 >/dev/null 2>&1
# $SCREEN_APPS2 >/dev/null 2>&1
fi
# Récupération du code retour du lancement du processus
RETVAL=$?
# Traitement de ce code
if [ "$RETVAL" = "0" ]; then
touch /var/lock/subsys/nstreamsd
echo_success
else
echo_failure
fi
fi
echo
}

stop()
{
# Vérification de l'existance du fichier PID du processus
if [ -f /var/run/nstreamsd.pid ]; then

# Le fichier PID existe
echo -n $"Stopping nStreams Daemon (pid $(pgrep -o nstreams)):"

# Vérification de la possibilité de tuer le processus
kill -0 $(pgrep -o nstreams) >/dev/null 2>&1

# Récupération du code retour de la verification
RETVAL=$?

# Traitement du code retour
if [ "$RETVAL" <> "0" ]; then

# Suppression du processus
kill $(pgrep -o nstreams)

# Suppression des fichiers affairant au déroulement du processus
rm -f /var/lock/subsys/nstreamsd
rm -f /var/run/nstreamsd.pid
echo_success
else
echo_failure
fi
else
# Le fichier n'existe pas
echo -n $"nStreams Deamon is stopped."
fi
echo
}

status()
{
# Recherche du fichier PID - c'est peut-être maladroit en cas de processus craché
if [ -f /var/run/nstreamsd.pid ]; then
echo "nStreams Daemon (pid $(pgrep -o nstreamsd)) is running"
RETVAL=0
else
echo "nStreams Daemon is stopped"
RETVAL=1
fi
}

restart()
{
stop
start
}


case "$1" in
start)
start
;;

stop)
stop
;;

restart)
stop
start
;;

status)
status
;;

*)
echo "Usage: $0 { start | stop | restart | status}"
RETVAL=1
;;
esac
exit $RETVAL
#################################################


Après lancement du service pour test, aucuns fichier log n'est généré. De plus, le pipe ne se lance pas non plus. La commande screen s'exécute visiblement bien mais ne lance pas le pipe.
J'ai cherché sur internet de la documentation concernant screen, la programmation script, etc... mais pas d'info plus précise.

Je suis persuadé que ce n'est peut-être pas grand chose, une virgule, un point d'exclamation ou encore un "&" manquant. Mais pour l'instant, je sèche complètement.

Je vous remercie par avance de l'attention que vous porterez à mon problème.

@ Bientôt.
  • # Peut-être ça ?

    Posté par . Évalué à 1.

    SCREEN_APPS2 n'est pas défini, mais tu définis deux fois SCREEN_APPS1
  • # ntop roulaize

    Posté par (page perso) . Évalué à 1.

    Ca repond pas exactement à ta question, mais pour monitorer l'activité d'un réseau, ntop c'est le top ("oh oh oh").

    http://www.ntop.org/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.