No meu caso, eu estava usando a opção -s0, alterando-a para -s1600 (logo acima do MTU) a resolveu para mim.
LatinSuD
Respostas:
50
No manual do tcpdump:
pacotes `` descartados pelo kernel '' (este é o número de pacotes que foram descartados, devido à falta de espaço no buffer, pelo mecanismo de captura de pacotes no sistema operacional no qual o tcpdump está sendo executado, se o sistema operacional informar essas informações aos aplicativos; caso contrário, será relatado como 0).
Um pouco de explicação:
A tcpdumpcaptura de pacotes brutos passando por uma interface de rede. Os pacotes devem ser analisados e filtrados de acordo com as regras especificadas por você na linha de comando, e isso leva algum tempo; portanto, os pacotes recebidos precisam ser armazenados em buffer (em fila) para processamento. Às vezes, existem muitos pacotes, eles são salvos em um buffer, mas são salvos mais rapidamente do que processados; portanto, eventualmente, o buffer fica sem espaço, de modo que o kernel descarta todos os pacotes adicionais até que haja algum espaço livre no buffer.
Você pode aumentar o tamanho do buffer com a opção -B( --buffer-size) assim:
tcpdump -B 4096 ....
Observe que o tamanho é especificado em kilobytes; portanto, a linha acima define o tamanho do buffer para 4 MB.
Também mudei intencionalmente kibi- / mebi- para kilo- / mega- e omiti uma palavra sobre libpcap para não confundir as pessoas.
Dmitry Vasilyanov
4
Observe também que o suporte para "opções longas" no tcpdump é relativamente novo; em versões mais antigas (exceto em versões muito mais antigas, que não suportam a configuração do tamanho do buffer), você pode fazer tcpdump -B 4096.
Outra observação, leva tempo para configurar buffers grandes. Se você definir os buffers como algo louco, poderá perder pacotes (o tcpdump os informa como "pacotes descartados pelo kernel") durante esse tempo de inicialização.
dgreene
27
Mais uma coisa a considerar / tentar é que tcpdumppode demorar muito tempo fazendo consultas DNS para resolver IPs para nomes de domínio. Se você não precisar deles, tente lançar o -nsinalizador (sem pesquisas). por exemplo:
Este foi um salvador. Não sabia que o tcpdump reverteu a resolução ao despejar em um arquivo !! O uso de -nn -B 4096permissão permitiu-me obter0 packets dropped by kernel
Blanka
11
De acordo com man tcpdump:
pacotes descartados pelo kernel (este é o número de pacotes descartados, devido à falta de espaço no buffer) pelo mecanismo de captura de pacotes no sistema operacional no qual o tcpdump está sendo executado, se o sistema operacional relatar essas informações para os aplicativos; caso contrário, ele será relatado como 0).
O kernel coloca os pacotes capturados em um buffer de captura de tamanho fixo . Se tcpdumpnão esvaziar esse buffer com rapidez suficiente, o kernel começará a sobrescrever pacotes antigos no buffer e a aumentar correspondentemente o contador descartado . O valor desse contador é o que você vê como "descartado pelo kernel".
Além do que a página de manual diz, parece haver algum motivo adicional pelo qual os pacotes podem ser descartados pelo kernel. Eu estava tendo 100% de queda de pacotes de tcpdumponde o único tráfego na rede era um pacote de 512B de PRBS por segundo. Claramente, a explicação do espaço no buffer não faz sentido aqui - acho que o kernel pode lidar com 0.5kiB / s.
Algo que veio junto com minha distribuição (Ubuntu 14.04) pode estar fazendo algum tipo de filtragem inteligente na camada de link que não gostou dos meus pacotes de teste. Minha solução alternativa foi criar um novo namespace de rede da seguinte maneira:
sudo -i
ip netns add debug
ip link set dev eth0 netns debug
ip netns exec debug bash
ifconfig eth0 1.2.3.4 up
No netnsshell interno , quaisquer processos do SO que estavam causando problemas antes estão fora de cena e tcpdumpme mostram todos os pacotes que espero ver.
Respostas:
No manual do tcpdump:
Um pouco de explicação:
A
tcpdump
captura de pacotes brutos passando por uma interface de rede. Os pacotes devem ser analisados e filtrados de acordo com as regras especificadas por você na linha de comando, e isso leva algum tempo; portanto, os pacotes recebidos precisam ser armazenados em buffer (em fila) para processamento. Às vezes, existem muitos pacotes, eles são salvos em um buffer, mas são salvos mais rapidamente do que processados; portanto, eventualmente, o buffer fica sem espaço, de modo que o kernel descarta todos os pacotes adicionais até que haja algum espaço livre no buffer.Você pode aumentar o tamanho do buffer com a opção
-B
(--buffer-size
) assim:Observe que o tamanho é especificado em kilobytes; portanto, a linha acima define o tamanho do buffer para 4 MB.
fonte
tcpdump -B 4096
.Mais uma coisa a considerar / tentar é que
tcpdump
pode demorar muito tempo fazendo consultas DNS para resolver IPs para nomes de domínio. Se você não precisar deles, tente lançar o-n
sinalizador (sem pesquisas). por exemplo:fonte
-nn -B 4096
permissão permitiu-me obter0 packets dropped by kernel
De acordo com
man tcpdump
:O kernel coloca os pacotes capturados em um buffer de captura de tamanho fixo . Se
tcpdump
não esvaziar esse buffer com rapidez suficiente, o kernel começará a sobrescrever pacotes antigos no buffer e a aumentar correspondentemente o contador descartado . O valor desse contador é o que você vê como "descartado pelo kernel".A propósito, você pode redimensionar o buffer de captura : Passe
tcpdump
a-B
opção com um tamanho KiB.fonte
Além do que a página de manual diz, parece haver algum motivo adicional pelo qual os pacotes podem ser descartados pelo kernel. Eu estava tendo 100% de queda de pacotes de
tcpdump
onde o único tráfego na rede era um pacote de 512B de PRBS por segundo. Claramente, a explicação do espaço no buffer não faz sentido aqui - acho que o kernel pode lidar com 0.5kiB / s.Algo que veio junto com minha distribuição (Ubuntu 14.04) pode estar fazendo algum tipo de filtragem inteligente na camada de link que não gostou dos meus pacotes de teste. Minha solução alternativa foi criar um novo namespace de rede da seguinte maneira:
No
netns
shell interno , quaisquer processos do SO que estavam causando problemas antes estão fora de cena etcpdump
me mostram todos os pacotes que espero ver.fonte
Acho útil usar a
tcpdump -c
opção Dessa forma, você pode definir o número de pacotes e, em seguida, parar e não pode preencher o buffer.Por exemplo, este captura as solicitações TCP no host local.
fonte