Interceptar / reenrutar paquetes TCP SYN al programa C ++ en linux

Estoy tratando de encontrar la forma más fácil de interceptar los paquetes TCP SYN enviados por mi computadora en un programa c ++. Hay un par de opciones que conozco. Uno sería monitorear todo el tráfico y trabajar selectivamente con los paquetes SYN sin hacer nada con el resto. Otra opción que encontré fue utilizar una herramienta de filtrado de paquetes que reenviará los paquetes SYN a mi programa. Alguien me sugirió usar netfilter por lo mismo

Me preguntaba si hay otras opciones o si debería profundizar en netfilter. Además, cualquier sugerencia sobre cómo hacerlo con netfilter sería útil.

EDIT: quiero interceptar el paquete SYN y es posible que deba modificarlo (redirigirlo a un destino diferente, cambiar el puerto de destino, etc.) antes de reinyectarlo en la red

Edit: pude hacer esto usando una combinación de iptables y libnetfilter_queue. Utilicé ipfilter para redirigir todos los paquetes TCP SYN a una cola particular (esto estaba usando un comando simple)
uego, en un programa en C, pude usar la API libnetfilter_queue para acceder a los paquetes en la cola, analizarlos y reinyectarlos en la red.

Respuestas a la pregunta(2)

Su respuesta a la pregunta