Hyperscan高性能的多正则表达式匹配库

联合创作 · 2023-09-30 13:44

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

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

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

特性:

多功能性

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

大规模匹配

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

 

 

 

 

Streaming mode

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

高性能和可扩展性

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

浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报