Le Moniteur réseau sous linux
L’équivalent du moniteur réseau sous linux
s’appelle Ethereal.
Il fait parti d’un ensemble de programme qui
utilise l’outil GNU « TCPDUM » pour récupérer les données.
Il en existe 2 versions :
 | Une en ligne de commande (peu pratique a
utiliser) |
 | Une en interface graphique |
L’une ou l’autre version se base sur les mêmes
fonctionnalités.
Pour l’installation, on installera le package
correspondant :
Sous Mandrake : rpm –ivh
ethereal-0.9.13-1mdk.i586.rpm
Sous debian :
apt-get install ethereal
Sous RedHat :
ethereal-0.9.2-1.i386.rpm
Principe de fonctionnement :
Contrairement au moniteur réseau sous Windows 2003
serveur, ethereal permet de récupérer toute les trames circulant sur un
réseau, pour arriver a ceci, il fait passer la carte réseau en mode
« promiscuité ».

Pour pouvoir utiliser le mode promiscuité, le noyau
linux a besoin de la librairie Libpcap.
libpcap est une bibliothèque d'outils
permettant de faire la capture des paquets qui circulent sur le réseau,
on peut ainsi faire des stats, de la surveillance de réseau, du débugage
et bien d'autres choses.
Interface de l’application

Utilisation de la capture reseau :
Preparation
de la capture de données :
On va dans « Capture » puis « Start ».
 


Filtre de capture de trame
|
Fichier ou l’on stock les fichier
|
Option pour créer plusieurs fichiers de capture
|
Activation du mode promiscuité
|
Affichage en temps réel des paquets capturés
|
              
Pour un premier test nous allons faire, comme avec
le moniteur sous windows, la capture d’un « ping » entre les adresses
client et serveur.
On va donc lancer la capture et appuyer sur ok.
Affichage des données capturées
    

   
Le détail du fonctionnement de la commande ping est
expliqué dans le moniteur réseau windows.
Filtres sur la capture des données.
Je reprends l’exemple tftp étudié dans la section
Windows, sauf que au lieu d’envoyer des données, je vais récupérer des
fichiers
Pour créer des filtres sur la capture, je vais dans
« capture » / Start
Et la dans le champ « filter » on va écrire le
filtre.
Le filtre dois s’écrire comme avec « tcpdump »,
donc pour récupérer la documentation sur comment écrire celui-ci, on
lance « man tcpdump » et on peut consulter tous les exemples de filtre.
la Syntaxe des filtres de capture sont :
 | le protocole qui peut être ether,
fddi, ip, arp, rarp, decnet, lat,
sca, moprc, mopdl, tcp ou udp, |
 | la direction qui peut être src ou
dst, |
 | un champ qui peut être host,
net ou port suivi d'une valeur. |
Les opérateurs and, or et not
peuvent être utilisés pour combiner des filtres.
Exemple :
Filtre |
Fonction |
host 192.168.0.1 and tcp |
ne conserve que les paquets TCP à destination
ou en provenance de la machine 192.168.0.1 |
udp port 69 |
ne conserve que les paquets UDP en provenance
ou en destination du port 69 |
udp port 69 and dst host
192.168.0.1 |
ne conserve que les paquets UDP en provenance
ou en destination du port 69 à destination de la machine
192.168.0.1 |
tcp dst port 69 and dst
host 192.168.0.1 and src net 192.168.0.0 mask 255.255.255.0 |
ne conserve que les paquets TCP en
destination de la machine 192.168.0.0 sur le port 69 et en
provenance des machines du réseau 192.168.0.0/24 |
Dans mon exemple je vais vouloir récupérer
seulement les trames qui passent sur le port udp 69 et 32788 (les ports
tftp de transmission).
Donc je vais inscrire :
Udp port 32788 or udp port 69
  
Et je constate bien que je liste uniquement les
données sur les ports définis.
Filtres d’affichages.
Je reprends l’exemple ftp étudié dans la section
windows, sauf que au lieu d’envoyer des données, je vais récupérer des
fichiers.
Les filtres sur l’affichage ne respectent pas la
même syntaxe que tcpdump.
Et donc ethereal possèdes sa propre syntaxe des
filtre d’affichage que l’on peut consulter en lançant la commande « man
ethereal ».
Pour utiliser les filtres d’affichage, je remplie
directement le champ correspondant dans la fenêtre principale, ou alors
je peux utiliser l’assistant :
Un clique sur « filter » puis « add expression ».

Ce qui nous générera le filtre : udp.port == 69
Les expressions que l’on utilisera pour les filtres
d’affichages sont un peux plus complexe, mais permettent de mieux
filtrer.
En effet seulement les paquets pour lequel
l’expression du filtre est vraie seront affichés.
Les expressions sont basées sur les champs
disponibles dans un paquet. Le simple ajout d'un champ veut dire que
l'on garde le paquet si ce champ est disponible
Champ |
Type |
Signification |
ip.addr |
adresse IPv4 |
adresse IP source ou destination |
ip.dst |
adresse IPv4 |
adresse IP destination |
tcp.port |
Entier 2 octets |
Drapeau IP, ne pas fragmenter |
udp.port |
Entier 2 octets |
Drapeau IP, fragments à venir |
arp.dst.hw_mac |
Adresse MAC |
Adresse MAC cible |
http.request |
Booléen |
requête HTTP |
http.response |
Booléen |
réponse HTTP |
icmp.code |
entier non signé sur 8 bits |
numéro du code d'une commande ICMP |
icmp.type |
entier non signé sur 8 bits |
numéro du type d'une commande ICMP |
ftp.request |
booléen |
requête FTP |
ftp.request.command |
chaîne de caractères |
commande FTP |
ftp.reponse.data |
chaîne de caractères |
donnée de transfer FTP |
dns.query |
booléen |
requête DNS |
dns.response |
booléen |
réponse d'une requête DNS |
Le filtre d’affichage de l’on appliquera donc est :
(tcp.port == 21) || (tcp.port == 20)
 
Je constate que je ne récupère que les trames qui
passe en TCP sur les ports 20 et 21
Détail d’une trame.
        


 
|