2014-12-03 53 views
2

我正在從pcap文件中提取http數據。我必須重新組裝片段,所以我找到了nids lib。我在Mac OS 10.9.5 64位安裝了自制軟件libnids 1.24。我試着運行printall sample。我修改了一下代碼以適合我的環境,比如將「nids.h」更改爲,添加nids_params.filename = filename;打開離線文件進行分析。tcp_callback從未在libnids示例中調用過

該示例能夠啓動。但問題是它沒有打印任何東西。

我將打印添加到tcp_callback函數的第一行。再一次,沒有。這表明回調從未被調用。

爲了證明這個問題是不是與我的帽子文件

  • 我將它設置爲捕獲實時數據包relatted。打開網頁後,我什麼都沒有。
  • 我用libpcap自己解析pcap文件,並得到大量的tcp數據包。
  • 數據包的數量是70k +。握手不太可能沒有完整的tcp連接。

編寫libnids與樣本和調試一步一步是很痛苦的。那麼你能給我一些關於爲什麼不調用回調的信息嗎?

回答

1

因爲沒有人回答我:(我必須選擇最痛苦的方式:編譯libnids,然後一步一步調試看到跆拳道是怎麼回事

我試着關掉-02編譯選項

。 。

,看看那裏的TCP回調應該叫我發現了兩個事實:

  • 一些數據包的校驗和是錯誤的
  • 它僅僅是找到一個TCP流和補充,因爲ACK的一個新的連接。 '沒有被看見。

第一個由wireshark驗證。我看到wireshark認爲我的那個tcp checksum offload。我從Wireshark的的維基得到的解釋:

大多數現代操作系統都支持某種形式的網絡卸載, 其中上網卡一些網絡處理髮生在CPU代替。 通常這是一件好事。它可以釋放系統其餘 上的資源,並讓它處理更多連接。如果您嘗試捕獲流量,可能會導致虛假錯誤和奇怪的錯誤,甚至可能會導致流量不足。 校驗和卸載 在支持校驗和卸載的系統上,只需在網卡上傳輸IP地址,TCP和UDP校驗和之前,就在NIC上計算IP,TCP和UDP校驗和。在Wireshark中,這些數據包顯示爲標有黑色 的傳出數據包,並帶有紅色文本和註釋[不正確,應爲xxxx(可能由 「TCP校驗和卸載」引起)]。

第二個是因爲libnids能夠通過握手信息重新組裝流。

突然之間,這個想法讓我想起了結合這兩個事實導致結果不輸出任何東西。

由於大多數ACK數據包都有錯誤的校驗和。因此,在重組功能可以看到數據包之前,數據包被跳過。

禁用校驗和後,我終於得到了tcp payload的輸出。兩天,我明白了!

相關問題