wireshark和tcpdump抓包TCP亂序和重傳怎么辦?PCAP TCP排序工具分享


點擊上方藍字[協議分析與還原]關注我們


 介紹TCP排序方法,分享一個Windows版的TCP排序工具。

在分析協議的過程中,不可避免地需要抓包。

無論抓包條件如何優越,無論Windows下使用wireshark還是Linux下使用tcpdump,無論是在個人機器網卡還是骨干網絡的分光分流口,當pcap被保存,當pcap文件被打開,都會碰到報文亂序、重傳的情況,有時報文情況會相當的糟糕,並且相當的普遍,這是一種正常的技術現象,只要是抓包就會碰到的現象。

在協議解析系統中,首先要處理的就是TCP亂序重傳的問題,否則,很多信息就解析不出來。

在協議分析過程中,也要處理TCP亂序重傳問題,否則,分析就會遇到很多困難。

畢竟人腦並行處理的能力有限,當TCP報文的亂序嚴重影響到分析過程的時候,最好的解決方案是將報文的順序調整正確,即對pcap內的報文進行排序。

如果報文數量較少,可以使用WireEdit工具手動對pcap包內的報文進行調整,對一個個數據幀進行剪切、粘帖、刪除都很順手,雖然每次操作都會消耗一定的時間。

有需要WireEdit的朋友,請發送“wireedit”獲取下載地址。

當一個pcap內報文數量很多時,手動調整就很不現實了,迫切需要有一個對TCP進行排序的工具對報文進行排序。在網上一直沒找到合適的工具。

一個可正常使用的還原解析系統,一般都實現了TCP排序及讀包處理的過程,如果系統的TCP排序模塊留有接口,讀入pcap文件,輸出排序好TCP的pcap文件,那我們就可以借助解析系統來實現TCP排序。

但很多時候,由於很多原因,協議還原解析系統並不能很好地滿足需要,因此在這里提供一個簡單的對pcap內的TCP排序的工具,發送“tcpsort”獲取下載地址

本文將首先介紹TCP排序原理,然后介紹下這款簡單的排序工具的使用方法,它能滿足大部分的TCP排序需求。

01

TCP排序基本原理

我們知道,TCP協議是有連接的協議,數據的傳輸具備可靠性,在協議控制層對數據傳輸過程及內容的正確性及可靠性進行保證。

對TCP IP協議的介紹可參考之前的文章:

協議分析中的TCP/IP網絡協議

TCP排序就是利用TCP協議的可靠性特征,來使數據包的順序正確,從而不影響協議的分析與解析過程。

一個常見的TCP報文,在以太頭、IP頭之后,就是TCP協議頭了,TCP頭格式如下:

640?wx_fmt=png

熟悉TCP協議的同志應該知道,TCP頭內的seq及ACK兩個整數就是用來進行可靠性保證的關鍵字段。

每個報文根據之前已傳輸的數據內容體的長度,有一個自己的seq,當然,seq不一定唯一,因為有空包的存在,同時,seq從syn包的seq開始,同一個TCP流內,同一個方向的seq是遞增的,遞增值與TCP包內傳輸的內容體長度字節數相關。在我們使用wireshark看報文的時候,會在TCP頭的解析內,看到一個nextseq值,這個值在報文中並不存在,是根據當前報文長度算出來的,我們在TCP排序過程中也會事先算好nextseq值。就像下面這個例子:

640?wx_fmt=png

另外,seq值的遞增,需要注意,根據協議標准,syn包的下一個包,seq值是加一的,而不會因為syn包內沒有數據內容而相等,上下行都是這樣子。

對於ACK,一般是標明所回應的另一側的報文的序號,即對應報文的seq,ACK在雙向報文具備嚴格的交互關系時,需要保證上下行TCP報文的順序的TCP排序中需要用到,但應用面有限,更多的涉及到協議應用層數據的處理,同時會使復雜性大增,我們在對pcap的TCP排序中就可以簡化掉,不需要額外處理了。

一般來說,簡單的TCP排序只需要處理seq的變化就可以了,當一個方向期望的nextseq與比當前seq要小時,可以認為中間丟包了,就將當前報文緩存起來,等待中間報文的出現。

處理了亂序,當然要順便簡單處理下重傳的數據了。為什么說是簡單處理呢?因為嚴格按協議來處理太復雜了。

TCP頭中有一個字段叫checksum,就是校驗和,是報文內容的CRC32值,理論上我們可以用它來判斷是否存在報文的重傳,但對排序的實現而言,需要保存之前的checksum值,太不合算了,所以實際實現過程中沒有選取它來判斷重傳。

同時,TCP協議的重傳,是可以重傳某一部分數據的,這在理論上,會導致重傳相關的兩個報文內容出現部分包含的情況,這種重傳在實際抓包過程中出現很少,我們在排序中就不處理了。

把復雜情況排除,剩下的場景就簡單了,只需要根據seq,nextseq,ack這幾項tcp頭內的特征,與前一個已經排序好的報文相比,值小的話就判斷是重傳即可。

另外,排序還需考慮連接報文從中間開始的情況,此時,直接認為第一個包就是排序好的包。

本文介紹的對pcap內TCP排序的工具就是按照上面的方法實現的。

02

TCP排序工具介紹

這款工具是在Windows下使用vs2012開發的,名稱為“sortpcap”。

工具主要使用到了winpcap庫,因此使用的機器最好能裝winpcap庫,如果裝了wireshark,默認該庫就已經裝上了,就不需要額外安裝。

工具的主要功能是,讀入一個pcap文件,對文件內的TCP報文進行排序處理,最終輸出排序好的pcap文件。

工具比較簡單,使用命令行進行交互,但已滿足了大部分的需求。使用過程很簡單,可以選擇在進程啟動時參數中帶文件名使用,像這樣:

sortpcap.exe test3.pcap

回車后會立刻對文件進行排序,輸出結果。

也可以在啟動后再輸入需要排序的文件:

640?wx_fmt=png

其中的test3.pcap為輸入的待排序文件名稱,可帶路徑。

最終輸出的排序好的pcap文件被命名為“sort.原輸入文件名”,存在運行目錄下:

640?wx_fmt=png

排序過程中程序窗口會有些過程打印,本來是可以去掉的,但留着或許會有用,排序結束會輸出提示:

640?wx_fmt=png

按任意鍵就會退出程序窗口。

下面一個pcap排序前后的內容對比,這里用的是一個只有一條鏈接的pcap文件。

排序前的文件內容:

640?wx_fmt=png

排序后的文件內容:

640?wx_fmt=png

排序效果肉眼可見,排序后文件內錯誤的是一些0字節報文和checksum校驗錯誤。

這款工具基本能上滿足了協議分析的需求,如果需要的話發送“tcpsort”獲取下載地址,源碼恕不公開,如果確實需要源碼,可與我聯系。

需要注意,這個工具僅針對協議分析過程中的TCP排序需求實現,沒有考慮其它的應用場景,所以如果需要在大型解析系統中使用的話,還需考慮特定情況。

TCP排序工具的介紹到此就結束了,歡迎擴散,共同提高。


640?wx_fmt=jpeg

長按進行關注,時刻進行交流。

點擊右下方“在看”,與朋友們一起分享吧↘


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM