What is the high level view of categorizing the packet as HTTP (or any "x" protocol)?
I numeri di porta standard sono vicini ottieni una classificazione ufficiale dei protocolli a livello di applicazione. Ma in pratica, i servizi spesso non aderiscono alle loro porte predefinite e non esiste semplicemente un modo universale per rilevare quale protocollo di livello 7 viene utilizzato. Pertanto, l'analisi approfondita dei pacchetti si basa in gran parte sull'euristica delle espressioni regolari o sul semplice confronto delle stringhe di base (come nel codice di riferimento di nDPI).
Nella maggior parte dei casi non esiste un modo migliore per rilevare un protocollo rispetto alla ricerca di schemi tipici nei pacchetti (preferibilmente iniziali) - come una riga di richiesta GET
con intestazioni successive per identificare una connessione HTTP.
Di conseguenza, hai ragione che è facile eludere questi controlli oscurando il protocollo (spesso fatto dalle applicazioni BitTorrent). Il progetto di filtro Linux Layer 7 fuori produzione ha un Domande frequenti che risolvono questi problemi:
Q: Isn't this just another pointless step in an arms race in which protocols will continually adapt to evade classification?
A: You can look at it like that, but essentially no. Internet standards like HTTP will not do this. Only P2P programs and the like will. This means that, at worst, what you will need to do is to shape the "unknown" classification down, leaving the most bandwidth for known protocols like HTTP, SMTP, and so on.
Dai anche un'occhiata alla l7protocols wiki che documenta vari metodi di identificazione del protocollo, molti dei quali basati su espressioni regolari.