¿Cómo puedo filtrar los paquetes para que cumplan con algún formato que defino (por ejemplo, una gramática formal)?
Por lo que sé, no existe un software de filtro de uso general que pueda utilizar para normalizar el tráfico en función de una gramática formal. Para protocolos específicos como HTTP puede intentar usar IPS (o IDS en línea) como Snort, Suricata, Bro o firewalls comerciales, pero en mi experiencia, son muy tolerantes a los errores de protocolo. Para HTTP, también puede usar pasarelas de nivel de aplicación (es decir, proxy inverso) que, según mi experiencia, son un poco más estrictas y al menos normalizan el tráfico, es decir, eliminan de manera implícita algunos datos con formato incorrecto. Un tipo especial de estas puertas de enlace HTTP son los cortafuegos de aplicaciones web (WAF) que suelen ser más estrictos que los proxies HTTP normales.
Pero ninguna de estas soluciones filtra todo, es decir, su aplicación debe ser lo suficientemente robusta para que los datos mal formados no causen problemas de seguridad. Si este no fuera el caso, no haría que la aplicación sea accesible desde Internet.