增加SKB缓冲区问题。
我现在有个问题也是和很多朋友一样子。大概就是修改HTTP的TCP数据包。 skb 的 tailroom够的话我一般可以插入数据然后发送。但是如果想增加tailroom的话就麻烦了。我不知道是用pskb_expand_head好还是用skb_copy_expand。我现在用pskb_expand_head增加了长度。直接是NF_ACCEPT发送出去。出现的问题是说网络帧FCS效验错误。调用dev_queue_xmit发送吧。好像又没收到包。SKB的数据一开始得到的时候他带没带MAC头部的?请高手指教。 是不是ip头部检验和没有重新设置 回复 1# bobioo我现在有个问题也是和很多朋友一样子。大概就是修改HTTP的TCP数据包。 skb 的 tailroom够的话我一般可以插入数据然后发送。但是如果想增加tailroom的话就麻烦了。我不知道是用pskb_expand_head好还是用skb_copy_expand。我现在用pskb_expand_head增加了长度。直接是NF_ACCEPT发送出去。出现的问题是说网络帧FCS效验错误。调用dev_queue_xmit发送吧。好像又没收到包。SKB的数据一开始得到的时候他带没带MAC头部的?请高手指教。
(1)pskb_expand_head使用的时候要非常注意,因为是直接操作源包,如果数据包被多个owner使用,那么直接就panic了。skb_copy_expand相对来说是完全copy一份出来,效率会低一些。
(2)对于tcp协议,修改了内容后,需要修改相应的synseq和ackseq
事实上是扩展成功了。但是发送出去的数据用截包软件提示MAC的校验有问题。 我基本上如果不扩展SKB的话是可以修改或者增加 (tailroom够的话)HTTP里面的内容。但我现在想扩展SKB数据后加入一些内容。 :cry:基本上如果不扩展的话我已经可以加入少量的内容的。不过没扩展的话 tailroom实在是太小。做不得了什么东西。扩展之后那个包又不是包了。很烦。 (2)对于tcp协议,修改了内容后,需要修改相应的synseq和ackseq
我回去看看。这个问题。 你说的是seq和ack序号吧,那个只是在结束后发送fin包的时候修改。和我说的问题不相关。
昨晚上找到什么问题了。是使用pskb_expand_head之后。之前定义的IP头部的指针和TCP的指针失效了。造成了本来修改的IP长度和IP效验和TCP效验都是原来的。所以传出去的包被丢弃了。 感谢各位朋友。此问题解决了。呵虽然花了点时间不过可以做一些HTTP的窜可以做广告插入之类的开发了。
页:
[1]
2