¿Cuál es la vista de alto nivel de categorizar el paquete como HTTP (o cualquier protocolo "x")?
Los números de puerto estándar están tan cerca como se llega a una clasificación oficial de los protocolos de capa de aplicación. Pero en la práctica, los servicios a menudo no se adhieren a sus puertos predeterminados y simplemente no existe una forma universal de detectar qué protocolo de capa 7 se está utilizando. Por lo tanto, la inspección profunda de paquetes se basa en gran parte en heurísticas de expresiones regulares o simplemente en una comparación básica de cadenas (como en el código de referencia de nDPI).
En la mayoría de los casos, no hay una mejor forma de detectar un protocolo que buscando patrones típicos en los paquetes (preferiblemente los iniciales), como una línea de solicitud GET
con encabezados posteriores para identificar una conexión HTTP.
En consecuencia, tiene razón en que es fácil evadir estas comprobaciones ocultando el protocolo (a menudo realizado por las aplicaciones de BitTorrent). El proyecto de filtro Linux Layer 7 descontinuado tiene un Preguntas frecuentes que abordan estas inquietudes:
P: ¿No es este otro paso sin sentido en una carrera de armamentos en la que los protocolos se adaptarán continuamente para evadir la clasificación?
A: Puedes verlo así, pero esencialmente no. Los estándares de Internet como HTTP no harán esto. Sólo los programas P2P y similares lo harán. Esto significa que, en el peor de los casos, lo que tendrá que hacer es dar forma a la clasificación "desconocida", dejando el mayor ancho de banda para los protocolos conocidos como HTTP, SMTP, etc.
También eche un vistazo a la l7protocols wiki que documenta varios métodos de identificación de protocolos, la mayoría de ellos basados en expresiones regulares.