informatique:logiciels:tcpdump
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatique:logiciels:tcpdump [2011/06/20 09:11] – pteu | informatique:logiciels:tcpdump [2023/02/07 10:46] (current) – [Filtrer les messages ICMP] pteu | ||
---|---|---|---|
Line 53: | Line 53: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
Line 59: | Line 60: | ||
* par protocole : '' | * par protocole : '' | ||
* par adresse Ethernet : '' | * par adresse Ethernet : '' | ||
- | * par IP : ''< | + | * par IP : '' |
* par réseau IP : '' | * par réseau IP : '' | ||
* par port : '' | * par port : '' | ||
* par plage de ports : '' | * par plage de ports : '' | ||
+ | * source ou destination (s' | ||
* par taille de paquet (égal ou inférieur/ | * par taille de paquet (égal ou inférieur/ | ||
- | * source ou destination (s' | ||
* par vlan (dot1q) : '' | * par vlan (dot1q) : '' | ||
* par label MPLS : '' | * par label MPLS : '' | ||
Line 75: | Line 76: | ||
* OU : '' | * OU : '' | ||
* OU logique : '' | * OU logique : '' | ||
+ | |||
+ | ====Analyse avancée des entêtes==== | ||
+ | |||
+ | On peut préciser à tcpdump d' | ||
+ | <code bash> | ||
+ | proto[x:y] | ||
+ | </ | ||
+ | On analyse à partir de l' | ||
+ | |||
+ | C'est important de connaitre le format des entêtes du protocole analysé ; par exemple pour IPv4 : | ||
+ | < | ||
+ | 0 | ||
+ | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | |Version| | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Time to Live | Protocol | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Destination Address | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Options | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | DATA ... | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | </ | ||
+ | |||
+ | ... ou TCP : | ||
+ | < | ||
+ | 0 | ||
+ | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Source Port | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Sequence Number | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Acknowledgment Number | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Data | | ||
+ | | Offset| Reserved | ||
+ | | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | Options | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | | | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | </ | ||
====Divers==== | ====Divers==== | ||
Line 135: | Line 188: | ||
D' | D' | ||
- | | + | <code bash> |
+ | tcpdump -i eth0 not host toto | ||
+ | tcpdump -i eth0 host toto and net 192.168.0.0/ | ||
+ | </ | ||
- | | + | 2 équivalents qui permettent d' |
+ | <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' | + | <code bash> |
- | tcpdump -i eth0 icmp | + | tcpdump -i eth1 'len > 1518' |
- | + | tcpdump -i eth1 ' | |
- | | + | </ |
- | permet de filtrer les //jumbo frame// (les paquets de taille supérieure à 1518 octet, le standard Ethernet) | + | |
+ | Filtrer les trames Ethernet ('' | ||
+ | <code bash> | ||
+ | tcpdump -e -nni eth0 ether src 00: | ||
+ | </ | ||
+ | NB : l' | ||
====Filtrer les paquets fragmentés==== | ====Filtrer les paquets fragmentés==== | ||
- | L' | + | L' |
- | tcmpdump 'ip[6] & 0x20' = 32 | + | < |
+ | tcmpdump 'ip[6] & 0x20' = 32 | ||
+ | </ | ||
Le résultat de cette addition logique peut être soit 0 soit 32 : en effet le masque ajouté avec un " | Le résultat de cette addition logique peut être soit 0 soit 32 : en effet le masque ajouté avec un " | ||
- | ====Paquet | + | 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 : |
+ | < | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | |Flags| | ||
+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
+ | |||
+ | 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. | ||
+ | </ | ||
- | Pour filtrer | + | Une autre façon de faire est donc de chercher |
<code bash> | <code bash> | ||
- | tcpdump -nnv 'ip[6] = 64' | + | tcpdump -i eth1 '((ip[6:2] > 0) and (not ip[6] = 64))' |
</ | </ | ||
- | En effet on regarde le 7e octet de l' | + | ====Paquet DF==== |
- | < | + | |
- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | |
- | |Flags| | + | |
- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | |
- | Bit 0: reserved, must be zero | + | Pour filtrer les paquets "non fragmentables" |
- | Bit 1: (DF) 0 = May Fragment, 1 = 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. | + | |
</ | </ | ||
+ | |||
+ | En effet on regarde le 7e octet de l' | ||
Donc, les paquets non fragmentables doivent avoir cet octet égal à " | Donc, les paquets non fragmentables doivent avoir cet octet égal à " | ||
Line 189: | Line 260: | ||
On ne fait attention qu'au flags ACK et SYN : on veut que le premier soit à 0 et le second à 1. Ceci se traduit par l' | On ne fait attention qu'au flags ACK et SYN : on veut que le premier soit à 0 et le second à 1. Ceci se traduit par l' | ||
- | < | + | |
+ | < | ||
<octet 13 de chaque paquet> ET < | <octet 13 de chaque paquet> ET < | ||
tcp[13] ET 00010010 = 00000010 | tcp[13] ET 00010010 = 00000010 | ||
Line 203: | Line 275: | ||
</ | </ | ||
(l' | (l' | ||
+ | |||
+ | ====Filtrer les paquets TCP FIN==== | ||
+ | |||
+ | On procède de la même façon que pour les TCP SYNs, mais on filtre sur le bit FIN (le bit de poids faible du 13e octet) et on ne tient pas compte du flag ACK car il est (presque ?) toujours activé de toute façon. | ||
+ | |||
+ | ^ champ -> ^ CWR ^ ECE ^ URG ^ ACK ^ PSH ^ RST ^ SYN ^ FIN ^ | ||
+ | | ce qu'on recherche | x | x | x | x | x | x | x | 1 | | ||
+ | |||
+ | Ce qui nous donne : | ||
+ | < | ||
+ | tcpdump -i eth1 -s 40 ' | ||
+ | </ | ||
+ | |||
+ | ====Filtrer les messages ICMP==== | ||
+ | |||
+ | La balise " | ||
+ | <code bash> | ||
+ | tcpdump -nni eth0 icmp[0] == 5 | ||
+ | </ | ||
+ | Pour connaitre la liste exhaustive des différents messages ICMP, go [[https:// |
informatique/logiciels/tcpdump.txt · Last modified: 2023/02/07 10:46 by pteu