em 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 era rodar o tcpdump na máquina.

Eu achei interessante que o tcpdump foi capaz de detectar que alguns dos pacotes ICMP que o aplicativo ping achou que estava enviando não estavam realmente saindo na rede, mesmo que ele estivesse rodando na mesma máquina. Eu reproduzi os 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 ..., o 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 o que está no fio?

Se isso acontecer, presumo que seja fazendo 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 isso não é realmente como funciona o tcpdump, alguém pode me explicar como ele detectou os pacotes ausentes no software?

    
por Eric 22.10.2011 / 00:20

1 resposta

12

Sim. Colocando interfaces de rede em modo promíscuo, o tcpdump é capaz de ver exatamente o que está saindo (e in) na interface de rede.

O tcpdump opera na layer2 +. 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 de manual do pcap por um período lista completa dos protocolos da camada 2 que o tcpdump (via libpcap) pode analisar.

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

    
por 22.10.2011 / 07:21