即時通訊開發一個項目使用winpcap ..因爲我知道被嗅探的數據包通常是碎片數據包。如何重新組裝tcp段?
如何重新組裝這個TCP鏈段?..任何想法,建議或教程可用?..
這個我認爲是我可以查看HTTP標頭的唯一途徑...
的感謝! ..
即時通訊開發一個項目使用winpcap ..因爲我知道被嗅探的數據包通常是碎片數據包。如何重新組裝tcp段?
如何重新組裝這個TCP鏈段?..任何想法,建議或教程可用?..
這個我認爲是我可以查看HTTP標頭的唯一途徑...
的感謝! ..
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。你已準備好出發!
有沒有這樣的事情作爲TCP片段。 IP協議有碎片。 TCP是一個流協議。您可以按照雙方的序列號將流組裝到預定的順序。每個TCP數據包都進入IP級別,並可以在那裏被分割。您可以通過收集所有片段並跟蹤頭中的片段偏移來組裝每個數據包。
您需要的所有信息都在標題中。維基百科的文章在解釋相當有用了每個字段是
http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header
根據您試圖被動地重新組合的流量,您可能遇到一些TCP混淆技術,這些混淆技術旨在混淆試圖完成您想要做的事情的人。檢查出this paper不同的操作系統重組行爲。
libtins提供了以非常高級的方式執行TCP stream reassembly的類,因此您不必擔心TCP內部機制這樣做。
PcapPlusPlus爲所有主要操作系統(包括Windows)提供了此功能。請查看TcpReassembly示例以查看工作代碼和API文檔,以瞭解如何使用TCP重組功能