免费注册 查看新帖 |

Chinaunix

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

关于netfilter中ip_packet_match函数的问题【已解决】 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-20 20:38 |只看该作者 |倒序浏览
本帖最后由 jiufei19 于 2010-06-22 22:41 编辑

我在继续阅读netfilter的源码时,发现对ip_packet_match这个验证匹配规则的函数中的如下宏无法理解,望大家解惑!

#define FWINV(bool,invflg) ((bool) ^ !!(ipinfo->invflags & invflg))

我的疑问是如下:
1、那个invflag(ipinfo->invflags)到底是什么意思?反转标记是对什么的反转,怎样反转?具体到下面这个使用该宏的例子:

FWINV((ip->saddr & ipinfo->smsk.s_addr) != ipinfo->src.s_addr, IPT_INV_SRCIP)

a、ip->saddr & ipinfo->smsk.s_addr,这个按位与的结果是什么意思? ipinfo->smsk.s_addr是规则中所存放的源掩码,那么2者与的意思是得到该分组源ip所在的网络号吗(在规则的源掩码条件下)?

b、ipinfo->src.s_addr表示规则中设置的源地址

c、比较a和b的值相等或不相等分别是啥子意思?

d、c中的"!="逻辑结果再和IPT_INV_SRCIP(0x08)按宏FWINV进行运算含义是什么呢?彻底晕了!


2、连续两个!!求反的意思是什么,闹不明白呢?比如ipinfo->invflags & invflg的结果为0011,那么连续两次!!的结果就是自身呀?(此问题已经由斑竹帮助解决了,仍留在这里)

论坛徽章:
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-06-20 21:12 |只看该作者
2、连续两个!!求反的意思是什么,闹不明白呢?比如ipinfo->invflags & invflg的结果为0011,那么连续两次!!的结果就是自身呀?

为什么两次就是自身了,你怎么算出来的。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
3 [报告]
发表于 2010-06-20 21:20 |只看该作者
回复 2# Godbach


    谢谢!不好意思,看昏头了,的确我搞错了哈,“!!”的结果要么是0(false),要么是非0(true),那么其他问题呢,还望斑竹解惑

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
4 [报告]
发表于 2010-06-21 01:37 |只看该作者
其实  这里有 独孤九贱的分析 好像提到这了吧

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
5 [报告]
发表于 2010-06-21 09:27 |只看该作者
本帖最后由 jiufei19 于 2010-06-21 09:52 编辑

回复 4# snriyt


    感谢指导,的确我在论坛上搜了九贱的一篇文章:http://linux.chinaunix.net/bbs/v ... p;extra=&page=2,其中描述了这个处理,但是可能我理解力稍差些,还是没有能理解九剑前辈的说明,因此希望大家能解惑!

PS:下面是几个相关问题

1、struct ipt_ip是标准规则的定义:

struct ipt_ip {
   39     /* Source and destination IP addr */
   40     struct in_addr src, dst;
   41     /* Mask for src and dest IP addr */
   42     struct in_addr smsk, dmsk;
   43     char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
   44     unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
   45
   46     /* Protocol, 0 = ANY */
   47     u_int16_t proto;
   48
   49     /* Flags word */
   50     u_int8_t flags;
   51     /* Inverse flags */
   52     u_int8_t invflags;
   53 };

我现在正在看packet_filter表,根据netfilter的定义,packet_filter表在LOCAL_IN,LOCAL_OUT,FORWARD这3个hook点处被执行,那么这个ipt_ip中的所谓源ip,目的ip(以及所谓的源、目的掩码)到底是指什么?例如如果目前正在处理一个LOCAL_IN的分组,那么源ip是收到分组的源ip地址,但是如果是正在处理一个LOCAL_OUT分组,那么源ip是指本地发出分组的源ip了

2、ipt_ip中的flags和invflags是什么意思?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
6 [报告]
发表于 2010-06-21 15:17 |只看该作者
本帖最后由 jiufei19 于 2010-06-21 15:19 编辑

回复 5# jiufei19


    自己又仔细思考了下关于源和目的ip的含义,发现自己原来可能理解错误了,下面我把重新思考的结果贴出来,望大家指正:

1、因为每一个ipt_entry都有一个ipt_ip,也就是说每个rule其实都有一个对应的ipt_ip,所以ipt_ip中的源ip和目的ip的概念就很清楚了,就是设置过滤规则时指定的源和目的
2、至于一个正在被检测的分组是一个out分组还是一个in分组或者一个forward分组,其实无所谓,反正这个分组携带有源ip和目的ip,于是netfilter就将此分组的源ip和目的ip去和规则中的源ip和目的ip进行匹配,如果不匹配就继续下一个规则继续检测。换句话讲,netfilter本身并不会根据到底一个分组是in还是out,然后去挑选某个规则进行检测,而是很简单地直接一一比对。

论坛徽章:
0
7 [报告]
发表于 2010-06-21 15:39 |只看该作者
反转标记可能是 iptables 命令中 ! 的状态
假如 iptables -A FORWARD -p ! icmp -j DROP
则表示只有 ICMP 协议才能通过
那么可能就是这里这个 ! 反转标记

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
8 [报告]
发表于 2010-06-21 15:56 |只看该作者
回复 6# jiufei19


    为了更清楚地描述我的问题,我现在给出一个场景,望大家指正:

1、因为hook总是在某个特定的点(chain)设置的,因此假定是在INPUT链上设置了一个规则1,其中指定了src_ip和dest_ip,那么这个src_ip和dest_ip就被记入到对应此规则的ipt_entry的ipt_ip结构体中。

2、同理,我们也在对应的OUTPUT链上设置一个规则2,其中也指定对应的src_ip和dest_ip。那么这个src_ip和dest_ip就被记入到对应此规则的ipt_entry的ipt_ip结构体中

3、现在我们有了上述2条规则,规则1和规则2

3、当有一个外出分组发出时,则netfilter统一将上述两条规则一一和此外出分组进行比对,而不是仅和规则2进行比较,是这样吗?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
9 [报告]
发表于 2010-06-21 15:57 |只看该作者
回复 7# platinum


    非常感谢白金前辈的指教,看来我还不是很熟悉iptables的各个命令,导致对一些数据成员的不理解

论坛徽章:
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-06-21 15:57 |只看该作者
一个外出的分组走那些hook点,你要首先搞清楚。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP