華為云計(jì)算 云知識(shí) Windows下python組件hyperscan的編譯與安裝
Windows下python組件hyperscan的編譯與安裝

【摘要】 hyperscan是英特爾推出的一款高性能正則表達(dá)式引擎,一次接口調(diào)用可以實(shí)現(xiàn)多條規(guī)則與多個(gè)對(duì)象之間的匹配,本文介紹如何在windows下成功的編譯和安裝該python組件

什么是Hyperscan:
hyperscan 是英特爾推出的一款高性能正則表達(dá)式引擎,一次接口調(diào)用可以實(shí)現(xiàn)多條規(guī)則與多個(gè)對(duì)象之間的匹配,可以支持多種匹配模式,塊模式和流模式,它是以PCRE為原型開(kāi)發(fā),并以BSD 許可證 開(kāi)源。

使用時(shí)分2步來(lái)實(shí)現(xiàn):

  • 第1步:對(duì)規(guī)則集進(jìn)行預(yù)編譯,編譯時(shí)可以指定規(guī)則集類(lèi)型的參數(shù):正則表達(dá)式或文本模式

  • 第2步:利用編譯好的規(guī)則集進(jìn)行匹配,匹配時(shí)可以指定為塊模式或流模式

    另外需要注意的是x86版本和arm版本的源代碼是有區(qū)別的,官網(wǎng)下載x86版本(https://github.com/intel/hyperscan)無(wú)法在arm平臺(tái)中編譯通過(guò),arm版本下載地址(https://github.com/tqltech/hyperscan/releases)。

下面以在windows X86平臺(tái)為例來(lái)講解hyperscan python組件的編譯安裝方法:

1、 下載和解壓hyperscan-5.4.0

2、 在powershell下創(chuàng)建build目錄,執(zhí)行cd build

3、 輸入cmake -G命令,查看-G支持的類(lèi)型列表
image.png

4、 輸入cmake -G “Visual Studio 15 2017 Win64” -DBUILD_SHARED_LIBS=on …/命令
image.png

  • 提示命令執(zhí)行失敗,需要指定BOOST_ROOT參數(shù)

5、 下載boost源代碼,解壓到hyperscan目錄中
image.png

6、 輸入cmake -G “Visual Studio 15 2017 Win64” -D BOOST_ROOT=%cd%/…/boost_1_78_0/ -DBUILD_SHARED_LIBS=on …/命令
image.png

  • 提示缺少PCRE和sqlite3

7、 下載PCRE、sqlite源代碼并解壓到hyperscan目錄中
image.png

8、 輸入cmake -G “Visual Studio 15 2017 Win64” -D BOOST_ROOT=%cd%/…/boost_1_78_0/ -DBUILD_SHARED_LIBS=on -D PCRE_SOURCE=%cd%/…/pcre-8.45/ …/命令,命令執(zhí)行成功,build目錄下生成一系列的vs2017工程文件
image.png

9、 輸入cmake –build .命令執(zhí)行編譯,編譯成功后分別在bin、lib目錄下生成一系列文件
image.png

  • bin目錄列表

image.png

  • lib目錄列表

10、 下載hyperscan python源代碼(https://pypi.org/project/hyperscan/),原來(lái)的setup.py無(wú)法在windows下安裝成功,需要修改setup.py文件內(nèi)容如下:

# -*- coding: utf-8 -*-
from distutils.core import *

module1 = Extension("hyperscan.hyperscan", 
                   include_dirs = ['src/hyperscan'],
                   libraries = ['hs', 'hs_runtime'],
                    library_dirs  = [r'../hyperscan-5.4.0/build/lib'],
                extra_compile_args = ['/Zi', '/Od'],
                   extra_link_args = ['/DEBUG'],
                   sources = ["src/hyperscan/hyperscanmodule.c"])

setup(
    name="hyperscan", #打包文件名稱(chēng) 庫(kù)說(shuō)明文件的文件名
    version="0.2.0", 
    package_dir = {'': 'src'},
    packages = ['hyperscan'],
    package_data = {'': ['*']},
    ext_modules=[module1]
)

11、 輸入python setup.py install命令進(jìn)行python組件安裝,提示安裝失敗,找不到hs_compile_lit_multi,

12、 在hs.def中增加導(dǎo)出函數(shù)hs_compile_lit_multi,重新編譯hyperscan工程后再執(zhí)行python組件安裝腳本,安裝成功

13、 成功執(zhí)行python測(cè)試腳本表示安裝成功,腳本如下:

import hyperscan
db = hyperscan.Database()
print(db)

image.png

  • 執(zhí)行成功

可以試試下面的漏掃服務(wù),看看系統(tǒng)是否存在安全風(fēng)險(xiǎn):>>> 漏洞掃描服務(wù)