diff options
| author | zhengchao <[email protected]> | 2021-10-12 11:52:45 +0300 |
|---|---|---|
| committer | zhengchao <[email protected]> | 2021-10-12 11:52:45 +0300 |
| commit | 342c3c36b30a674d32f2cbd9574d5b6accc15483 (patch) | |
| tree | f1a8a8a2709909124aae46cb7f9aa318fc508946 | |
| parent | 51b26e3a546e35c44cec622fed4633cf2107666d (diff) | |
将rulescan.h的编码由GBK转为utf8v3.4.11
| -rw-r--r-- | src/inc_internal/view_only/rulescan.h | 366 |
1 files changed, 183 insertions, 183 deletions
diff --git a/src/inc_internal/view_only/rulescan.h b/src/inc_internal/view_only/rulescan.h index 4397f18..f377cc4 100644 --- a/src/inc_internal/view_only/rulescan.h +++ b/src/inc_internal/view_only/rulescan.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (c) 2014 * String Algorithms Research Group @@ -23,294 +23,294 @@ extern "C" { #endif - /* rulescan_set_param���������õIJ������� */ + /* rulescan_set_param函数可设置的参数类型 */ enum RULESCAN_PARA_NAME { - RULESCAN_DETAIL_RESULT=1, /* ����־λ��ʾ��������ϸ����λ�õ���Ϣ, optval��ΪNULL��optlen��Ϊ0��Ĭ�ϲ�������ϸ��Ϣ*/ - RULESCAN_REGEX_GROUP =2, /* ����־λ��ʾ�������������ʽƥ��ķ�����Ϣ���������ֶΣ���Ҫ������RULESCAN_DETAIL_RESULT��־λ,optval��ΪNULL��optlen��Ϊ0��Ĭ�ϲ����ط�����Ϣ */ - RULEACAN_ERRLOG_CLOSE, /* ����־λ��ʾ���ر�Rulescan������־�����optval��ΪNULL��optlen��Ϊ0�������õĻ�Ĭ�ϴ�Rulescan������־��� */ - RULESCAN_ERRLOG_FILE_PATH, /* ����Rulescan������־��·�����������ļ����������û����룬optval��ֵΪ�����ļ�������־·����optlenΪ·�����ȡ����û���趨�� - ����־Ĭ�ϴ洢�ڿ�ִ�г���ǰĿ¼�µ�rulescan_tmp�� */ + RULESCAN_DETAIL_RESULT=1, /* 本标志位表示:返回详细命中位置等信息, optval设为NULL,optlen设为0。默认不返回详细信息*/ + RULESCAN_REGEX_GROUP =2, /* 本标志位表示:返回正则表达式匹配的分组信息;开启本字段,需要先设置RULESCAN_DETAIL_RESULT标志位,optval设为NULL,optlen设为0。默认不返回分组信息 */ + RULEACAN_ERRLOG_CLOSE, /* 本标志位表示:关闭Rulescan错误日志输出,optval设为NULL,optlen设为0。不设置的话默认打开Rulescan错误日志输出 */ + RULESCAN_ERRLOG_FILE_PATH, /* 设置Rulescan错误日志的路径名(包含文件名),由用户传入,optval的值为包含文件名的日志路径,optlen为路径长度。如果没有设定, + 则日志默认存储在可执行程序当前目录下的rulescan_tmp中 */ }; - #define MAX_REGEX_GROUP_NUM 5 /* �����������ʽ����֧�ֵ�������ĸ��� */ + #define MAX_REGEX_GROUP_NUM 5 /* 对于正则表达式,所支持的最大分组的个数 */ - #define MAX_EXPR_ITEM_NUM (1U<<3) /* ÿ�������ʽ�����MAX_EXPR_ITEM_NUM��������� */ - #define MAX_MATCH_POS_NUM 1024 /* ÿ����������������ص�����λ�õĸ��� */ - #define MATCH_POS_NUM_INC 64 /* ÿ�������������ص�����λ�õĸ�����ʼֵ������ֵ */ + #define MAX_EXPR_ITEM_NUM (1U<<3) /* 每条与表达式最多由MAX_EXPR_ITEM_NUM个规则组成 */ + #define MAX_MATCH_POS_NUM 1024 /* 每条规则最多允许返回的命中位置的个数 */ + #define MATCH_POS_NUM_INC 64 /* 每条规则允许返回的命中位置的个数初始值与增量值 */ - /* ���岻ͬ�Ĺ������� */ - const unsigned int RULETYPE_STR = 0; /* �ַ���������ƹ��� */ - const unsigned int RULETYPE_REG = 1; /* �������ʽ���� */ - const unsigned int RULETYPE_INT = 2; /* ��ֵ������� */ - const unsigned int RULETYPE_IPv4 = 3; /* IPv4���� */ - const unsigned int RULETYPE_IPv6 = 4; /* IPv6���� */ + /* 定义不同的规则类型 */ + const unsigned int RULETYPE_STR = 0; /* 字符串或二进制规则 */ + const unsigned int RULETYPE_REG = 1; /* 正则表达式规则 */ + const unsigned int RULETYPE_INT = 2; /* 数值区间规则 */ + const unsigned int RULETYPE_IPv4 = 3; /* IPv4规则 */ + const unsigned int RULETYPE_IPv6 = 4; /* IPv6规则 */ - const unsigned int MAX_RULETYPE = 5; /* ������������ */ - const unsigned int MAX_SUB_RULETYPE = 4096; /* �������������� */ + const unsigned int MAX_RULETYPE = 5; /* 规则类型数量 */ + const unsigned int MAX_SUB_RULETYPE = 4096; /* 规则子类型数量 */ - /* �ַ��������ɱ�ʾ�ı��ַ������������ַ������������ʽ�� */ + /* 字符串类型规则(可表示文本字符串、二进制字符串、正则表达式) */ typedef struct _string_rule_t { - char * str; /* �ַ������ݣ�������������ʽ������'\0'�������ɲ�ָ������ */ - unsigned int len; /* �ַ������� */ - unsigned char case_sensitive; /* �Ƿ��Сд����ƥ�䣨1�����У�0�������У� */ - unsigned char match_mode; /* ƥ��ģʽ���Ӵ�ƥ�䣨0��������ƥ�䣨1�������Ծ�ȷ��ƥ����Ч */ - int l_offset; /* ��ʾģʽ��ֻ�����ı���Χ[l_offset, r_offset]�г��֣�-1��ʾ������,-2��ʾ��ƥ�䣻���Ծ�ȷ��ƥ����Ч */ - int r_offset; /* ��ʾģʽ��ֻ�����ı���Χ[l_offset, r_offset]�г��֣�-1��ʾ������,-2��ʾ��ƥ�䣻���Ծ�ȷ��ƥ����Ч */ + char * str; /* 字符串内容;如果是正则表达式,须以'\0'结束,可不指定长度 */ + unsigned int len; /* 字符串长度 */ + unsigned char case_sensitive; /* 是否大小写敏感匹配(1:敏感;0:不敏感) */ + unsigned char match_mode; /* 匹配模式:子串匹配(0),完整匹配(1);仅对精确串匹配有效 */ + int l_offset; /* 表示模式串只能在文本范围[l_offset, r_offset]中出现,-1表示无限制,-2表示左匹配;仅对精确串匹配有效 */ + int r_offset; /* 表示模式串只能在文本范围[l_offset, r_offset]中出现,-1表示无限制,-2表示右匹配;仅对精确串匹配有效 */ }string_rule_t; - /* ������ֵ�������ʾ��������[lb, ub] */ + /* 整数数值区间规则,表示整数区间[lb, ub] */ typedef struct _interval_rule_t { - unsigned int lb; /* ����������½磨����lb����������Ĭ��Ϊ0 */ - unsigned int ub; /* ����������½磨����ub����������Ĭ��Ϊ0 */ + unsigned int lb; /* 数据区间的下界(包含lb),无限制默认为0 */ + unsigned int ub; /* 数据区间的下界(包含ub),无限制默认为0 */ }interval_rule_t; - /* IPv4���� */ + /* IPv4规则 */ typedef struct _ipv4_rule_t { - unsigned int min_saddr; /* Դ��ַ�½磻0��ʾ���Ա��ֶ� */ - unsigned int max_saddr; /* Դ��ַ�Ͻ磻0��ʾ�̶�IP=min_saddr */ - unsigned int min_daddr; /* Ŀ�ĵ�ַ�½磻0��ʾ���Ա��ֶ� */ - unsigned int max_daddr; /* Ŀ�ĵ�ַ�Ͻ磻0��ʾ�̶�IP=min_daddr */ - unsigned short min_sport; /* Դ�˿ڷ�Χ�½磻0��ʾ���Ա��ֶ� */ - unsigned short max_sport; /* Դ�˿ڷ�Χ�Ͻ磻0��ʾ�̶��˿�=min_sport */ - unsigned short min_dport; /* Ŀ�Ķ˿ڷ�Χ�½磻0��ʾ���Ա��ֶ� */ - unsigned short max_dport; /* Ŀ�Ķ˿ڷ�Χ�Ͻ磻0��ʾ�̶��˿�=min_dport */ - unsigned short proto; /* �����Э�飬6��ʾTCP��17��ʾUDP��0��ʾ���Ա��ֶ� */ - unsigned short direction; /* ����0��ʾ˫��1��ʾ���� */ + unsigned int min_saddr; /* 源地址下界;0表示忽略本字段 */ + unsigned int max_saddr; /* 源地址上界;0表示固定IP=min_saddr */ + unsigned int min_daddr; /* 目的地址下界;0表示忽略本字段 */ + unsigned int max_daddr; /* 目的地址上界;0表示固定IP=min_daddr */ + unsigned short min_sport; /* 源端口范围下界;0表示忽略本字段 */ + unsigned short max_sport; /* 源端口范围上界;0表示固定端口=min_sport */ + unsigned short min_dport; /* 目的端口范围下界;0表示忽略本字段 */ + unsigned short max_dport; /* 目的端口范围上界;0表示固定端口=min_dport */ + unsigned short proto; /* 传输层协议,6表示TCP,17表示UDP;0表示忽略本字段 */ + unsigned short direction; /* 方向,0表示双向,1表示单向 */ }ipv4_rule_t; - /* IPv6���� */ + /* IPv6规则 */ typedef struct _ipv6_rule_t { - unsigned int min_saddr[4]; /* Դ��ַ�½磻ȫ0��ʾ���Ա��ֶ� */ - unsigned int max_saddr[4]; /* Դ��ַ�Ͻ磻ȫ0��ʾ�̶�IP=min_saddr */ - unsigned int min_daddr[4]; /* Ŀ�ĵ�ַ�½磻ȫ0��ʾ���Ա��ֶ� */ - unsigned int max_daddr[4]; /* Ŀ�ĵ�ַ�Ͻ磻ȫ0��ʾ�̶�IP=min_daddr */ - unsigned short min_sport; /* Դ�˿ڷ�Χ�½磻0��ʾ���Ա��ֶ� */ - unsigned short max_sport; /* Դ�˿ڷ�Χ�Ͻ磻0��ʾ�̶��˿�=min_sport */ - unsigned short min_dport; /* Ŀ�Ķ˿ڷ�Χ�½磻0��ʾ���Ա��ֶ� */ - unsigned short max_dport; /* Ŀ�Ķ˿ڷ�Χ�Ͻ磻0��ʾ�̶��˿�=min_dport */ - unsigned short proto; /* �����Э�飬6��ʾTCP��17��ʾUDP��������Ĭ��Ϊ0 */ - unsigned short direction; /* ����0��ʾ˫��1��ʾ���� */ + unsigned int min_saddr[4]; /* 源地址下界;全0表示忽略本字段 */ + unsigned int max_saddr[4]; /* 源地址上界;全0表示固定IP=min_saddr */ + unsigned int min_daddr[4]; /* 目的地址下界;全0表示忽略本字段 */ + unsigned int max_daddr[4]; /* 目的地址上界;全0表示固定IP=min_daddr */ + unsigned short min_sport; /* 源端口范围下界;0表示忽略本字段 */ + unsigned short max_sport; /* 源端口范围上界;0表示固定端口=min_sport */ + unsigned short min_dport; /* 目的端口范围下界;0表示忽略本字段 */ + unsigned short max_dport; /* 目的端口范围上界;0表示固定端口=min_dport */ + unsigned short proto; /* 传输层协议,6表示TCP,17表示UDP,无限制默认为0 */ + unsigned short direction; /* 方向,0表示双向,1表示单向 */ }ipv6_rule_t; - /* ͨ�õĹ������� */ + /* 通用的规则类型 */ typedef struct _scan_rule_t { - unsigned int rule_type; /* �������ͣ�����Ϊ����ö�ٹ�������֮һ */ - unsigned int sub_type; /* �������ͣ��û��Զ��壬��������������������MAX_SUB_RULETYPE����ǰ�Ķ��壩 */ - union /* ����rule_type�����������ַ�������ֵ���䡢����IP���� */ + unsigned int rule_type; /* 规则类型,必须为上述枚举规则类型之一 */ + unsigned int sub_type; /* 子类类型,用户自定义,但子类型个数不允许超过MAX_SUB_RULETYPE(见前文定义) */ + union /* 根据rule_type决定规则是字符串、数值区间、还是IP规则 */ { - string_rule_t string_rule; /* �ַ��������ַ����������ơ��������ʽ�� */ - interval_rule_t interval_rule; /* ������ֵ������� */ - ipv4_rule_t ipv4_rule; /* �������IPv4���� */ - ipv6_rule_t ipv6_rule; /* �������IPv6���� */ + string_rule_t string_rule; /* 字符串规则(字符串、二进制、正则表达式) */ + interval_rule_t interval_rule; /* 整数数值区间规则 */ + ipv4_rule_t ipv4_rule; /* 带掩码的IPv4规则 */ + ipv6_rule_t ipv6_rule; /* 带掩码的IPv6规则 */ }; }scan_rule_t; - /* һ�������ʽ���� */ + /* 一条与表达式规则 */ typedef struct _boolean_expr_t { - unsigned int expr_id; /* �����ʽ��ID */ - unsigned int operation; /* �������ʽִ�еIJ�����0��ʾ���ӣ�1��ʾɾ�� */ - unsigned int rnum; /* �������ʽ�������ٸ�����operation=1����rnum=0���� */ - scan_rule_t * rules; /* ��������ʽ������operation=1����rules=NULL���� */ - void * tag; /* �û��Զ������ݣ�����ʱ��ƥ�������� */ + unsigned int expr_id; /* 与表达式的ID */ + unsigned int operation; /* 对与表达式执行的操作:0表示增加,1表示删除 */ + unsigned int rnum; /* 该与表达式包含多少个项;如果operation=1,置rnum=0即可 */ + scan_rule_t * rules; /* 组成与表达式的项;如果operation=1,置rules=NULL即可 */ + void * tag; /* 用户自定义数据,命中时随匹配结果返回 */ }boolean_expr_t; - /* ��ɨ����ı��������� */ + /* 待扫描的文本数据类型 */ typedef struct _text_data_t { - const char * text; /* �ı��������� */ - unsigned int tlen; /* �ı����ݳ��� */ - int toffset;/* �����ı������������������е�ƫ��������ʽɨ���������Ч�����û����룬���������Ϊ0(���������Ϊ0) */ + const char * text; /* 文本数据内容 */ + unsigned int tlen; /* 文本数据长度 */ + int toffset;/* 本段文本数据在整个流数据中的偏移量,流式扫描情况下有效,由用户传入,其它情况置为0(这个必须置为0) */ }text_data_t; - /* ��ɨ���IPv4Ԫ�� */ + /* 待扫描的IPv4元组 */ typedef struct _ipv4_data_t { - unsigned int saddr; /* ԴIP��ַ */ - unsigned int daddr; /* Ŀ��IP��ַ */ - unsigned short int sport; /* Դ�˿� */ - unsigned short int dport; /* Ŀ�Ķ˿� */ - unsigned short int proto; /* �����Э�飬6��ʾTCP��17��ʾUDP */ + unsigned int saddr; /* 源IP地址 */ + unsigned int daddr; /* 目的IP地址 */ + unsigned short int sport; /* 源端口 */ + unsigned short int dport; /* 目的端口 */ + unsigned short int proto; /* 传输层协议,6表示TCP,17表示UDP */ }ipv4_data_t; - /* ��ɨ���IPv6Ԫ�� */ + /* 待扫描的IPv6元组 */ typedef struct _ipv6_data_t { - unsigned int saddr[4]; /* ԴIP��ַ */ - unsigned int daddr[4]; /* Ŀ��IP��ַ */ - unsigned short int sport; /* Դ�˿� */ - unsigned short int dport; /* Ŀ�Ķ˿� */ - unsigned short int proto; /* �����Э�飬6��ʾTCP��17��ʾUDP */ + unsigned int saddr[4]; /* 源IP地址 */ + unsigned int daddr[4]; /* 目的IP地址 */ + unsigned short int sport; /* 源端口 */ + unsigned short int dport; /* 目的端口 */ + unsigned short int proto; /* 传输层协议,6表示TCP,17表示UDP */ }ipv6_data_t; - /* ͨ�õĴ�ɨ���������� */ + /* 通用的待扫描数据类型 */ typedef struct _scan_data_t { - unsigned int rule_type; /* �������ͣ�����Ϊ����ö�ٹ�������֮һ */ - unsigned int sub_type; /* �������ͣ��û��Զ��壬��������������������MAX_SUB_RULETYPE����ǰ�Ķ��壩 */ - union /* ����rule_type�������ݸ������ַ�������ֵ������IPԪ�� */ + unsigned int rule_type; /* 规则类型,必须为上述枚举规则类型之一 */ + unsigned int sub_type; /* 子类类型,用户自定义,但子类型个数不允许超过MAX_SUB_RULETYPE(见前文定义) */ + union /* 根据rule_type决定数据负载是字符串、数值、还是IP元组 */ { - text_data_t text_data; /* ��ɨ���ı����ݣ���ƥ���ַ����������ơ��������ʽ�� */ - unsigned int int_data; /* ������ֵ����ƥ����ֵ���䣩 */ - ipv4_data_t ipv4_data; /* ��ɨ���IPv4Ԫ�� */ - ipv6_data_t ipv6_data; /* ��ɨ���IPv6Ԫ�� */ + text_data_t text_data; /* 待扫描文本数据(可匹配字符串、二进制、正则表达式) */ + unsigned int int_data; /* 整数数值(可匹配数值区间) */ + ipv4_data_t ipv4_data; /* 待扫描的IPv4元组 */ + ipv6_data_t ipv6_data; /* 待扫描的IPv6元组 */ }; }scan_data_t; /* - ɨ��������scan_result_t��rule_result_t˵���� - 1���������е�ÿ����������ʽ��һ������ʽ��Ӧһ��scan_result_t������ò�������ʽ����rnum������ÿ���������Ӧ��һ�����scan_result_t::result[k]��0<=k<rnum���� + 扫描结果类型scan_result_t和rule_result_t说明: + 1、对于命中的每个布尔表达式,一条表达式对应一条scan_result_t结果,该布尔表达式包含rnum个规则,每个规则均对应于一个结果scan_result_t::result[k](0<=k<rnum)。 - 2�����ھ�ȷ�ַ������������position��length�������£� - ���еľ�ȷ�ַ�������result_num��ƥ��������i��0<=i<result_num����ƥ��������ʼλ�úͳ��ȷֱ��ǣ� + 2、对于精确字符串,结果数组position和length释义如下: + 命中的精确字符串包含result_num个匹配结果,第i(0<=i<result_num)个匹配结果的起始位置和长度分别是: (position[i], length[i]) - 3�������������ʽ���������position��length�������£� - ���е��������ʽ����result_num��ƥ������ÿ��ƥ��������group_num+1������Ԫ�ء����ڵ�i��0<=i<result_num����ƥ������ - ��a�������������ʽƥ�����ʼλ�úͳ��ȷֱ��ǣ� + 3、对于正则表达式,结果数组position和length释义如下: + 命中的正则表达式包含result_num个匹配结果,每个匹配结果包含group_num+1个数组元素。对于第i(0<=i<result_num)个匹配结果: + (a)整条正则表达式匹配的起始位置和长度分别是: (position[(group_num+1)*i], length[(group_num+1)*i]) - ��b����j��0<=j<group_num�����������ʼλ�úͳ��ȷֱ��ǣ� + (b)第j(0<=j<group_num)个分组的起始位置和长度分别是: (position[(group_num+1)*i+j+1], length[(group_num+1)*i+j+1]) */ - /* �����ɨ�������� */ + /* 规则的扫描结果类型 */ typedef struct _rule_result_t { - unsigned int rule_type; /* ��������ͣ�����Ϊ����ö�ٹ�������֮һ */ - unsigned int group_num; /* �����������ʽ�������ֶα�ʾ������飨capturing group���ĸ�������������Ϊ0 */ - unsigned int result_num; /* �ù����������н���ĸ��� */ - unsigned int position[MAX_MATCH_POS_NUM]; /* �ù����������н������ʼλ�� */ - unsigned int length[MAX_MATCH_POS_NUM]; /* �ù����������н���ij��ȣ���������н��������ǰ�����ݰ������еģ������ö�Ӧ��length=0, ��������������IP�࣬������Ϊ0*/ + unsigned int rule_type; /* 规则的类型,必须为上述枚举规则类型之一 */ + unsigned int group_num; /* 对于正则表达式类型规则,本字段表示捕获分组(capturing group)的个数;否则设置为0 */ + unsigned int result_num; /* 该规则所有命中结果的个数 */ + unsigned int position[MAX_MATCH_POS_NUM]; /* 该规则所有命中结果的起始位置 */ + unsigned int length[MAX_MATCH_POS_NUM]; /* 该规则所有命中结果的长度;如果该命中结果是在以前的数据包中命中的,则设置对应的length=0, 对于整数区间与IP类,长度置为0*/ }rule_result_t; - /* ��������ʽ��ɨ�������� */ + /* 布尔表达式的扫描结果类型 */ typedef struct _scan_result_t { - unsigned int expr_id; /* �����ʽ��ID */ - unsigned int rnum; /* �������ʽ�������ٸ����� */ - rule_result_t result[MAX_EXPR_ITEM_NUM]; /* ��������ʽ��ÿ�������Ӧ��ɨ���� */ - void * tag; /* �û��Զ������ݣ�����ʱ��ƥ�������� */ + unsigned int expr_id; /* 与表达式的ID */ + unsigned int rnum; /* 该与表达式包含多少个规则 */ + rule_result_t result[MAX_EXPR_ITEM_NUM]; /* 布尔表达式中每个规则对应的扫描结果 */ + void * tag; /* 用户自定义数据,命中时随匹配结果返回 */ }scan_result_t; /* - ���ܣ�ɨ������ʼ��������ɨ�������� - ������ - max_thread_num [in]: ɨ�����ɲ���ִ�е��߳����� - ����ֵ�� - ɨ�������������ֵΪNULLʱ����ʾ��ʼ��ʧ�ܡ� + 功能:扫描器初始化,生成扫描器对象。 + 参数: + max_thread_num [in]: 扫描器可并行执行的线程数。 + 返回值: + 扫描器句柄;返回值为NULL时,表示初始化失败。 */ void * rulescan_initialize(unsigned int max_thread_num); /* - ���ܣ� - ����ɨ���������������rulescan_update֮ǰ�ɶ�ε��ã�ÿ������һ��ɨ�����͡�Rulescan��Ĭ�ϲ���������λ�õ���ϸ��Ϣ - ������ - instance[in]: ɨ��������ָ�룻 - optname [in]: �������ͣ� - optval [in]: optval��optlen��ʾ�����ľ������ݣ� - optlen [in]: optval��optlen��ʾ�����ľ������ݡ� - ����ֵ�� - 1����ȷ���ã�-1������ʧ�ܡ� + 功能: + 设置扫描参数,本函数在rulescan_update之前可多次调用,每次设置一种扫描类型。Rulescan中默认不返回命中位置等详细信息 + 参数: + instance[in]: 扫描器对象指针; + optname [in]: 参数类型; + optval [in]: optval和optlen表示参数的具体内容; + optlen [in]: optval和optlen表示参数的具体内容。 + 返回值: + 1:正确设置,-1:设置失败。 */ int rulescan_set_param(void * instance, enum RULESCAN_PARA_NAME optname, const void * optval, unsigned int optlen); /* - ���ܣ���̬ע��һ�������ʽ������ɨ����������ͬһ��instance�����������ͬʱ�ж�������̡߳� - ������ - instance[in]: ɨ��������ָ�룻 - expr_array[in]: һ�������ʽ�� - epxr_num[in]: �����ʽ�ĸ����� - failed_ids[out]: �Ƿ������id��failed_ids[0]��ʾ�Ƿ�id�ĸ�����failed_ids[1...failed_ids[0]]��¼�Ƿ�id��Ŀǰֻ�Ժ�һ�������������಼������ʽ��Ч�� - failed_size[in]: failed_ids����Ĵ�С�� - ����ֵ�� - ����ֵΪ1ʱ����ʾע��ɹ�������ֵΪ-1ʱ����ʾ������ + 功能:动态注册一组与表达式,更新扫描器对象。对于同一个instance句柄,不允许同时有多个更新线程。 + 参数: + instance[in]: 扫描器对象指针; + expr_array[in]: 一组与表达式; + epxr_num[in]: 与表达式的个数; + failed_ids[out]: 非法规则的id;failed_ids[0]表示非法id的个数,failed_ids[1...failed_ids[0]]记录非法id,目前只对含一个正则规则的这类布尔表达式有效; + failed_size[in]: failed_ids数组的大小。 + 返回值: + 返回值为1时,表示注册成功;返回值为-1时,表示出错。 */ int rulescan_update(void * instance, boolean_expr_t * expr_array, unsigned int expr_num, unsigned int * failed_ids, unsigned int failed_size); /* - ���ܣ��ͷ�ɨ������������������һ�Ρ� - ������ - instance [in]: ɨ����ָ�롣 - ����ֵ�� - �ޡ� + 功能:释放扫描器对象;本函数仅调用一次。 + 参数: + instance [in]: 扫描器指针。 + 返回值: + 无。 */ void rulescan_destroy(void * instance); /* - ���ܣ�����һ����ʽɨ�裬���뱣����״̬�IJ����� - ������ - instance [in]: ɨ����ָ�룻 - thread_id [in]: ��ǰִ��ɨ����߳�id�������ڷ�Χ[0, max_thread_num-1]֮�ڡ� - ����ֵ�� - ���ر�����״̬�IJ���������ֵΪNULLʱ����ʾʧ�ܡ� + 功能:启动一次流式扫描,申请保存流状态的参数。 + 参数: + instance [in]: 扫描器指针; + thread_id [in]: 当前执行扫描的线程id,必须在范围[0, max_thread_num-1]之内。 + 返回值: + 返回保存流状态的参数;返回值为NULL时,表示失败。 */ void * rulescan_startstream(void * instance, unsigned int thread_id); /* - ���ܣ���ʽɨ��ӿڣ�ɨ��һ������scan_data�������м�ɨ������������״̬stream_param�У� - ������֧������ɨ��ģʽ�� - ��1��presults��ΪNULL������������ɨ�����������ͨ��*presults����һ��˴ε����н���� - ��2��presultsΪNULL ����ȫɨ��ģʽ����ʾ�ȴ�������ɨ��������ټ��㲢������������ȫ�����н���� - ���rulescan_computeresult������ - ������ - stream_param [in]: ������״̬�IJ����� - scan_data [in]: ��ɨ�����ݣ� - presults [out]: ���presults��ΪNULL�������DZ������е�һ��ɨ������ - size [in]: �������presults�Ĵ�С�� - ����ֵ�� - �������ʽ����ȫɨ�裨presultsΪNULL������ֵΪ����ɨ�����еĹؼ��ʣ���ֵ���䡢IP����ȣ��ĸ����� - ���presult��ΪNULL����ֵΪ����ɨ�����е������ʽ�ĸ�����-1��ʾ������ + 功能:流式扫描接口,扫描一段数据scan_data,并将中间扫描结果保存在流状态stream_param中; + 本函数支持两种扫描模式: + (1)presults不为NULL:本段流数据扫描结束后立即通过*presults返回一组此次的命中结果; + (2)presults为NULL :完全扫描模式,表示等待整个流扫描结束后,再计算并返回整个流的全部命中结果, + 详见rulescan_computeresult函数。 + 参数: + stream_param [in]: 保存流状态的参数; + scan_data [in]: 待扫描数据; + presults [out]: 如果presults不为NULL,则存的是本次命中的一组扫描结果; + size [in]: 结果数组presults的大小。 + 返回值: + 如果是流式的完全扫描(presults为NULL),则返回值为本次扫描命中的关键词(数值区间、IP规则等)的个数; + 如果presult不为NULL,则返回值为本次扫描命中的与表达式的个数,-1表示出错。 */ int rulescan_searchstream(void * stream_param, scan_data_t * scan_data, scan_result_t * presults, unsigned int size); /* - ���ܣ�������ɨ���������ɨ������ - ������ - stream_param [in]: ������״̬��ָ�룻 - presults [out]: ������飬�����������е������ʽ����id�� - size [in]: �������presults�Ĵ�С�� - ����ֵ�� - ���������ʽ�����������<=size��������ֵΪ-1��ʾ������ + 功能:数据流扫描结束后,计算扫描结果。 + 参数: + stream_param [in]: 保存流状态的指针; + presults [out]: 结果数组,保存所有命中的与表达式规则id; + size [in]: 结果数组presults的大小。 + 返回值: + 命中与表达式规则的数量(<=size);返回值为-1表示出错。 */ int rulescan_computeresult(void * stream_param, scan_result_t * presults, unsigned int size); /* - ���ܣ�������ʽɨ�裬�ͷ���������������������µ��øýӿ��ͷ�����������������ָ�ڽ�����ɨ��֮ǰ��û�е��� - rulescan_destroy����rulescan����� - ������ - stream_param [in]: ������ָ�롣 - ����ֵ�� - �ޡ� + 功能:结束流式扫描,释放流参数。正常流程情况下调用该接口释放流参数,正常流程指在结束流扫描之前还没有调用 + rulescan_destroy销毁rulescan句柄。 + 参数: + stream_param [in]: 流参数指针。 + 返回值: + 无。 */ void rulescan_endstream(void * stream_param); /* - ���ܣ�������ʽɨ�裬�ͷ��������������ȵ���rulescan_destroy������rulescan���֮���ٽ�����ɨ�������� - ��Ҫ����rulescan_endstream_simple���ͷ�����������������������²ŵ��øýӿڡ� - ������ - stream_param [in]: ������ָ�롣 - ����ֵ�� - �ޡ� + 功能:结束流式扫描,释放流参数。对于先调用rulescan_destroy销毁了rulescan句柄之后再结束流扫描的情况, + 需要调用rulescan_endstream_simple来释放流参数,仅限于这种情况下才调用该接口。 + 参数: + stream_param [in]: 流参数指针。 + 返回值: + 无。 */ void rulescan_endstream_simple(void * stream_param); /* - ���ܣ�����ʽɨ��ӿڣ�ɨ��������������н���� - ������ - instance [in]: ɨ����ָ�룻 - thread_id [in]: ��ǰִ��ɨ����߳�id�������ڷ�Χ[0, max_thread_num-1]֮�ڣ� - scan_data [in]: ��ɨ�����ݣ� - presults [out]: ������飬�����������е������ʽ����id�� - size [in]: �������presults�Ĵ�С�� - ����ֵ�� - ���������ʽ�����������<=size��������ֵΪ-1��ʾ������ + 功能:非流式扫描接口,扫描结束后返回所有命中结果。 + 参数: + instance [in]: 扫描器指针; + thread_id [in]: 当前执行扫描的线程id,必须在范围[0, max_thread_num-1]之内; + scan_data [in]: 待扫描数据; + presults [out]: 结果数组,保存所有命中的与表达式规则id; + size [in]: 结果数组presults的大小。 + 返回值: + 命中与表达式规则的数量(<=size);返回值为-1表示出错。 */ int rulescan_search(void * instance, unsigned int thread_id, scan_data_t * scan_data, scan_result_t * presults, unsigned int size); |
