2010-02-13 73 views
5

即時通訊開發一個項目使用winpcap ..因爲我知道被嗅探的數據包通常是碎片數據包。如何重新組裝tcp段?

如何重新組裝這個TCP鏈段?..任何想法,建議或教程可用?..

這個我認爲是我可以查看HTTP標頭的唯一途徑...

的感謝! ..

回答

4

TCP是一個字節流協議。 由http應用程序發送的字節序列被封裝在tcp數據段中,並且在將數據傳送到另一側的應用程序之前重新創建字節流。 由於您使用winpcap訪問tcp數據集,因此您需要轉到段的數據部分。 tcp的頭部固定長度爲20個字節+一個可選部分,您需要使用winpcap API確定。

tcp段中數據部分的長度是通過減去tcp報頭長度(從tcp段中的字段獲得)和ip報頭長度(從封裝tcp段的ip數據報中的字段中)從總長度(從ip數據報的另一個字段獲得)。

所以現在你有段的總段長度和數據部分的長度。所以你知道HTTP請求數據開始的偏移量。

偏移是

total length-length of data part 
or 
length of ip-header + length of tcp header 

我還沒有使用的winpcap。所以你將不得不找出如何使用api獲取這些字段。

也ip數據報可能會進一步分裂,但我期待你只提供重組數據報使用此api。你已準備好出發!

6

有沒有這樣的事情作爲TCP片段。 IP協議有碎片。 TCP是一個流協議。您可以按照雙方的序列號將流組裝到預定的順序。每個TCP數據包都進入IP級別,並可以在那裏被分割。您可以通過收集所有片段並跟蹤頭中的片段偏移來組裝每個數據包。
您需要的所有信息都在標題中。維基百科的文章在解釋相當有用了每個字段是

http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header

1

根據您試圖被動地重新組合的流量,您可能遇到一些TCP混淆技術,這些混淆技術旨在混淆試圖完成您想要做的事情的人。檢查出this paper不同的操作系統重組行爲。

2

PcapPlusPlus爲所有主要操作系統(包括Windows)提供了此功能。請查看TcpReassembly示例以查看工作代碼和API文檔,以瞭解如何使用TCP重組功能