免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

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

论坛徽章:
0
1 [报告]
发表于 2008-09-04 13:12 |显示全部楼层
看你是在哪个处理流程中做了。

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

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

论坛徽章:
0
2 [报告]
发表于 2008-09-04 13:13 |显示全部楼层
原帖由 qps104 于 2008-9-4 13:09 发表
不是哦。你去访问下skb->tail后面得地址机器肯定死掉


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

tail到end还是有一些空间的

论坛徽章:
0
3 [报告]
发表于 2008-09-04 14:10 |显示全部楼层
原帖由 Godbach 于 2008-9-4 13:53 发表


多谢。那也就是如果tail只要不超过end,还是可以进行调整的,对吗?


是的

不过要注意一下调用的发送函数,要是直接用dev_queue_xmit的话,需要skb_push

论坛徽章:
0
4 [报告]
发表于 2008-09-04 14:31 |显示全部楼层
原帖由 Godbach 于 2008-9-4 14:23 发表


是吗,我在测试时,接收到SYN包,回应SYN+ACK包,没有使用skb_push。只是直接修改了MAC层的源与目的MAC


netif_receive_skb时,skb->data指向iph,而不是mac。

dev_queue_xmit从skb->data开始发送数据。

skb_push改data,put改tail

论坛徽章:
0
5 [报告]
发表于 2008-09-04 15:08 |显示全部楼层
原帖由 Godbach 于 2008-9-4 14:40 发表


多谢。当我调用dev_queue_xmit时,skb->data是否需要指向mac,我之前测试方法是,在调用该函数前,skb->data指向了mac,同时修改了skb->len.



我现在的应用应该是修改应用层的数据内容,数据内核比接 ...


调用dev_queue_xmit前当然需要将data指到mac

用skb_push和skb_put操作起来更简单些, 但是实际和你手动设定data和len是一样效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP