{{tag>sniffer réseau}}
======TCPdump======
**TCPdump** est un outil d'analyse réseau qui permet de sniffer (en mode promiscuité ou non) les paquets que reçoit une interface réseau de la machine. Une version pour Windows existe : Windump.
Son utilisation classique est la suivante :
tcpdump
A la fin d'une capture, on a le retour suivant :
0 packets captured
130 packets received by filter
35 packets dropped by kernel
* **packets captured** indique le nombre de paquet capturés
* **packets received by filter** apparemment sa signification dépend de l'OS ; en général cela semble indiquer les paquets qui sont arrivés sur l'interface réseau mais pas encore transmis à la libpcap.
* **packets dropped by kernel** sont les paquets supprimés par manque de ressources. Cela vient du fait que le processeur n'arrive pas à traiter les paquets à la vitesse ou ils arrivent ; ça arrive donc quand on sniffe un trop gros débit. Différentes solutions existent pour l'éviter :
* utiliser des filtres pour baisser la charge CPU
* augmenter le buffer de réception des sockets :
Pour connaitre la taille du buffer (taille par défaut et taille max) de réception d'une socket :
sysctl net.core.rmem_default
net.core.rmem_default = 110592
sysctl net.core.rmem_max
net.core.rmem_max = 131071
On peut l'augmenter ainsi (attention, cela peut avoir un impact sur la stabilité de la machine, le faire en connaissance de cause !) :
sysctl net.core.rmem_max=1013760
sysctl net.core.rmem_default=1013760
=====Paramètres=====
* ''-D'' : permet de lister les interfaces réseaux détectées par tcpdump
* ''-i '' (**i**nterface) pour spécifier de sniffer une interface réseau particulière (ex : ''-i eth0'')
* ''-s '' pour ne capturer que les //// premiers octets de chaque paquet.
* ''-c '' (**c**ount) : pour stopper la capture après paquets
* ''-e'' affiche les entêtes de niveau 2 OSI (état de lien)
* ''-n'' (**n**umeric) capturer au format numérique = ne résout pas les noms de machines
* ''-nn'' ne résoud pas non plus les numéros de ports TCP/UDP
* ''-v[v[v]]'' (**v**erbose) résultat plus ou moins verbeux
* ''-X[X]'' : pour afficher le contenu du paquet en hexadécimal
* ''-F '' : permet de spécifier les filtres dans un fichier externe. Les filtres de la ligne de commande sont ignorés.
* ''-p'' (**p**romiscuous) : ne met pas l'interface d'acoute en mode promiscuité
* ''-r '' (**r**ead file) lire un fichier pcap
* ''-w '' (**w**rite file) pour enregistrer les paquets capturés dans un fichier plutôt que de les afficher sur le terminal. L'enregistrement se fait au format pcap
* ''-C '' utilisé avec ''-w'', permet diviser la sortie de la capture dans des fichiers de Mo maximum
* ''-S'' : pour afficher les numéros de séquence absolu ; cela permet de corréler une trace tcpdump avec des logs d'autres équipements (firewalls par exemple).
* ''-Q|-P '' : capturer les paquets dans une direction, possible entre "in", "out" ou "inout"
=====Filtres=====
* par protocole : ''tcp, icmp, udp, arp, ip, ip6, ppp, ...''
* par adresse Ethernet : ''ether ''
* par IP : ''host ''
* par réseau IP : ''net /''
* par port : ''port ''
* par plage de ports : ''portrange -''
* source ou destination (s'utilise avec les adresses, les ports ; ex : ''scr host X.X.X.X'') : ''src|dst''
* par taille de paquet (égal ou inférieur/supérieur à) : ''[less|greater] ''
* par vlan (dot1q) : ''vlan []''
* par label MPLS : ''mpls [