NetCollect

Ce collecteur est intégralement inspiré de bbnfc de Martin van den Nieuwelaar. Je n'ai gardé du source original que la version 5 de netflow et j'ai supprimé tout ce qui correspond à l'affichage des flux. Pour chaque flux, la date est modifiée pour ne plus être dépendante du sysUptime et le flux est réécrit tel-quel dans un fichier binaire.

Le code source net_collect : net_collect.cpp
Il nécessite pour la compilation l'include netflow.h de  Martin van den Nieuwelaar livré avec bbnfc

Installation :

mkdir /usr/local/netflow
cp net_collect.cpp /usr/local/netflow
cp netflow.h /usr/local/netflow
cd /usr/local/netflow
g++ flow_view.cpp -o flow_view
cd /usr/local/bin
ln -s /usr/local/netflow/net_collect

Pour le lancer en deamon au démarrage de la machine, j'utilise (sous Linux Red Hat)  le fichier net_collect

cp net_collect /etc/rc.d/init.d/

chkconfig --add net_collect

Et j'utilise des fichiers journaliers avec une rotation par syslog

/datas/netflow/flux_netflow.dump

{
    daily
    rotate 60
    missingok
    sharedscripts
    postrotate
        /etc/rc.d/init.d/net_collect stop
        /etc/rc.d/init.d/net_collect start
    endscript
}

 

flow_view


flow_view est un programme écrit en 'C++' qui permet d'extraire des flux 'NetFlow' d'un fichier binaire créé par NetCollect.
Par réellement objet dans sa conception, il utilise néanmoins des objets c++ iostream, strings, vector et map.

Le code source de flow_view : flow_view.cpp
Il nécessite pour la compilation l'include netflow.h de  Martin van den Nieuwelaar livré avec bbnfc

Installation :


mkdir /usr/local/netflow
cp netflow.h /usr/local/netflow
cp flow_view.cpp /usr/local/netflow
cd /usr/local/netflow
g++ flow_view.cpp -o flow_view
cd /usr/local/bin
ln -s /usr/local/netflow/flow_view

Le fichier par défaut fixé lors de la compilation est /datas/netflow/flux_netflow.dump

La commande suivante peut modifier simplement ce comportement :
g++ -DDEFAULT_DUMP_FILE="\"/var/log/flux_netflow.dump\"" flow_view.cpp -o flow_view

Sinon, il est possible de modifier le code ligne 82

// DEFAULT_DUMP_FILE
#ifndef DEFAULT_DUMP_FILE
#define DEFAULT_DUMP_FILE "/datas/netflow/flux_netflow.dump"
#endif

usage:

flow_view [-h][-l|-s|[-d][-D][-c]][-g][(-i|-e) <adresse>][(-p|-x) <port>][-o <fichier>][-f <fichier>]

        -h    Help of command usage
        -l    affichage des flux au format long
        -d    affiche la date de debut si format court ou csv
        -D    affiche la date de fin si format court ou csv
        -c    sortie au format csv pour import dans base de donnée
        -g    enregistre dans /tmp/netflow.plot les compteurs in et out
                    pour générer le graph via gnumplot. Cette option n'a de sens que si elle est combinnée avec l'option -i
                    Elle permet alors de générer le graphique de flux d'une machine donnée
        -s    mode silencieux à combiner avec l'option -o pour éviter la sortie à l'écran
                    incompatible avec les options -l -d -D -c
        -f <fichier>      fichier dump a utiliser
                par defaut : /datas/netflow/flux_netflow.dump
        -i <adresse>      extrait uniquement les flux de l'adresse spécifiée
                 incompatible avec l'option -e
        -e <adresse>      ignore les flux de l'adresse spécifiée
                 incompatible avec l'option -i
        -p <port>         extrait uniquement les flux concernant le port spécifié
                 incompatible avec l'option -x
        -x <port>         ignore les flux concernant le port précisé
                 incompatible avec l'option -p
        -o <fichier>      enregistre un dump correspondant à l'extrait


Bugs connus :

les options -e et -x ont un comportement variables et leur usage est à éviter.

Outils additionnels

plot_flow

permet de donner le graphique des flux d'une machine.

A placer dans /usr/local/bin :
plot_flow lance un flow_view -gsi $1 $2 ... puis exécute gnuplot /usr/local/bin/plot_flow.cfg

top_n

Pour l'instant, le code qui n'existe que sous la forme d'un projet KDEvelop n'est pas diffusable.

p2p_detect

Un script qui utilise flow_view et top_n pour détecter les machines qui utilisent des logiciels de p2p.
N'est pas diffusable tant que top_n n'est pas diffusé et tant qu'il n'est pas paramétrable