Taille du tampon pour capturer les paquets dans l'espace noyau?

16

En parcourant la page de manuel de tcpdump, il semble que le noyau puisse supprimer les paquets si le tampon est plein. Je me demandais si:

  1. cette taille est configurable et / ou
  2. où puis-je voir la taille de ma distribution?

À partir de la page de manuel (pour une référence facile):

paquets `` abandonnés par le noyau '' (c'est le nombre de paquets qui ont été abandonnés, en raison d'un manque d'espace tampon, par le mécanisme de capture de paquets dans le système d'exploitation sur lequel tcpdump s'exécute, si le système d'exploitation signale ces informations aux applications; sinon, il sera signalé comme 0).

Anon
la source

Réponses:

27

Tcpdump a la possibilité -Bde définir la taille du tampon de capture. La valeur est ensuite transmise à libpcap (bibliothèque utilisée par tcpdump pour effectuer la capture du paquet réel) via la pcap_set_buffer_size()fonction. La page de manuel de Tcpdump ne spécifie pas dans quelles unités la taille du tampon est spécifiée avec -B, mais d'après la source, il semble que ce soit KiB.

La page de manuel de pcap_set_buffer_size()ne spécifie pas la taille de tampon par défaut (qui est utilisée si cette fonction n'est pas appelée), mais encore une fois, à partir de la source libpcap , cela semble être de 2 Mio, au moins sur linux (mais dépend très probablement du système).

En ce qui concerne la mise en mémoire tampon et la suppression de paquets, vous devez également faire attention à définir le paramètre snaplen ( -s) en conséquence. 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.

Cela signifie qu'avec une taille de tampon fixe, vous pouvez augmenter le nombre de paquets qui entrent dans le tampon (et donc ne pas être supprimés) en diminuant la taille de snaplen.

Petr Uzel
la source
2
Je sais que c'est un vieux fil (et j'aime cette réponse), mais lorsque vous citez des sources sur GitHub, veuillez pointer vers le commit actuel (car la branche principale peut changer), par exemple: github.com/mcr/tcpdump/blob/ … .
bruno nery
@brunonery Ce n'est pas un problème avec les sites Stack Exchange, où nous encourageons réellement les utilisateurs à améliorer les réponses, même si la publication elle-même est assez ancienne. (Contrairement aux forums où il est mal vu.)
Léo Lam
correction des liens obsolètes
Eli Heady