Pregunta

No es sólo una captura lo que estoy buscando hacer aquí.Primero quiero capturar el paquete, luego, en tiempo real, verificar la carga útil en busca de datos específicos, eliminarla, inyectar una firma y reinyectar el paquete en la pila para enviarlo como antes.

Leí los sockets de desvío ipfw usando IPFW y parece muy prometedor.¿Qué pasa con los ejemplos de modificación de paquetes y reinyección de ellos en la pila mediante sockets de desvío?Además, como cuestión de curiosidad, ¿sería posible leer los datos del socket usando Java o esto me limitaría a manipular y reinyectar paquetes, etc.?

¿Fue útil?

Solución

Iba a hacerme eco de otras respuestas que han recomendado iptables (dependiendo de la complejidad de los patrones que intenta hacer coincidir y de las modificaciones de paquetes que desea realizar), hasta que me di cuenta de la etiqueta BSD en la pregunta.

Como Esteban Pellicer Ya lo he mencionado, libpcap es una buena opción para capturar los paquetes.Sin embargo, creo que libpcap también se puede utilizar para enviar paquetes.Como referencia, estoy bastante seguro de que tcpreplay lo utiliza para reproducir archivos formateados en pcap.

Otros consejos

Ver tomas de desvío: Desviar enchufes mini COMO.

Funcionan pasando el tráfico que coincide con una determinada regla ipfw a un socket sin formato especial que luego puede reinyectar el tráfico alterado en las capas de la red.

Si solo busca captura de paquetes, libpcap es muy popular.Se utiliza en herramientas básicas como tcpdump y ethereal.En cuanto a "conectarse a la pila", a menos que planee cambiar fundamentalmente la forma en que se implementa la red (es decir,agregue su propia capa o altere el comportamiento de TCP), su idea de usar IPF para la modificación o intervención de paquetes parece la mejor opción.En Linux tienen un objetivo de redirección específico para los módulos del espacio de usuario, IPF probablemente tenga algo similar o podría modificar IPF para que haga algo similar.

Si sólo está interesado en ver los paquetes, entonces libpcap es el camino a seguir.Puedes encontrarlo en: http://www.tcpdump.org/

Creo que es posible hacer esto en el espacio de usuario con el objetivo QUEUE o NFQUEUE iptables.La aplicación cliente se adjunta a una cola y recibe todos los paquetes coincidentes, que puede modificar antes de volver a inyectarlos (también puede descartarlos si así lo desea).

Hay una biblioteca cliente libnetfilter_queue con la que necesita vincularse.Lamentablemente, la documentación es mínima, pero hay algunas publicaciones en listas de correo y ejemplos por ahí.

Por razones de rendimiento, no querrás hacer esto con todos los paquetes, sino solo con aquellos que coincidan específicamente, que tendrás que hacer coincidir usando reglas estándar de iptables.Si eso no es suficiente, necesitarás escribir tu propio módulo de kernel netfilter.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top