¿Existe alguna API C de redes de Linux para procesar cada paquete de red como usuario antes de enrutarlos?

¿Existe alguna API C de redes de Linux para procesar cada paquete de red como usuario antes de enrutarlos?

Estoy escribiendo un código para crear una "red Wi-Fi semipública" con credenciales de usuario.

Digo semipública porque sigue siendo una red Wi-Fi privada (todo el tráfico está encriptado) pero está configurada como pública en la interfaz Wi-Fi, para poder conectarse sin contraseña de Wi-Fi.

En el lado de mi servidor/enrutador, necesito interceptar cada paquete, verificar sus derechos y luego volver a enviarlo o descartarlo. Para eso, utilicé IOCTL y configuré una interfaz tap ("enrutador intermedio") que captura paquetes en cada subred y los reenvía o descarta según corresponda. Eso funciona muy bien: los paquetes en una subred no pueden ir a otra sin ser procesados ​​por mi código. Pero no puedo evitar que una aplicación envíe paquetes no autorizados y sin cifrar a las redes (sin establecer una regla en iptables para redirigir todo a mi interfaz tap, excepto mi API).

Pero creo que esa manera parece ser una especie de "truco". Lo que me gustaría hacer es hacer que el kernel llame a mi código para realizar el paso de enrutamiento.

información relacionada