¿de qué nivel de la pila de red obtiene tcpdump su información?

12

Como estaba intentando en vano arreglar un controlador de Ethernet defectuoso aquí , una cosa que intenté fue ejecutar tcpdump en la máquina.

Me pareció interesante que tcpdump pudo detectar que algunos de los paquetes ICMP que la aplicación de ping pensaba que estaba enviando en realidad no salían por el cable, a pesar de que se estaba ejecutando en la misma máquina. He reproducido los resultados de tcpdump aquí:

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

Observe cómo el número de secuencia salta varias veces ... eso indica que los paquetes que genera la aplicación de ping que realmente no están saliendo de la caja.

Lo que me lleva a mi pregunta: ¿cómo pudo tcpdump detectar que los paquetes ICMP no se estaban enviando realmente? ¿Es capaz de monitorear directamente lo que hay en el cable?

Si logra esto, supongo que es mediante la interfaz a alguna parte del núcleo, que a su vez se conecta a algún hardware que es una parte estándar de un controlador de red.

Aun así, ¡eso es genial! Si no es así como funciona tcpdump, ¿alguien puede explicarme cómo detectó los paquetes faltantes en el software?

Eric
fuente

Respuestas:

13

Si. Al poner las interfaces de red en modo promiscuo, tcpdump puede ver exactamente lo que está saliendo (y dentro) de la interfaz de red.

tcpdump opera en layer2 +. se puede usar para mirar Ethernet, FDDI, PPP y SLIP, Token Ring y cualquier otro protocolo compatible con libpcap, que hace todo el trabajo pesado de tcpdump.

Eche un vistazo a la sección pcap_datalink () de la página de manual de pcap para obtener una lista completa de los protocolos de capa 2 que tcpdump (a través de libpcap) puede analizar.

Una lectura de la página de manual de tcpdump le dará una buena comprensión de cómo exactamente, tcpdump y libpcap interactúan con el kernel y las interfaces de red para poder leer los marcos de la capa de enlace de datos sin procesar.

Tim Kennedy
fuente
1
Gracias Tim. Una cosa, eché un vistazo a la página de manual de tcpdump y no vi nada sobre las interfaces kernel / network. Tengo curiosidad por saber más sobre esto, si tienes otros consejos.
Eric
La página de manual de pcap que he vinculado anteriormente habla más sobre las interfaces de red. tcpdump solo presenta los datos. Es libpcap que captura los datos e interactúa con los dispositivos de red.
Tim Kennedy