En mi caso, estaba usando la opción -s0, cambiarlo a -s1600 (justo encima de MTU) lo resolvió para mí.
LatinSuD
Respuestas:
50
Del manual de tcpdump:
paquetes `` descartados por el núcleo '' (este es el número de paquetes que fueron descartados, debido a la falta de espacio en el búfer, por el mecanismo de captura de paquetes en el sistema operativo en el que tcpdump se está ejecutando, si el sistema operativo informa esa información a las aplicaciones; si no, se informará como 0).
Un poco de explicación:
Los tcpdumpcaptura paquetes primas que pasan a través de una interfaz de red. Los paquetes deben analizarse y filtrarse de acuerdo con las reglas especificadas por usted en la línea de comando, y eso lleva algo de tiempo, por lo que los paquetes entrantes deben almacenarse (en cola) para su procesamiento. A veces hay demasiados paquetes, se guardan en un búfer, pero se guardan más rápido de lo procesado, por lo que finalmente el búfer se queda sin espacio, por lo que el núcleo descarta todos los paquetes adicionales hasta que queda algo de espacio libre en el búfer.
Puede aumentar el tamaño del búfer con la opción -B( --buffer-size) de esta manera:
tcpdump -B 4096 ....
Tenga en cuenta que el tamaño se especifica en kilobytes, por lo que la línea anterior establece el tamaño del búfer en 4 MB.
También cambié intencionalmente kibi- / mebi- a kilo- / mega- y omití una palabra sobre libpcap para no confundir a las personas.
Dmitry Vasilyanov
44
Tenga en cuenta también que el soporte para "opciones largas" en tcpdump es relativamente nuevo; en versiones anteriores (a excepción de versiones mucho más antiguas, que no admiten la configuración del tamaño del búfer) puede hacerlo tcpdump -B 4096.
Otra nota, lleva tiempo configurar grandes buffers. Si establece los búferes en algo loco, puede perder paquetes (tcpdump los informa como "paquetes descartados por el núcleo") durante ese tiempo de inicialización.
dgreene
27
Una cosa más a tener en cuenta / probar es que tcpdumppuede pasar mucho tiempo haciendo consultas DNS para resolver las direcciones IP de los nombres de dominio. Si no los necesita, intente -ncolocar la bandera (sin búsquedas). p.ej:
Este fue un salvador. ¡No me di cuenta de que tcpdump invirtió la resolución al volcar en un archivo! El uso -nn -B 4096me permitió llegar0 packets dropped by kernel
Blanka
11
De acuerdo a man tcpdump:
paquetes descartados por el núcleo (este es el número de paquetes que fueron descartados, debido a la falta de espacio en el búfer, por el mecanismo de captura de paquetes en el sistema operativo en el que tcpdump se está ejecutando, si el sistema operativo informa esa información a las aplicaciones; si no, será reportado como 0).
El núcleo coloca los paquetes capturados en un búfer de captura de tamaño fijo . Si tcpdumpno vacía ese búfer lo suficientemente rápido, el núcleo comenzará a sobrescribir los paquetes antiguos en el búfer e incrementará correspondientemente el contador descartado . El valor de ese contador es lo que ves como "eliminado por el núcleo".
Además de lo que dice la página del manual, parece haber alguna razón adicional por la cual el núcleo puede descartar los paquetes. Estaba experimentando una caída del paquete del 100% desde tcpdumpdonde el único tráfico en la red era un paquete de 512B de PRBS por segundo. Claramente, la explicación del espacio del búfer no tiene sentido aquí: creo que el núcleo puede manejar 0.5kiB / s.
Algo que vino junto con mi distribución (Ubuntu 14.04) puede haber estado haciendo algún tipo de filtrado inteligente en la capa de enlace que no le gustaba a mis paquetes de prueba. Mi solución fue crear un nuevo espacio de nombres de red de la siguiente manera:
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
En el netnsshell interno , los procesos del sistema operativo que antes causaban problemas están fuera de la imagen y tcpdumpme muestran todos los paquetes que espero ver.
Respuestas:
Del manual de tcpdump:
Un poco de explicación:
Los
tcpdump
captura paquetes primas que pasan a través de una interfaz de red. Los paquetes deben analizarse y filtrarse de acuerdo con las reglas especificadas por usted en la línea de comando, y eso lleva algo de tiempo, por lo que los paquetes entrantes deben almacenarse (en cola) para su procesamiento. A veces hay demasiados paquetes, se guardan en un búfer, pero se guardan más rápido de lo procesado, por lo que finalmente el búfer se queda sin espacio, por lo que el núcleo descarta todos los paquetes adicionales hasta que queda algo de espacio libre en el búfer.Puede aumentar el tamaño del búfer con la opción
-B
(--buffer-size
) de esta manera:Tenga en cuenta que el tamaño se especifica en kilobytes, por lo que la línea anterior establece el tamaño del búfer en 4 MB.
fuente
tcpdump -B 4096
.Una cosa más a tener en cuenta / probar es que
tcpdump
puede pasar mucho tiempo haciendo consultas DNS para resolver las direcciones IP de los nombres de dominio. Si no los necesita, intente-n
colocar la bandera (sin búsquedas). p.ej:fuente
-nn -B 4096
me permitió llegar0 packets dropped by kernel
De acuerdo a
man tcpdump
:El núcleo coloca los paquetes capturados en un búfer de captura de tamaño fijo . Si
tcpdump
no vacía ese búfer lo suficientemente rápido, el núcleo comenzará a sobrescribir los paquetes antiguos en el búfer e incrementará correspondientemente el contador descartado . El valor de ese contador es lo que ves como "eliminado por el núcleo".Por cierto, puede cambiar el tamaño del búfer de captura : pase
tcpdump
la-B
opción con un tamaño KiB.fuente
Además de lo que dice la página del manual, parece haber alguna razón adicional por la cual el núcleo puede descartar los paquetes. Estaba experimentando una caída del paquete del 100% desde
tcpdump
donde el único tráfico en la red era un paquete de 512B de PRBS por segundo. Claramente, la explicación del espacio del búfer no tiene sentido aquí: creo que el núcleo puede manejar 0.5kiB / s.Algo que vino junto con mi distribución (Ubuntu 14.04) puede haber estado haciendo algún tipo de filtrado inteligente en la capa de enlace que no le gustaba a mis paquetes de prueba. Mi solución fue crear un nuevo espacio de nombres de red de la siguiente manera:
En el
netns
shell interno , los procesos del sistema operativo que antes causaban problemas están fuera de la imagen ytcpdump
me muestran todos los paquetes que espero ver.fuente
Me resulta útil usar la
tcpdump -c
opción. De esta manera, puede establecer el número de paquetes y luego detenerse y no puede completar el búfer.Por ejemplo, este capturará las solicitudes tcp en localhost.
fuente