Hyperscan 高性能的多正则表达式匹配库开源项目

我要开发同款
一代码宗师2023年05月27日
257阅读
开发技术C/C++
所属分类程序开发、正则表达式工具
授权协议BSD

作品详情

Hyperscan是一个高性能的多正则表达式匹配库。它遵循常用libpcre库的正则表达式语法,但它是一个具有自己的CAPI的独立库。

Hyperscan使用混合自动机技术允许同时匹配大量(多达数万个)正则表达式,并允许跨数据流匹配正则表达式。Hyperscan通常用于DPI库堆栈。

Hyperscan可在x86平台上运行,并提供对Perl兼容正则表达式(PCRE)语法的支持,同时支持正则表达式组的匹配和流操作。Hyperscan提供了一个灵活的C语言API和一些不同的操作模式,以确保其在实际网络场景中的适用性。此外,对高效算法的关注和对IntelStreamingSIMDExtensions(IntelSSE)的使用,使Hyperscan能够实现高匹配性能。它适用于深层数据包检测(DPI)、入侵检测系统(IDS)、入侵防御系统(IPS)和防火墙等使用场景,并已被部署在世界各地的网络安全解决方案中。Hyperscan还被集成到广泛使用的开源IDS和IPS产品中,如Snort*和Suricata*。

特性:多功能性

Hyperscan支持多个Intel处理器的交叉编译,针对不同的指令集进行了特定的优化。无操作系统限制,同时支持虚拟机和容器场景,涵盖大部分PCRE语法,支持包括“.*”、“[^>]*”等语法的复杂表达式。提供不同的操作模式(流式、块式和矢量化)以满足不同场景的需求。如果通过使用每个模式标志请求,Hyperscan可以在输入流中找到匹配数据的开始和结束位置。有关详细信息,参阅当前版本的 Hyperscan开发人员参考指南。

大规模匹配

根据复杂性,Hyperscan可以支持匹配大量规则。与大多数正则匹配引擎不同,Hyperscan支持多模式匹配。为每条规则指定一个唯一的ID后,Hyperscan能够将规则编译成数据库,并在匹配过程中输出当前所有匹配的规则ID。

 

   Streamingmode

Hyperscan支持三种操作模式:blockmode、streamingmode和vectoredmode。Blockmode是最直接的,它扫描单个连续的数据块,找到后将匹配结果返回给调用者。Streamingmode是为网络场景中的跨包匹配而设计的,其中要扫描的数据被分成多个包。在Streamingmode下,Hyperscan可以保存当前数据块的匹配状态,并在新数据块到达时将其作为初始匹配状态。如图所示,无论"xxxxabcxxxxxxxdefx"数据如何随时间分割成数据包,Streamingmode都能保证最终匹配结果的一致性。此外,Hyperscan可以压缩保存的匹配状态以减少应用程序的内存占用。Streamingmode操作提供了一种简单的方法来扫描一段时间内到达的数据,而不需要你缓冲和重新扫描数据包,或将扫描限制在一个固定的历史数据窗口。最后,还有一种vectoredmode,它提供对一组在内存中不连续的数据块的顺序扫描。

高性能和可扩展性

Hyperscan至少需要英特尔StreamingSIMDExtensions3指令集,并使用SIMD指令来加速匹配性能。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论