quel niveau de la stack réseau tcpdump obtient-il de ses informations?

Comme j'essayais en vain de réparer un controller Ethernet défectueux ici , une chose que j'ai essayé était d'exécuter tcpdump sur la machine.

J'ai trouvé intéressant que tcpdump soit capable de détecter que certains des packages ICMP que l'application Ping pensait envoyer ne fonctionnaient pas sur le fil, même si elle fonctionnait sur la même machine. J'ai reproduit les résultats de tcpdump ici:

14:25:01.162331 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 1, length 64 14:25:02.168630 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 2, length 64 14:25:02.228192 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 2, length 64 14:25:07.236359 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 3, length 64 14:25:07.259431 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 3, length 64 14:25:31.307707 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 9, length 64 14:25:32.316628 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 10, length 64 14:25:33.324623 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 11, length 64 14:25:33.349896 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 11, length 64 14:25:43.368625 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 17, length 64 14:25:43.394590 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 17, length 64 14:26:18.518391 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 30, length 64 14:26:18.537866 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 30, length 64 14:26:19.519554 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 31, length 64 14:26:20.518588 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 32, length 64 14:26:21.518559 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 33, length 64 14:26:21.538623 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 33, length 64 14:26:37.573641 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 35, length 64 14:26:38.580648 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 36, length 64 14:26:38.602195 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 36, length 64 

Remarquez comment le nombre seq sauts plusieurs fois … qui indique les packages que l'application ping génère qui ne quittent pas réellement la boîte.

Ce qui m'amène à ma question: comment tcpdump était-il capable de détecter que les packages ICMP ne sortaient pas réellement? Est-il capable de surveiller directement ce qui est sur le fil?

Si c'est le cas, je suppose que c'est en interfaçant avec une partie du kernel, qui à son tour s'interface avec du matériel qui fait partie d'un controller réseau.

Même ainsi, c'est plutôt cool! Si ce n'est pas réellement comment fonctionne tcpdump, quelqu'un peut-il m'expliquer comment il a détecté les packages manquants dans le logiciel?

Oui. En mettant les interfaces réseau en mode promiscuité, tcpdump est capable de voir exactement ce qui se passe (et dans) l'interface réseau.

tcpdump fonctionne à layer2 +. il peut être utilisé pour regarder Ethernet, FDDI, PPP et SLIP, Token Ring, et tout autre protocole supporté par libpcap, qui fait tout le soulever lourd de tcpdump.

Consultez la section pcap_datalink () de la page de manuel pcap pour get la list complète des protocoles de couche 2 que tcpdump (via libpcap) peut parsingr.

Une lecture de la page de manuel tcpdump vous permettra de bien comprendre comment, tcpdump et libpcap interagissent avec le kernel et les interfaces réseau pour pouvoir lire les images de la couche de data binding brutes.