How can I filter the packets so that they are conformant to some format I define (eg. a formal grammar)?
Per quanto ne so, non esiste un software di filtro per scopi generali che potresti utilizzare per normalizzare il traffico in base a una grammatica formale. Per protocolli specifici come HTTP potresti provare a utilizzare IPS (o IDS in linea) come Snort, Suricata, Bro o firewall commerciali, ma nella mia esperienza sono molto tolleranti agli errori di protocollo. Per HTTP è possibile anche i gateway a livello di applicazione (ovvero il proxy inverso) che, secondo la mia esperienza, sono un po 'più rigidi e almeno normalizzano il traffico, cioè rimuovono implicitamente alcuni dati non validi. Un tipo speciale di questi gateway HTTP sono i firewall per applicazioni Web (WAF) che sono in genere più rigidi dei normali proxy HTTP.
Ma nessuna di queste soluzioni filtra tutto, ad esempio la tua applicazione dovrebbe essere sufficientemente robusta in modo che i dati non validi non causino problemi di sicurezza. Se così non fosse, non renderei l'applicazione accessibile da Internet.