TCP頭部

weixin_34342992發表於2018-08-16

在用libnids處理資料的過程中,產生了利用頭部的需求,但是呢,libnids並沒有帶上來。
需要自己來處理,最開始的時候不想動底層的協議棧,就註冊了一個ip回撥函式,通過seq排序方式來處理亂序。但今天又發生了一個比較尷尬的事情,就是重穿的沒辦法處理了。
現在只能去動協議棧了,這樣也好,直接每個包都找到自己的頭部,比較對應。
除錯過程中呢,也發現這個閱讀原始碼的過程,真的是很需要功底。最後直接用gdb的bt看到了所有的呼叫過程,這個比我在那裡弄好久要效率搞得多。
2018/06/20
而且發現這個坑是真的大,協議棧裡面的東西很複雜,不是說你隨便改個東西就完了。
不過倒是對這一塊tcp重組的部分,有了些瞭解。
我本質上的初衷,就是,我想讓這個頭部就像資料一樣,跟著上去。這就需要涉及到把他所有的那些類似seq的值給改了。
2018/06/21

他的邏輯是這樣的,如果這個包就是我要的,就是順序沒有錯,那麼我直接就進到了外掛裡面,如果是亂序的,那麼我就快取這個包。
我處理的過程是,一開始就把帶有tcp頭部的資料給傳輸上去,然後如果順序沒有錯誤,那麼直接就把這個頭部的資訊寫到這個a_tcp裡面。
如果是快取了,就快取了所有的包,等到需要我的時候,就把這個包的頭部也給安排進去。

昨天出了一個bug,是因為在這個步驟之間他還用了這個長度做判斷。所有導致錯誤了。

今天已經修改。

現在的版本應該是沒有錯誤的。

但是我感覺,如果是修改成了多執行緒之後,一旦資料沒有分割均衡好,可能會錯誤。反正現在是對的,已經滿足需求了。

相關文章