bobioo 发表于 2014-09-03 11:44

增加SKB缓冲区问题。

我现在有个问题也是和很多朋友一样子。大概就是修改HTTP的TCP数据包。 skb 的 tailroom够的话我一般可以插入数据然后发送。但是如果想增加tailroom的话就麻烦了。我不知道是用pskb_expand_head好还是用skb_copy_expand。我现在用pskb_expand_head增加了长度。直接是NF_ACCEPT发送出去。出现的问题是说网络帧FCS效验错误。调用dev_queue_xmit发送吧。好像又没收到包。SKB的数据一开始得到的时候他带没带MAC头部的?请高手指教。

tc1989tc 发表于 2014-09-03 12:43

是不是ip头部检验和没有重新设置

瀚海书香 发表于 2014-09-03 16:38

回复 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

   

bobioo 发表于 2014-09-03 17:20

事实上是扩展成功了。但是发送出去的数据用截包软件提示MAC的校验有问题。

bobioo 发表于 2014-09-03 17:22

我基本上如果不扩展SKB的话是可以修改或者增加 (tailroom够的话)HTTP里面的内容。但我现在想扩展SKB数据后加入一些内容。

bobioo 发表于 2014-09-03 17:24

:cry:基本上如果不扩展的话我已经可以加入少量的内容的。不过没扩展的话 tailroom实在是太小。做不得了什么东西。扩展之后那个包又不是包了。很烦。

bobioo 发表于 2014-09-03 17:29

(2)对于tcp协议,修改了内容后,需要修改相应的synseq和ackseq
我回去看看。这个问题。

bobioo 发表于 2014-09-03 21:27

你说的是seq和ack序号吧,那个只是在结束后发送fin包的时候修改。和我说的问题不相关。

bobioo 发表于 2014-09-04 09:27

昨晚上找到什么问题了。是使用pskb_expand_head之后。之前定义的IP头部的指针和TCP的指针失效了。造成了本来修改的IP长度和IP效验和TCP效验都是原来的。所以传出去的包被丢弃了。

bobioo 发表于 2014-09-05 09:11

感谢各位朋友。此问题解决了。呵虽然花了点时间不过可以做一些HTTP的窜可以做广告插入之类的开发了。
页: [1] 2
查看完整版本: 增加SKB缓冲区问题。