Administration réseau sous Linux/Tcpdump

Dans un réseau ethernet relié par un concentrateur (ou "hub"), chaque machines reçoit tous les paquets qui circulent sur le réseau.
En fonctionnement normal, les cartes réseau ne réceptionnent que les paquets qui leur sont destinés, mais on peut faire en sorte qu'elles transmettent tous les paquets au système.
Les "hub" sont de moins en moins utilisés.
Ils sont généralement remplacés par des commutateurs (ou "switch") qui savent déterminer (en fonction de l'adresse MAC) sur quel câble il faut envoyer un paquet.
Les machines ne reçoivent donc généralement que les paquets qui leur sont destinés.
L'utilitaire tcpdump permet d'inspecter les paquets qui sont reçus et transmis par une carte réseau.
Filtrage.
Il est possible de sélectionner les paquets à "écouter" en fonction d'expressions.
Ainsi, ne seront affichées / traitées que les informations pour lesquelles le résultat de l'expression est
vérifié.
Une expression est composée de primitives et d'opérateurs logiques.
Une primitive est un identifiant précédé de mots clés qui indiquent le type de l'identifiant.
Par exemple la primitive "src port 21" contient les éléments suivants :
La primitive correspond donc au "port source 21".
De la même manière, la primitive "ether src 00:11:22:33:44:55" indique "l'adresse ethernet (ou MAC) source 00:11:22:33:44:55".
Les primitives les plus courantes sont les suivantes :
Les primitives peuvent être reliées avec les opérateurs logiques "and", "or" et "not".
Par exemple l'expression suivante va trouver tous les paquets en provenance de tiny mais dont le port n'est pas le port ssh :
 src tiny and not port ssh
Il est également possible de spécifier un protocole: udp, tcp, icmp.
Options.
Plusieurs options permettent de modifier le comportement de tcpdump :
Exemples.
 tcpdump src 192.168.0.1
Ici, les seuls paquets affichés sont ceux en provenance de 192.168.0.1.
Nous pouvons également préciser nos préférences en ajoutant un critère :
 tcpdump src 192.168.0.1 and port 80
Là, le seul port qui nous intéresse est 80 (http).
Voici une ligne complète qui ne laisse vraiment passer que les paquets en provenance de 192.168.0.1 vers 212.208.225.1, sur le port 53 en udp.
 tcpdump -x -X -s 0 src 192.168.0.1 and dst 212.208.225.1 and port 53 and udp
Nous avons demandé l'affichage du contenu des paquets au format hexadécimal et ascii (-x -X) et ce, quelle que soit leur taille (-s 0).
Nous obtenons les informations désirées :
 0x0000: 4500 003b 0000 4000 4011 ca00 c1fd d9b4 E..;..@.@...
 0x0010: c1fc 1303 80a1 0035 0027 213d 14c2 0100 ...5.'!=...
 0x0020: 0001 0000 0000 0000 0377 7777 056c 696e ...www.lin
 0x0030: 7578 036f 7267 0000 0100 01 ux.org...