免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2177 | 回复: 7
打印 上一主题 下一主题

3层到4层传递,skb在哪里被修改? [复制链接]

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-12 16:02 |只看该作者 |倒序浏览
现在不太明白,就是skb里的第4层头指针h,是什么时候被设置好的。
我现在一个3层包(已经检查过iphdr),是不是这个时候h的指针就已经指向正确的位置了。

为何我在桥的PRE_ROUTING后(它做了3层的校验),取skb->h,这个时候我四层的是IGMP数据包。
h->tpye取的值却不正确,发现其值是46,也就是nh指向的第一个字符,也就是(h == nh)...
请各位给解疑惑

论坛徽章:
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
2 [报告]
发表于 2008-11-12 16:05 |只看该作者
记得偶的一篇帖子里面谈到过,如果是本地TCP的话,应该是在ip_local_deliver_finish中,LZ找一下

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
3 [报告]
发表于 2008-11-12 16:16 |只看该作者
再问问 :pskb_may_pull
如果现在3层包头信息已经检查完毕。
而我想取4层的一些信息,但是却不想动这个数据包,是不是要clone?
如果这个时候调用了pskb_may_pull对sk_buff里的东西有什么影响?

论坛徽章:
0
4 [报告]
发表于 2008-11-12 17:11 |只看该作者
原帖由 smalloc 于 2008-11-12 16:16 发表
再问问 :pskb_may_pull
如果现在3层包头信息已经检查完毕。
而我想取4层的一些信息,但是却不想动这个数据包,是不是要clone?
如果这个时候调用了pskb_may_pull对sk_buff里的东西有什么影响?


skb->tail的指针可能会变。

[ 本帖最后由 Arthur_ 于 2008-11-12 17:19 编辑 ]

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
5 [报告]
发表于 2008-11-12 17:14 |只看该作者
原帖由 Godbach 于 2008-11-12 16:05 发表
记得偶的一篇帖子里面谈到过,如果是本地TCP的话,应该是在ip_local_deliver_finish中,LZ找一下

比较奇怪,第3层IP处理:

ip_local_deliver_finish   ->
ret = ipprot->handler(skb);
                       
直接就调用了igmp_rcv。

这里只看到这段代码:
if (!pskb_may_pull(skb, sizeof(struct igmphdr)) ||
            (u16)csum_fold(skb_checksum(skb, 0, len, 0))) {
                in_dev_put(in_dev);
                kfree_skb(skb);
                return 0;
        }

下面就可以用skb里面的h了。


但是我在桥里面3层已经OK的情况下,做类似的调用,skb->h确没有指向正确的位置

论坛徽章:
0
6 [报告]
发表于 2008-11-12 17:22 |只看该作者
static inline int ip_local_deliver_finish(struct sk_buff *skb)
{
        __skb_pull(skb, ip_hdrlen(skb)); //这里把头去掉了

        /* Point into the IP datagram, just past the header. */
        skb_reset_transport_header(skb);

论坛徽章:
0
7 [报告]
发表于 2008-11-12 17:25 |只看该作者
是不是你的的IP的option没有去掉阿

论坛徽章:
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
8 [报告]
发表于 2008-11-12 17:38 |只看该作者
而我想取4层的一些信息,但是却不想动这个数据包,是不是要clone


就直接把你关心的信息拷贝出来可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP