Estoy escribiendo un programa de monitoreo para una red de tráfico muy alta (los videos HD se transmiten a través de la red). La mayoría de los paquetes son muy grandes y solo quiero ver los encabezados (solo IP y UDP/TCP). Por supuesto, quiero evitar la sobrecarga de copiar toda la información. ¿Libpcap necesariamente me da una copia de todo el paquete? En caso afirmativo, ¿hay alguna biblioteca que coincida con mis necesidades?¿Libpcap siempre hace una copia del paquete?
Respuesta
Parece que hay dos preguntas aquí:
- el que está en el título, que suena como si estuviera preguntando si las copias libpcap el paquete;
- el uno en el cuerpo, preguntando si siempre copia el entero paquete.
Por primera pregunta: ¿
Probablemente hay al menos una copia realizada por cualquier código utilizando los mecanismos en cuya cima se libpcap ejecuta en diversos sistemas operativos - una copia de las memorias intermedias/skbuff/buffers de streams/lo que sea a la el buffer del mecanismo Para Linux, cuando se usa el mecanismo tpacket no se usa, el skbuff podría estar en cola de recepción para el PF_PACKET
que está utilizando el socket libpcap.
Puede haber otra copia: una copia de ese búfer a userland; si libpcap usa un mecanismo de "copia cero", como el mecanismo tpacket de Linux (que libpcap 1.0 y posterior usa por defecto), la segunda copia no ocurre. Es ocurrirá si no se está utilizando un mecanismo de copia cero.
Sin embargo, si está utilizando pcap_next()
o pcap_next_ex()
en un sistema Linux y se está utilizando el mecanismo tpacket, una copia separada, desde el búfer de memoria asignada a un búfer privado; eso no ocurre si usa pcap_dispatch()
o pcap_loop()
.
Para la segunda pregunta:
Eso es lo que el "snaplen" argumento para pcap_open_live()
y pcap_set_snaplen()
es para - que le permite especificar que no más de "snaplen" bytes de datos de paquetes deben ser capturados, y eso significa que no más que muchos bytes se copian.
Tenga en cuenta que esta longitud incluye los encabezados de la capa de enlace, y que esos pueden incluir encabezados de "metadatos" como los encabezados radiotap que podría obtener en los adaptadores 802.11. Este encabezado puede ser de longitud variable (por ejemplo, en 802.11, el encabezado 802.11 es de longitud variable y, si obtiene encabezados radiotap, también son de longitud variable).
Además, los encabezados IPv4 y TCP pueden tener opciones, y los paquetes IPv6 pueden tener encabezados de extensión, por lo que la longitud de los encabezados IP y TCP también puede ser variable.
Esto significa que es posible que tenga que determinar la duración de una "peor de las instantáneas" para usar; no hay forma de decir explícitamente "no me des algo más allá del encabezado TCP/UDP", solo puedes decir "no más de N bytes".
- 1. ¿Hace Enumerable.Repeat() una copia profunda?
- 2. ¿Deserentando un puntero se hace una copia?
- 3. Hace referencia a MSBuildTasks del paquete Nuget
- 4. clone(): ArrayList.clone() pensé hace una copia superficial
- 5. ¿Qué hace la copia hg?
- 6. libpcap Reensamblaje de paquetes IP
- 7. C++ 0x: Capture By Value for Lambda, siempre una copia?
- 8. BitBlt ignora CAPTUREBLT y parece que siempre captura una copia en caché del objetivo
- 9. En C# hace Array.ToArray() realizar una copia DEEP?
- 10. ¿Cómo se hace una copia de un objeto?
- 11. ¿En qué formato hace una copia de seguridad el administrador del almacén de datos?
- 12. Estructura del paquete del paquete OSGi
- 13. ¿Libpcap usa conectores crudos debajo de ellos?
- 14. libpcap para capturar 10 Gbps NIC
- 15. ¿Erlang siempre copia mensajes entre procesos en el mismo nodo?
- 16. Si una excepción lanzada es siempre una copia del objeto de excepción, ¿por qué no se invoca este constructor de copia?
- 17. ¿Cómo hace una copia de seguridad y restaura una base de datos como copia en el mismo servidor?
- 18. Copia defensiva del calendario
- 19. Transferencia de objeto a método: ¿quién hace la copia?
- 20. la restauración de la copia de seguridad repositorio git paquete
- 21. Copia recursiva del directorio
- 22. ¿Cómo hago una copia de seguridad de un paquete de SalesForce?
- 23. copia del bloque de memoria
- 24. ¿ReflectionProperty :: setAccessible hace que la propiedad sea accesible para siempre?
- 25. Métodos de copia del miembro
- 26. Miembro por copia del miembro
- 27. hace que la condición después de && siempre se evalúe
- 28. Estructura del paquete DAO
- 29. com.sun.awt uso del paquete
- 30. Dependencias del paquete R