u32过滤器匹配说明

时间:2014-03-16 17:03:47

标签: iptables

我一直在关注u32模式匹配教程:Link

在我到达获取IP标头长度的部分之前,大部分内容都是直截了当的,使用以下内容:

0>>22&0x3C

我不明白为什么选择这个而不是:

0>>24&0x0F

根据我的理解,所选择的滤波器将第一个字节22向右移动,然后应用一个掩码来剥离第一个和最后两个位,从而为IP头长度提供正确的低半字节。第二个将完成向右的完整移位,只需要剥离前4位。

我的问题是,为什么选择第一个而不是第二个?我相信这是因为需要发生的繁殖,但我不明白如果两个过滤器都返回正确的值,该操作会产生什么影响。

1 个答案:

答案 0 :(得分:1)

IP标头长度以32位字而不是8位字节指定,因此IPH字段中的任何值都需要乘以4,这可以通过左移2来实现;因此,不是向右移动24,用0x0F屏蔽并向右移动2,作者决定只向右移动22并屏蔽0x03c。

也就是说,两个操作都没有返回相同的值,第一个操作返回第二个操作的值乘以4.要得到与第一个相同的结果

0>>24&0x0F<<2