簡體   English   中英

如何使用http或其他應用層協議檢測數據包?

[英]How to detect packets using http or other application layer protocols?

我正在編寫一個程序,它可以檢測網絡數據包中使用的協議。 對於接收到的每個數據包,它將嘗試檢測網絡和傳輸等層中的協議。 檢測這兩層中的協議非常容易,因為在數據包的某個地方,我們有一些字節可以告訴我們有關協議的信息。 但是對於應用程序層,據我所知要困難得多。 在 HTTP 數據包中沒有任何地方沒有提到協議(據我所知)。 檢測應用層協議的另一個難點是整個 HTTP 請求或響應可能需要多個數據包,並且連接多個數據包要困難得多。

我想從理論上知道如何檢測這些協議。

不幸的是,沒有簡單的答案。 雖然沒有那么多的網絡和傳輸層協議,並且存在的協議已經很好地標准化了,但應用層要混亂得多。

猜測應用程序協議的一種方法是查看各種“提示”,例如端口號、特定位置中某些字符串的存在(例如“HTTP”)、數據包長度等。但這並不是萬無一失的。 我可以輕松地在端口 80 上運行一些自定義協議,該協議恰好在有效負載中包含“HTTP”但不是 HTTP。 這就是為什么即使像wireshark這樣的專用工具有時也無法檢測到正確的協議。 順便說一下,您可以使用wireshark 的源代碼來詳細了解它如何剖析不同的協議。

關於以多個數據包發送的協議 - 這更容易。 您的解析器必須將 TCP 視為它的協議。 單個數據包在 TCP 中毫無意義,您的解析器必須跨多個數據包跟蹤流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM