Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2243701
  • 博文数量: 230
  • 博客积分: 9346
  • 博客等级: 中将
  • 技术积分: 3418
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-26 01:58
文章分类

全部博文(230)

文章存档

2015年(30)

2014年(7)

2013年(12)

2012年(2)

2011年(3)

2010年(42)

2009年(9)

2008年(15)

2007年(74)

2006年(36)

分类: LINUX

2008-01-14 00:04:01

目前 Linux 有两种内容匹配模块,ipp2p 和 l7-filter,两者功能类似,具体工作原理却大不相同

ipp2p:
ipp2p 的匹配方式是 per packet match 的原则,会匹配 iptables 规则引导过来的每一个数据包。
ipp2p 的匹配精度很高,每一种应用的匹配都是用具体代码来实现的。

l7-filter:
l7-filter 的匹配原则是只匹配每一个 connection 的前 10 个包或者前 2048 个字节(可以通过 procfs 修改)。
匹配精度比较低,匹配方式使用的是正则表达式的形式,基于内核级的正则匹配库是 l7-filter 的创始人 Matthew Strait 通过一个开源的 regexec 库修改而来的,但比较遗憾的是,有些具体特征用正则表达式是无法写出来的
比如 QQLive 的规则:
  0xfe 0x02 0x05 0x05 0x02
  0xfe 0x06 0x00 0x00 0x06
  0xfe 0x00 0x80 0x80 0x00
可以看出这样一个规律:
  data[0] = 0xfe
  data[1] = data[4]
  data[2] = data[3]
由于这种规律无法用正则表达出来(其中还包括 l7-filter 不能识别的 0x00),因此 l7-filter 做不到对这种东西的匹配,但 l7-filter 却有一个优势,就是只匹配每个 connection 的前一段数据,匹配到了就不再匹配,这样就不用对每个数据包都过一遍了。

下面对 ipp2p 和 l7-filter 做一下匹配精度、匹配速度、协议添加等方面的具体对比

    名称                ipp2p                 l7-filter

  匹配精度               非常高                   很低

  匹配速度         处理每个包的速度很快       处理每个包都非常慢
                  即使这个连接匹配到了       一旦匹配到就不再匹配
                  下一个也要继续匹配         这个连接的其他包

添加协议方便度     每次修改都需要重编模块      只需修改正则表达式即可

  流量控制           不适用于流量控制        由于结合了 conntrack 的
                                          特性所以非常适于流控

当然了,由于源代码都给我们了,所以完全可以根据 ipp2p 和 l7-filter 的特性,结合两者的优点开发出一个新的模块匹配精度高、效率高、添加协议方便、适合做流控的 platinum 模块来 ^_^
阅读(7108) | 评论(3) | 转发(3) |
给主人留下些什么吧!~~

zhangsuozhu2009-05-21 22:04:40

0x02 0x5为本包的包长-3(主机序)

zhangsuozhu2009-05-21 22:03:49

0xfe 0x02 0x05 0x05 0x02 0xfe为标志位 0x02 0x5为本包的包长-3位(主机序) 0x05 0x02 网络序的。同上

digex2008-01-18 17:33:25

好东西,鼓励