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

12

Comme j'essayais en vain de réparer un contrôleur Ethernet défectueux ici , j'ai essayé d'exécuter tcpdump sur la machine.

J'ai trouvé intéressant que tcpdump ait pu détecter que certains des paquets ICMP que l'application ping pensait envoyer ne sortaient pas réellement sur le câble, même s'il fonctionnait sur la même machine. J'ai reproduit ces résultats 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 saute plusieurs fois ... ce qui indique les paquets générés par l'application ping qui ne quittent pas réellement la boîte.

Ce qui m'amène à ma question: comment tcpdump a-t-il pu détecter que les paquets ICMP ne sortaient pas réellement? Est-il en mesure de surveiller directement le contenu du câble?

S'il accomplit cela, je suppose que c'est en s'interfaçant à une partie du noyau, qui à son tour s'interface avec du matériel qui est une partie standard d'un contrôleur de réseau.

Malgré tout, c'est plutôt cool! Si ce n'est pas vraiment le fonctionnement de tcpdump, quelqu'un peut-il m'expliquer comment il a détecté les paquets manquants dans le logiciel?

Eric
la source

Réponses:

13

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

tcpdump fonctionne sur layer2 +. il peut être utilisé pour examiner Ethernet, FDDI, PPP & SLIP, Token Ring et tout autre protocole pris en charge par libpcap, qui effectue tous les gros travaux de tcpdump.

Jetez un œil à la section pcap_datalink () de la page de manuel pcap pour une liste complète des protocoles de couche 2 que tcpdump (via libpcap) peut analyser.

Une lecture de la page de manuel tcpdump vous donnera une bonne compréhension de la façon exacte dont tcpdump et libpcap s'interfacent avec le noyau et les interfaces réseau pour pouvoir lire les trames de la couche de liaison de données brutes.

Tim Kennedy
la source
1
Merci Tim. Une chose, j'ai jeté un œil à la page de manuel tcpdump, et je n'ai rien vu sur les interfaces noyau / réseau. Je suis curieux d'en savoir plus à ce sujet, si vous avez d'autres conseils.
Eric
la page de manuel pcap que j'ai liée ci-dessus en dit plus sur les interfaces réseau. tcpdump présente uniquement les données. c'est libpcap qui capture les données et les interfaces avec les périphériques réseau.
Tim Kennedy