User Tools

Site Tools


informatique:logiciels:tcpdump

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
informatique:logiciels:tcpdump [2011/06/20 09:36] – Analyse avancée des entêtes pteuinformatique:logiciels:tcpdump [2011/06/20 09:57] pteu
Line 82: Line 82:
 proto[x:y] proto[x:y]
 </code> </code>
 +On analyse à partir de l'octet x et on lit y octets. Si '':y'' n'est pas renseigné on ne considère que l'octet x.
  
-C'est important de connaitre le format des entêtes du protocle analysé ; par exmeple pour IPv4 :+C'est important de connaitre le format des entêtes du protocole analysé ; par exemple pour IPv4 :
 <code> <code>
 0                                                          0                                                         
Line 186: Line 187:
 D'autres exemples : D'autres exemples :
  
-  tcpdump -i eth0 not host toto+<code bash> 
 +tcpdump -i eth0 not host toto 
 +tcpdump -i eth0 host toto and net 192.168.0.0/24 
 +</code>
  
-  tcpdump -i eth0 host toto and net 192.168.0.0/24+2 équivalents qui permettent d'inspecter l'octet n° 9 (le 10<sup>ème</sup> octet, car tcpdump compte à partir de 0) de l'entête IP 
 +<code bash> 
 +tcpdump -i eth0 'ip[9] = 1' 
 +tcpdump -i eth0 icmp 
 +</code>
  
-  tcpdump -i eth0 'ip[9] = 1' +2 équivalents pour filtrer les //jumbo frame// (les paquets de taille supérieure à 1518 octet, le standard Ethernet) 
-qui permet d'inspecter l'octet n° 9 (le 10<sup>ème</sup> octet, car tcpdump compte à partir de 0) de l'entête IP ; équivalant à : +<code bash> 
-  tcpdump -i eth0 icmp +tcpdump -i eth1 'len > 1518' 
- +tcpdump -i eth1 'ip[2:2] > 600' 
-   tcpdump -i eth1 'len > 1518' +</code>
-permet de filtrer les //jumbo frame// (les paquets de taille supérieure à 1518 octet, le standard Ethernet)+
  
  
 ====Filtrer les paquets fragmentés==== ====Filtrer les paquets fragmentés====
  
-L'exemple suivant, tiré du Misc n° 32, permet de détecter les paquets fragmentés = ceux qui ont le bit MF à 1. Ce bit est situé dans le 3ème bit du 7ème octet de l'entête IP. On va récupérer ''ip[6]'' et lui appliquer le masque ''0010 0000'' (0x20 en hexa) afin de ne sélectionner que le bit qui nous intéresse : +L'exemple suivant, tiré du Misc n° 32, permet de détecter les paquets fragmentés = ceux qui ont le bit MF (more fragment) à 1. Ce bit est situé dans le 3ème bit du 7ème octet de l'entête IP. On va récupérer ''ip[6]'' et lui appliquer le masque ''0010 0000'' (0x20 en hexa) afin de ne sélectionner que le bit qui nous intéresse : 
-  tcmpdump 'ip[6] & 0x20' = 32+<code> 
 +tcmpdump 'ip[6] & 0x20' = 32 
 +</code>
 Le résultat de cette addition logique peut être soit 0 soit 32 : en effet le masque ajouté avec un "ET" logique permet d'annuler (passer à 0) tous les autres bits ; il ne restera que le 3eme bit en partant de la gauche de l'octet, qui correspond au 6eme en partant de la droite, soit 2^6 = 32). Comme on le constate ici, tcpdump travaille par octet. Le résultat de cette addition logique peut être soit 0 soit 32 : en effet le masque ajouté avec un "ET" logique permet d'annuler (passer à 0) tous les autres bits ; il ne restera que le 3eme bit en partant de la gauche de l'octet, qui correspond au 6eme en partant de la droite, soit 2^6 = 32). Comme on le constate ici, tcpdump travaille par octet.
  
-====Paquet DF====+Cependant cette méthode ne tient pas compte des derniers paquets fragmentés qui ont le bit MF 0. En revanche ceux-ci possèdent un champ //fragment offset// non nul : 
 +<code> 
 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 + |Flags|      Fragment Offset    | 
 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 + 
 +Bit 0: reserved, must be zero 
 +Bit 1: (DF) 0 May Fragment, 1 Don't Fragment. 
 +Bit 2: (MF) 0 Last Fragment, 1 More Fragments. 
 +</code>
  
-Pour filtrer les paquets "non fragmentables" (ayant le bit DF=1, cf entêtes IP:+Une autre façon de faire est donc de chercher les paquets dont ces champs ne sont pas vide ET dont le bit DF (Don't Fragmentn'est pas égal à 1.
 <code bash> <code bash>
-tcpdump -nnv 'ip[6] = 64'+tcpdump -i eth1 '((ip[6:2] > 0) and (not ip[6] = 64))'
 </code> </code>
  
-En effet on regarde le 7e octet de l'entête IP (7e octet => le n°6 puisqu'on commence à 0) ; cet octet contient les champs suivants : +====Paquet DF====
-<code> +
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
-|Flags|      Fragment Offset    | +
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++
  
-Bit 0: reserved, must be zero +Pour filtrer les paquets "non fragmentables" (ayant le bit DF = 1cf entêtes IP) 
-Bit 1: (DF) 0 May Fragment1 = Don't Fragment. +<code bash> 
-Bit 2 (MF) 0 = Last Fragment, 1 = More Fragments. +tcpdump -nnv 'ip[6] = 64'
- +
-The fragment offset field is only used when fragmentation occurs.+
 </code> </code>
 +
 +En effet on regarde le 7e octet de l'entête IP (7e octet => le n°6 puisqu'on commence à 0) ; cet octet contient les champs suivants : (cf //[[informatique:logiciels:tcpdump#filtrer_les_paquets_fragmentes|Filtrer les paquets fragmentés]]//).
  
 Donc, les paquets non fragmentables doivent avoir cet octet égal à "01000000" (binaire) càd 64 en décimal. Donc, les paquets non fragmentables doivent avoir cet octet égal à "01000000" (binaire) càd 64 en décimal.
informatique/logiciels/tcpdump.txt · Last modified: 2023/02/07 10:46 by pteu