免费注册 查看新帖 |

Chinaunix

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

请教关于netfilter中UDP包的问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-22 21:22 |只看该作者 |倒序浏览
最近在做一项目,主要是在kernel中按照我们的设定的特征捕获一些UDP包,并且将其存储下来,当到一定数量之后,
对这些包的数据部分进行运算,再构建一个新的包,将运算的结果作为包的数据发送出去。
  这个项目基于一个运行了linux kernel的路由器,所以接收了包还要按照路由表将其转发出去。

我的做法:
  在NF_IP_PRE_ROUTING 处定义了钩子抓包,如果遇到符合设定规则的UDP包,我会将其UDP数据部分存储到
     我指定的地方,对于原来的包,我return NF_DROP;另外对于我还会存储这些UDP包中一个包的 IP包头、UDP包头,
在构建新的包时,需要用到这两包头信息;

我能做到是:
   我构建新包使用了nc_alloc_skb,此报文的ip包头、UDP包头、UDP数据我都能利用以前存储数据的复制进去。

现在问题主要有:
   1、我想把新建立的包在NF_IP_PRE_ROUTING点建立好之后,使其能按照一般的包正常的流程走下去(就像对包进行return NF_ACCEPT
后包继续走的流程一样),包括经过路由转发等,要实现这样有什么样的方法?
   2、如果是要使用dev_queue_xmit将新建立的包发送出去,是不是包就会直接被发送出去了而不会经过路由选择?此外还必须要填充新建立
的包的mac头,而mac头的目的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
2 [报告]
发表于 2010-05-23 13:11 |只看该作者
2、如果是要使用dev_queue_xmit将新建立的包发送出去,是不是包就会直接被发送出去了而不会经过路由选择?此外还必须要填充新建立的包的mac头,而mac头的目的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
3 [报告]
发表于 2010-05-23 13:15 |只看该作者
1、我想把新建立的包在NF_IP_PRE_ROUTING点建立好之后,使其能按照一般的包正常的流程走下去(就像对包进行return NF_ACCEPT
后包继续走的流程一样),包括经过路由转发等,要实现这样有什么样的方法?

你要做的功能应该是当某个UDP包来了之后,会触发你的判断条件,要去构造一个新的UDP包,然后发送出去,是吗?

如果是这样的话,可以考虑直接修改这个UDP包,然后让hook返回NF_ACCEPT,这样后面就会按照重新构造的数据包去查找路由,并实现转发了。

论坛徽章:
0
4 [报告]
发表于 2010-05-23 13:36 |只看该作者
回复 3# Godbach


    我要做的应该是 当来一个包判断是否符合设定的特征,如果符合就存储下来,同时return NF_DROP;
   这样当存储下来的包达到一定数量时,我将对这些包进行组织,使其成为一个新的UDP包,再让其发送出去;
   我想这个新的包还是能按照流程继续走下去。

论坛徽章:
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
5 [报告]
发表于 2010-05-23 13:37 |只看该作者
我想这个新的包还是能按照流程继续走下去。

我的看法就是可以利用最后那个UDP包,在它的基础上直接修改

论坛徽章:
0
6 [报告]
发表于 2010-05-23 19:49 |只看该作者
我的看法就是可以利用最后那个UDP包,在它的基础上直接修改
Godbach 发表于 2010-05-23 13:37


   如果我把钩子函数NF_IP_FORWARD放在这里,是不是可以?  这个钩子点是已经经过路由选择之后的。

另外还有一个问题,就是构造IP,UDP包头时,有哪些字段是需要重新赋值的呢?

论坛徽章:
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
7 [报告]
发表于 2010-05-24 08:08 |只看该作者
如果我把钩子函数NF_IP_FORWARD放在这里,是不是可以?  这个钩子点是已经经过路由选择之后的。

如果你不修改数据包的源和目的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
8 [报告]
发表于 2010-05-24 08:10 |只看该作者
另外还有一个问题,就是构造IP,UDP包头时,有哪些字段是需要重新赋值的呢?

对于UDP,如果你修改了数据部分,是需要从新计算校验和字段的。另外,也要考虑IP校验和的问题。

论坛徽章:
0
9 [报告]
发表于 2010-05-24 10:31 |只看该作者
我想楼主是要收集到一定量统计对比阀值后触发某种条件再构造数据包发送吧?
一个小技巧是,最后一个触发条件那个udp包,不用DROP,而是修改后ACCEPT即能满足楼主要求吧?

论坛徽章:
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
10 [报告]
发表于 2010-05-24 11:14 |只看该作者
我想楼主是要收集到一定量统计对比阀值后触发某种条件再构造数据包发送吧?
一个小技巧是,最后一个触发条件那个udp包,不用DROP,而是修改后ACCEPT即能满足楼主要求吧?

呵呵,看来我和九贱兄的想法是一致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP