美文网首页
Hyperscan正则匹配引擎初探

Hyperscan正则匹配引擎初探

作者: 盈朔 | 来源:发表于2020-08-05 10:49 被阅读0次

问题1:Hyperscan中c API包括编译和扫描两部分。那么什么是编译,什么是扫描。

答:编译就是Hyperscan根据传入的正则表达式转换对应模式数据库。就是调用,hs_compile()或hs_compile_multi()或hs_compile_ext_multi()函数的部分。而扫描就是传入数据源和回调函数,数据库,和scratch进行匹配的过程。例如块模式下调用hs_scan函数。

问题2:Hyperscan运行模式分为两种,有什么区别?

答:Hyperscan模式分为两种:

一种是块模式,块模式就是调用hs_scan函数。用户每次调用时,将对一段完成的数据块进行匹配。匹配只限于该数据块内,而与上一次的hs_scan()调用无关。

一种是流模式,在真实网络场景下,数据被拆分成多个报文发送,在只接收到部分数据流的情况下使用块模式匹配会导致跨数据流的匹配点被遗漏,可能的方法只有等全部数据流接收完成后在统一进行匹配,此举会增加内存的开销及报文处理的复杂度。

问题3:什么是草稿空间。

答:扫描数据时,Hyperscan需要少量临时内存来存储即时内部数据。hs_alloc_scratch()函数可以为给定模式数据库分配一块足够的空间。

问题4:hyperscan简单实用流程

答: (1)hs_compile_multi  更加正则表达式编译数据库。

        (2)hs_alloc_scratch    创建即时数据区

         (3)hs_scan    执行对应的扫描任务。

问题5:我曾经遇到过一个难缠的问题

答:当一条流中包含规则1,规则2,规则3.当初测试hyperscan例子的时候会同时匹配上规则1,规则2,规则3.但是当用到项目中时发现匹配中了规则1,就停止了。发现错误码返回值为-3.后来发现是定义的回调函数必须加上return 0; 否则就只能匹配一条规则就终止了。并且返回值为-3.

参考文档:1,https://carecraft.github.io/basictheory/2017/08/hyperscan/

                  2,https://www.sdnlab.com/18770.html

相关文章

  • Hyperscan正则匹配引擎初探

    问题1:Hyperscan中c API包括编译和扫描两部分。那么什么是编译,什么是扫描。 答:编译就是Hypers...

  • 正则表达式的回溯机制

    正则表达式的引擎分析 正则表达式的引擎有两个特点:1.默认情况下都是贪婪匹配。2.引擎总是着急的,会返回最先匹配到...

  • 来自Intel的高性能的正则表达式匹配库——Hyperscan

    作者简介:王翔,英特尔软件工程师,负责Hyperscan研发。主要研究领域包括正则表达式匹配,深度报文检测等。感谢...

  • 正则表达式的匹配原理是什么

    正则表达式是如何实现查找匹配的? 1,正则表达式的使用2,正则表达式匹配搜索算法3,正则表达式引擎:DFA和NFA...

  • HyperScan 标志位分析

    Hyperscan是一款来自于Intel的高性能的正则表达式匹配库。它是基于X86平台以PCRE为原型而开发的,并...

  • 5、正则demo之获取

    将正则表达式封装成对象 让正则对象和要操作的字符串相关联 关联后获取正则匹配引擎 通过引擎对符合规则的字串进行操作...

  • 正则匹配

    正则 正则表达式引擎匹配 正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和P...

  • JS 正则表达式实例

    JS的正则引擎使用的是NFA引擎 匹配机制: 从位置0开始,按照表达式的单个子表达式规则来进行匹配 匹配在表达式和...

  • dpdk环境下开发C++

    最近呢要写一个hyperscan的多模匹配,自然是使用C++来写会更方便些啦,而老板要求hyperscan搭配dp...

  • 正则匹配库

    正则匹配用户名: 正则匹配用户名: 正则匹配手机号或者固定电话: 匹配中文: 正则匹配用户密码: 正则匹配电子邮箱...

网友评论

      本文标题:Hyperscan正则匹配引擎初探

      本文链接:https://www.haomeiwen.com/subject/puljrktx.html