免费注册 查看新帖 |

Chinaunix

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

[内核模块] Trunk模式的数据包iph->version异常 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-13 09:51 |只看该作者 |倒序浏览
最近基于网桥 + NatFilter分析Trunk模式发来的数据包.  发现其中 iph->version为0, 正常应为iph->version:4

对于Trunk模式的数据, 在代码中是先移位4的, 请问各位有没有遇到同类问题:

论坛徽章:
0
2 [报告]
发表于 2015-03-13 09:52 |只看该作者
                     这是移位代码:
                          if(skb->protocol==htons(ETH_P_8021Q))
                {
                        iph=(struct iphdr *)((u8*)iph+4);                       
                }

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
3 [报告]
发表于 2015-03-13 11:36 |只看该作者
bridge在调inet_netfilter之前,应该已经把nh+4(指向iphdr)[@net/bridge/br_netfiler.c],所以在hook里面是不需要再次偏移的。

论坛徽章:
0
4 [报告]
发表于 2015-03-13 14:14 |只看该作者
在Trunk模式下, 实际收到的iph->version为0, 说明这个数据包还是有问题, 请问应如何解析来自Trunk模式下的数据包?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
5 [报告]
发表于 2015-03-13 15:08 |只看该作者
回复 4# tough_lion

建议先假设数据包是没有问题的(正常的带tag的ip报文),在你的抓包点里把从skb->head到skb->data+32这个区间的数据打印出来,
人为判断mac头在什么地方,vlan头在什么地方,ip头在什么地方,然后跟skb_network_header、skb->data比较,
这样就能知道在你的抓包点,skb的各个字段是否需要偏移了。


   

论坛徽章:
0
6 [报告]
发表于 2015-03-13 18:14 |只看该作者
可以去看我帖子里的源码

http://bbs.chinaunix.net/thread-4171778-1-1.html

论坛徽章:
0
7 [报告]
发表于 2015-03-13 20:53 |只看该作者
回复 6# jasonew


    你帖子里并没有源码, 方便再给我个链接吗?

论坛徽章:
0
8 [报告]
发表于 2015-03-13 20:54 |只看该作者
回复 5# nswcfd


   感谢, 我先试试, 另外Trunk模式下, 应该是公共标准, 即移动4位吧?

论坛徽章:
0
9 [报告]
发表于 2015-03-20 21:37 |只看该作者
本帖最后由 jasonew 于 2015-03-20 21:37 编辑

回复 7# tough_lion



二层数据包 如果带VLAN TAG的话,那就是数据头指针P + 18 得到IP头指针的位置 struct iphdr *iph = (struct iphdr*)(pData + 1;,然后可以根据协议,比如IPPROTO_TCP == iph->protocol,那么 struct tcphdr *tcph = (struct tcphdr*)(iph + 1),UDP 一样,换个结构体就好

如果是正常的二层数据包,那么数据头指针P + 14 得到IP头指针的位置struct iphdr *iph = (struct iphdr*)(pData + 14);,其他都一样
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP