免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
61 [报告]
发表于 2009-08-17 17:02 |只看该作者
原帖由 Godbach 于 2009-8-17 16:57 发表
你想看什么啊,实现的框架讨论中都谈到了啊。

void send_http_response(struct sk_buff *oldskb, char *data, int datalen){
        int old_headroom_length=0;
        struct sk_buff *skb=NULL;
        struct iphdr *iph;
        struct tcphdr *tcph;
        char *ptr;

        old_headroom_length=skb_headroom(oldskb);
        skb=skb_copy_expand(oldskb, old_headroom_length, skb_tailroom(oldskb)+datalen, GFP_ATOMIC);
        if(skb == NULL){
                return;
        }
        ptr=skb_put(skb, datalen);
        memcpy(ptr, data, datalen);
        skb->len+=datalen;

        iph=(struct iphdr *)skb->data;
        tcph=(struct tcphdr *)((skb->data)+(skb->nh.iph->ihl*4));


我现在写到这下面不知道怎么弄了

1            我调换完端口和ip后 需要重新计算校验和么? 有现成的函数没
2            需要自己构建二层包头么?
3            ack和seq怎么算的?

多谢 。  就是想看看你从构造到发送的过程

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
62 [报告]
发表于 2009-08-17 17:03 |只看该作者
故哈兄见谅啊,因为工作原因,不太适合把代码贴上来。我就根据你的代码,一起讨论一下你的问题。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
63 [报告]
发表于 2009-08-17 17:05 |只看该作者
对于你的第1个问题,如果仅仅调换端口和IP的话是不需要重新计算校验和的。但是如果一旦你调整了报文的长度,那么IP层的,传输层的都需要重新计算。

论坛徽章:
0
64 [报告]
发表于 2009-08-17 17:05 |只看该作者
原帖由 Godbach 于 2009-8-17 17:03 发表
故哈兄见谅啊,因为工作原因,不太适合把代码贴上来。我就根据你的代码,一起讨论一下你的问题。

没关系。  你看我那个下面还需要干什么?
说白了 我的需求和你一样

论坛徽章:
0
65 [报告]
发表于 2009-08-17 17:06 |只看该作者
原帖由 Godbach 于 2009-8-17 17:05 发表
对于你的第1个问题,如果仅仅调换端口和IP的话是不需要重新计算校验和的。但是如果一旦你调整了报文的长度,那么IP层的,传输层的都需要重新计算。

有现成的函数么?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
66 [报告]
发表于 2009-08-17 17:06 |只看该作者
计算IP层校验和的函数:ip_fast_csum
计算传输层的校验和函数:csum_tcpudp_magic
这两个函数都是2.4中的,2.6中的有所变化,你对应找一下。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
67 [报告]
发表于 2009-08-17 17:08 |只看该作者
2            需要自己构建二层包头么?

二层的源和目的MAC也需要对调的。因为你这里会调用dev_queue_xmit,因此要修改一下data指针,使其指向MAC头。即调用skb_push函数调整一下。

论坛徽章:
0
68 [报告]
发表于 2009-08-17 17:09 |只看该作者
原帖由 Godbach 于 2009-8-17 17:06 发表
计算IP层校验和的函数:ip_fast_csum
计算传输层的校验和函数:csum_tcpudp_magic
这两个函数都是2.4中的,2.6中的有所变化,你对应找一下。

那我只需要重新计算每层校验和  然后调用dev_queue_xmit发送就行了?

ack和seq不需要改了么?

论坛徽章:
0
69 [报告]
发表于 2009-08-17 17:10 |只看该作者
原帖由 Godbach 于 2009-8-17 17:08 发表

二层的源和目的MAC也需要对调的。因为你这里会调用dev_queue_xmit,因此要修改一下data指针,使其指向MAC头。即调用skb_push函数调整一下。



skb_copy_expand出来的skb  带有源skb的mac头么?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
70 [报告]
发表于 2009-08-17 17:19 |只看该作者
原帖由 故哈 于 2009-8-17 17:09 发表

那我只需要重新计算每层校验和  然后调用dev_queue_xmit发送就行了?

ack和seq不需要改了么?


应该得修改ack和seq啊。不过如果你明白seq和ack在传输过程中是如何变化的,修改他们的值应该不难的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP