De que nível da pilha de rede o tcpdump obtém suas informações?

12

Como eu estava tentando em vão consertar um controlador ethernet com defeito aqui , uma coisa que tentei foi executar o tcpdump na máquina.

Achei interessante que o tcpdump foi capaz de detectar que alguns dos pacotes ICMP que o aplicativo ping achava que estava enviando não estavam realmente saindo pelo fio, mesmo que estivesse rodando na mesma máquina. Eu reproduzi esses resultados do tcpdump aqui:

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 como o número seq salta várias vezes ... que indica pacotes que o aplicativo ping gera e que não estão saindo da caixa.

O que me leva à minha pergunta: como o tcpdump foi capaz de detectar que os pacotes ICMP não estavam realmente saindo? É capaz de monitorar de alguma forma diretamente o que está no fio?

Se isso for feito, presumo que seja através da interface com alguma parte do kernel, que por sua vez faz interface com algum hardware que é parte padrão de um controlador de rede.

Mesmo assim, isso é muito legal! Se não é assim que o tcpdump funciona, alguém pode me explicar como detectou os pacotes ausentes no software?

Eric
fonte

Respostas:

13

Sim. Ao colocar as interfaces de rede no modo promíscuo, o tcpdump pode ver exatamente o que está saindo (e entrando) na interface de rede.

O tcpdump opera na camada2 +. ele pode ser usado para analisar Ethernet, FDDI, PPP & SLIP, Token Ring e qualquer outro protocolo suportado pela libpcap, que faz todo o trabalho pesado do tcpdump.

Dê uma olhada na seção pcap_datalink () da página do manual pcap para obter uma lista completa dos protocolos da camada 2 que o tcpdump (via libpcap) pode analisar.

Uma leitura da página de manual do tcpdump fornecerá uma boa compreensão de como exatamente o tcpdump e a libpcap fazem interface com as interfaces de kernel e de rede para poder ler os quadros da camada de enlace de dados brutos.

Tim Kennedy
fonte
1
Obrigado Tim. Uma coisa, dei uma olhada na página de manual do tcpdump e não vi nada sobre interfaces de kernel / rede. Estou curioso para saber mais sobre isso, se você tiver outros indicadores.
Eric
a página de manual pcap que eu vinculei acima fala mais sobre interfaces de rede. O tcpdump apresenta apenas os dados. é a libpcap que captura os dados e faz interface com os dispositivos de rede.
Tim Kennedy