Linux.ChinaUnix.net
ChinaUnix | Linux首页 | 新闻 | 博客 | 文章 | 专栏 | 新手 | 方案 | 图书 | 下载 | 人才 | 手册 | wiki | 搜索     
Linux论坛
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索



关于构造Http Response包的问题
首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
版主 Godbach (To be 千里马!)
版主-大法师


CU奥运火炬传递手2008
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:8560
精华:12

可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17

状态:...保密...

[个人空间] [短信] [博客]


1楼 发表于 2008-9-4 11:26 
当我判断到Http Get请求时,我要直接给请求方发送一个Response包。这里涉及到构造数据包的问题。

如果采用修改请求包的方式,要调整的地方:
IP层,源与目的地址,TTL
TCP层,源与目的端口号,SEQ和ACK number
应用层的话,就是构造出来一个Response包。如果基于原先请求包的修改,在应用层数据部分的长度肯定是要发生变化了,这个时候,我还能用直接修改的方法,还是alloc_skb的方法呢?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
版主 Godbach (To be 千里马!)
版主-大法师


CU奥运火炬传递手2008
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:8560
精华:12

可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17

状态:...保密...

[个人空间] [短信] [博客]


2楼 发表于 2008-9-4 11:52 
可能要修改tail指针,以及skb->len,下午测试一下



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
版主 platinum (何时才能飞)
广告杀手-老法王
人生的转折



CU编号: 26424
注册:2002-11-2
最后登录: 2009-07-04
帖子:20743
精华:22

可用积分:30298 (巨富豪门)
信誉积分:105
专家积分:479 (本版:25)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


3楼 发表于 2008-9-4 12:41 
我觉得直接修改原来的包就行,改一下 skb->len 等相应长度参数(IP 头的、TCP 头的),重新计算校验和
IP 的原目的要交换,MAC 的原目的也要交换,skb->data 重新指向 MAC 头,skb->len 要加上 MAC 头的长度以及 payload 变化后的增量



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

当我们在为生活而疲惫奔波的时候
生活却渐渐离我们远去
find our way, find our style
版主 Godbach (To be 千里马!)
版主-大法师


CU奥运火炬传递手2008
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:8560
精华:12

可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17

状态:...保密...

[个人空间] [短信] [博客]


4楼 发表于 2008-9-4 12:52 


QUOTE:
原帖由 platinum 于 2008-9-4 12:41 发表
我觉得直接修改原来的包就行,改一下 skb->len 等相应长度参数(IP 头的、TCP 头的),重新计算校验和
IP 的原目的要交换,MAC 的原目的也要交换,skb->data 重新指向 MAC 头,skb->len 要加上 MAC 头的长度以 ...

多谢白金兄指点啊。那payload变化了,是不是tail也要发生变化呢?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
qps104
圣骑士




CU编号: 531581
注册:2007-2-28
最后登录: 2009-07-01
帖子:143
精华:0

可用积分:185 (白手起家)
信誉积分:100
专家积分:5 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-9-4 12:57 
要是payload比原来得长得话,需要重新alloc_skb吧



您对本贴的看法:鲜花[0] 臭蛋[0]
版主 Godbach (To be 千里马!)
版主-大法师


CU奥运火炬传递手2008
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:8560
精华:12

可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17

状态:...保密...

[个人空间] [短信] [博客]


6楼 发表于 2008-9-4 13:03 


QUOTE:
原帖由 qps104 于 2008-9-4 12:57 发表
要是payload比原来得长得话,需要重新alloc_skb吧

skb分配的时候是有固定大小的吧,一般是可以容纳下一个包的。Payload变化的话,估计调整tail指针就可以了



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
qps104
圣骑士




CU编号: 531581
注册:2007-2-28
最后登录: 2009-07-01
帖子:143
精华:0

可用积分:185 (白手起家)
信誉积分:100
专家积分:5 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2008-9-4 13:09 
回复 #6 Godbach 的帖子

不是哦。你去访问下skb->tail后面得地址机器肯定死掉



您对本贴的看法:鲜花[0] 臭蛋[0]
ShadowStar   帅哥
风云使者



CU编号: 167404
注册:2004-6-27
最后登录: 2009-07-05
帖子:567
精华:3

可用积分:781 (稍有积蓄)
信誉积分:100
专家积分:15 (本版:15)
空间积分:0
推广积分:0

来自:沈阳 - 北京
状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2008-9-4 13:12 
看你是在哪个处理流程中做了。

直接修改原始skb,再发送出去的话,例如:
rcv ()
{
send()
return
}
容易引起系统崩溃,因为dev_queue_xmit最后会kfree_skb,所以rcv之后的处理流程就会handle NULL pointer。

另外skb数据空间的大小不是固定,是根据网卡接受的大小分配的,所以skb_put前要检查tailroom



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

ShadowStar.cublog.cn

我发现智商TMD就是一切!
把程序员的三大美德进行到底!
别太把自己当回事!
ShadowStar   帅哥
风云使者



CU编号: 167404
注册:2004-6-27
最后登录: 2009-07-05
帖子:567
精华:3

可用积分:781 (稍有积蓄)
信誉积分:100
专家积分:15 (本版:15)
空间积分:0
推广积分:0

来自:沈阳 - 北京
状态:...离线...

[个人空间] [短信] [博客]


9楼 发表于 2008-9-4 13:13 


QUOTE:
原帖由 qps104 于 2008-9-4 13:09 发表
不是哦。你去访问下skb->tail后面得地址机器肯定死掉

不一定会死,但是要是put到end外面就挂了

tail到end还是有一些空间的



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

ShadowStar.cublog.cn

我发现智商TMD就是一切!
把程序员的三大美德进行到底!
别太把自己当回事!
版主 Godbach (To be 千里马!)
版主-大法师


CU奥运火炬传递手2008
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:8560
精华:12

可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17

状态:...保密...

[个人空间] [短信] [博客]


10楼 发表于 2008-9-4 13:52 


QUOTE:
原帖由 ShadowStar 于 2008-9-4 13:12 发表
看你是在哪个处理流程中做了。

直接修改原始skb,再发送出去的话,例如:
rcv ()
{
send()
return
}
容易引起系统崩溃,因为dev_queue_xmit最后会kfree_skb,所以rcv之后的处理流程就会handle NULL po ...

我这里接受数据包之后,修改之后然后发出去,这样就结束了,rcv之后的流程不会处理这个数据包了



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------

首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »

 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - Linux时代 - Archiver - WAP - TOP

Processed in 2.051390 second(s), 5 queries , Gzip enabled