忘记密码   免费注册 查看新帖 | 论坛精华区
ChinaUnix.net
  平台论坛 博客 微博 读书 人才 精华 文库 自测 | 频道操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
最近访问板块 发新帖
查看: 9804 | 回复: 81

关于构造Http Response包的问题 [复制链接]
更多

To be 千里马!

Rank: 8Rank: 8

帖子
14516
主题
366
精华
21
可用积分
58752
专家积分
79
在线时间
5761 小时
注册时间
2007-03-09
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 11:26:56 |显示全部楼层
当我判断到Http Get请求时,我要直接给请求方发送一个Response包。这里涉及到构造数据包的问题。

如果采用修改请求包的方式,要调整的地方:
IP层,源与目的地址,TTL
TCP层,源与目的端口号,SEQ和ACK number
应用层的话,就是构造出来一个Response包。如果基于原先请求包的修改,在应用层数据部分的长度肯定是要发生变化了,这个时候,我还能用直接修改的方法,还是alloc_skb的方法呢?
----------
欢迎光临Godbach的博客交流技术问题:
Godbach's Blog
---------
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
To be 千里马!

Rank: 8Rank: 8

帖子
14516
主题
366
精华
21
可用积分
58752
专家积分
79
在线时间
5761 小时
注册时间
2007-03-09
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 11:52:06 |显示全部楼层
可能要修改tail指针,以及skb->len,下午测试一下
----------
欢迎光临Godbach的博客交流技术问题:
Godbach's Blog
---------
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
人生的转折

Rank: 8Rank: 8

帖子
36723
主题
717
精华
111
可用积分
78842
专家积分
599
在线时间
816 小时
注册时间
2002-11-02
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 12:41:50 |显示全部楼层
我觉得直接修改原来的包就行,改一下 skb->len 等相应长度参数(IP 头的、TCP 头的),重新计算校验和
IP 的原目的要交换,MAC 的原目的也要交换,skb->data 重新指向 MAC 头,skb->len 要加上 MAC 头的长度以及 payload 变化后的增量
当我们在为生活而疲惫奔波的时候
生活却渐渐离我们远去
find our way, find our style

Platinum's BLog
http://platinum.cublog.cn

我的微博
http://weibo.com/bjpt
To be 千里马!

Rank: 8Rank: 8

帖子
14516
主题
366
精华
21
可用积分
58752
专家积分
79
在线时间
5761 小时
注册时间
2007-03-09
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 12:52:34 |显示全部楼层
原帖由 platinum 于 2008-9-4 12:41 发表
我觉得直接修改原来的包就行,改一下 skb->len 等相应长度参数(IP 头的、TCP 头的),重新计算校验和
IP 的原目的要交换,MAC 的原目的也要交换,skb->data 重新指向 MAC 头,skb->len 要加上 MAC 头的长度以 ...


多谢白金兄指点啊。那payload变化了,是不是tail也要发生变化呢?
----------
欢迎光临Godbach的博客交流技术问题:
Godbach's Blog
---------
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!

Rank: 1

帖子
162
主题
12
精华
0
可用积分
208
专家积分
5
在线时间
87 小时
注册时间
2007-02-28
最后登录
2011-12-02
论坛徽章:
0
发表于 2008-09-04 12:57:24 |显示全部楼层
要是payload比原来得长得话,需要重新alloc_skb吧
To be 千里马!

Rank: 8Rank: 8

帖子
14516
主题
366
精华
21
可用积分
58752
专家积分
79
在线时间
5761 小时
注册时间
2007-03-09
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 13:03:25 |显示全部楼层
原帖由 qps104 于 2008-9-4 12:57 发表
要是payload比原来得长得话,需要重新alloc_skb吧


skb分配的时候是有固定大小的吧,一般是可以容纳下一个包的。Payload变化的话,估计调整tail指针就可以了
----------
欢迎光临Godbach的博客交流技术问题:
Godbach's Blog
---------
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!

Rank: 1

帖子
162
主题
12
精华
0
可用积分
208
专家积分
5
在线时间
87 小时
注册时间
2007-02-28
最后登录
2011-12-02
论坛徽章:
0
发表于 2008-09-04 13:09:51 |显示全部楼层

回复 #6 Godbach 的帖子

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

Rank: 2

帖子
708
主题
36
精华
3
可用积分
1654
专家积分
15
在线时间
656 小时
注册时间
2004-06-27
最后登录
2011-09-27
论坛徽章:
0
发表于 2008-09-04 13:12:36 |显示全部楼层
看你是在哪个处理流程中做了。

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

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

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

Rank: 2

帖子
708
主题
36
精华
3
可用积分
1654
专家积分
15
在线时间
656 小时
注册时间
2004-06-27
最后登录
2011-09-27
论坛徽章:
0
发表于 2008-09-04 13:13:36 |显示全部楼层
原帖由 qps104 于 2008-9-4 13:09 发表
不是哦。你去访问下skb->tail后面得地址机器肯定死掉


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

tail到end还是有一些空间的
ShadowStar.cublog.cn

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

Rank: 8Rank: 8

帖子
14516
主题
366
精华
21
可用积分
58752
专家积分
79
在线时间
5761 小时
注册时间
2007-03-09
最后登录
2012-02-09
论坛徽章:
0
发表于 2008-09-04 13:52:18 |显示全部楼层
原帖由 ShadowStar 于 2008-9-4 13:12 发表
看你是在哪个处理流程中做了。

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


我这里接受数据包之后,修改之后然后发出去,这样就结束了,rcv之后的流程不会处理这个数据包了
----------
欢迎光临Godbach的博客交流技术问题:
Godbach's Blog
---------
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
您需要登录后才可以回帖 登录 | 注册

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP