TCP头部

在用libnids处理数据的过程中,产生了利用头部的需求,但是呢,libnids并没有带上来。
需要自己来处理,最开始的时候不想动底层的协议栈,就注册了一个ip回调函数,通过seq排序方式来处理乱序。但今天又发生了一个比较尴尬的事情,就是重穿的没办法处理了。
现在只能去动协议栈了,这样也好,直接每个包都找到自己的头部,比较对应。
调试过程中呢,也发现这个阅读源码的过程,真的是很需要功底。最后直接用gdb的bt看到了所有的调用过程,这个比我在那里弄好久要效率搞得多。
2018/06/20
而且发现这个坑是真的大,协议栈里面的东西很复杂,不是说你随便改个东西就完了。
不过倒是对这一块tcp重组的部分,有了些了解。
我本质上的初衷,就是,我想让这个头部就像数据一样,跟着上去。这就需要涉及到把他所有的那些类似seq的值给改了。
2018/06/21

他的逻辑是这样的,如果这个包就是我要的,就是顺序没有错,那么我直接就进到了插件里面,如果是乱序的,那么我就缓存这个包。
我处理的过程是,一开始就把带有tcp头部的数据给传输上去,然后如果顺序没有错误,那么直接就把这个头部的信息写到这个a_tcp里面。
如果是缓存了,就缓存了所有的包,等到需要我的时候,就把这个包的头部也给安排进去。

昨天出了一个bug,是因为在这个步骤之间他还用了这个长度做判断。所有导致错误了。

今天已经修改。

现在的版本应该是没有错误的。

但是我感觉,如果是修改成了多线程之后,一旦数据没有分割均衡好,可能会错误。反正现在是对的,已经满足需求了。

你可能感兴趣的:(TCP头部)