Tamanho do buffer para capturar pacotes no espaço do kernel?

16

Percorrendo a página de manual tcpdump, parece que o kernel pode descartar os pacotes se o buffer estiver cheio. Fiquei me perguntando se:

  1. esse tamanho é configurável e / ou
  2. onde posso ver o tamanho da minha distribuição?

Na página do manual (para fácil referência):

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 relatar essas informações para os aplicativos; caso contrário, será relatado como 0).

Anon
fonte

Respostas:

27

Tcpdump tem a opção -Bde definir o tamanho do buffer de captura. O valor é passado para a libpcap (biblioteca usada pelo tcpdump para fazer a captura de pacotes real) por meio da pcap_set_buffer_size()função A página de manual Tcpdump não especifica em quais unidades o tamanho do buffer é especificado com -B, mas a partir da fonte parece que é KiB.

A página manual de pcap_set_buffer_size()não especifica o tamanho padrão do buffer (que é usado se essa função não for chamada), mas novamente, a partir da fonte libpcap , este parece ser 2 MiB, pelo menos no Linux (mas provavelmente depende do sistema).

No que diz respeito ao buffer e eliminação de pacotes, você também deve prestar atenção na configuração do -sparâmetro snaplen ( ) de acordo. man tcpdump:

-s     Snarf  snaplen bytes of data from each packet rather than the
default of 65535 bytes.  Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that  taking
larger  snapshots both increases the amount of time it  takes  to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.

Isso significa que, com o tamanho fixo do buffer, você pode aumentar o número de pacotes que cabem no buffer (e, portanto, não são descartados) diminuindo o tamanho do snaplen.

Petr Uzel
fonte
2
Eu sei que este é um tópico antigo (e eu gosto desta resposta), mas quando você citar fontes no GitHub, aponte para o commit atual (como o ramo mestre pode mudar), por exemplo: github.com/mcr/tcpdump/blob/ ... .
Bruno nery
@ brunonery Isso não é um problema nos sites Stack Exchange, onde na verdade incentivamos os usuários a melhorar as respostas, mesmo que a publicação em si seja bastante antiga. (Ao contrário de fóruns onde é desaprovado.)
Léo Lam
fixa os links desatualizados
Eli arrebatados