一种基于高速缓存的工业白名单学习方法和系统转让专利

申请号 : CN201911364312.X

文献号 : CN111898116B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张卫强管玉梅

申请人 : 长扬科技(北京)有限公司

摘要 :

本发明提供了一种基于高速缓存的工业白名单学习方法及系统,首先收集底层报上来的海量报文数据,根据不同协议进行报文关键字段数据的提取,将这些字段数据拼接成能代表这些报文特征的白名单规则;将这些海量规则生成唯一的hash值并缓存到redis中进行比对去重。通过本发明的方法或系统可以高速稳定地进行白名单学习,解决了工业网络环境下白名单识别的问题,且本发明通过对白名单的部署,可以有效防护工业网络环境,抵御网络攻击。

权利要求 :

1.一种基于高速缓存的工业白名单学习方法,其特征在于,包括如下步骤:步骤1:启动白名单学习监控程序;

步骤2:白名单学习监控程序监控由端口发送的白名单学习指令信号;

步骤3:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤4,否则向入库的队列发送关闭白名单学习指令,执行步骤11:步骤4:启动白名单学习的进程;

步骤5:从Redis中获取白名单学习的配置信息;

具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息;

步骤6:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;

保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用;

还包括Redis热数据处理步骤,具体为:当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新的白名单数据计数更新到Redis中;

步骤7:开启消息队列,接收底层解析的报文;

步骤8:从报文中根据不同的协议提取关键字段拼接成白名单规则;

步骤9:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;

步骤10:入库程序,对队列里的规则进行入库;所述入库程序为白名单学习进程中的一个线程,负责将处理好的白名单规则写入数据库,当接收到学习停止的指令后入库程序正常退出;

步骤11:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习进程,否则继续执行步骤9;

白名单学习监控程序和第二白名单学习监控程序,其中白名单学习监控程序是独立的一套进程,该进程专门用来时时监控来自页面上的动作,接收用户点击开始或者结束的指令,并将学习的参数写入redis保存;所述第二白名单学习监控程序则是白名单学习进程中的一个线程,用来监控学习进程内部的状态,控制白名单学习进程正常结束;

所述学习进程的准备工作完成后,启动第二白名单学习监控程序,其中学习进程的准备工作有两个,第一个是要读取学习的参数,学习时间、等待时间,第二是要加载已有的规则hash,避免新进来的白名单和数据库中的重复,而第二白名单学习监控程序开始读取学习参数中的学习状态,当学习状态关闭时,立即通知入库程序退出,再进行学习进程的退出。

2.根据权利要求1所述的一种基于高速缓存的工业白名单学习方法,其特征在于,所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。

3.根据权利要求2所述的一种基于高速缓存的工业白名单学习方法,其特征在于,步骤

6中,定时器基于学习时长对白名单学习的时间计时,当达到学习时长后退出白名单学习进程。

4.一种基于高速缓存的工业白名单学习系统,包括客户端和服务器,客户端向服务器发送基于高速缓存的工业白名单学习请求,服务器根据该请求执行如下步骤:步骤10:启动白名单学习监控程序;

步骤20:白名单学习监控程序监控由端口发送的白名单学习指令信号;

步骤30:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤40,否则向入库的队列发送关闭白名单学习指令,执行步骤110:步骤40:启动白名单学习的进程;

步骤50:从Redis中获取白名单学习的配置信息;

步骤60:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;

保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用;

还包括Redis热数据处理步骤,具体为:当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新的白名单数据计数更新到Redis中;步骤70:开启消息队列,接收底层解析的报文;

步骤80:从报文中根据不同的协议提取关键字段拼接成白名单规则;

步骤90:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;

步骤100:入库程序,对队列里的规则进行入库;所述入库程序为白名单学习进程中的一个线程,负责将处理好的白名单规则写入数据库,当接收到学习停止的指令后入库程序正常退出;

步骤110:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习进程,否则继续执行步骤90;

白名单学习监控程序和第二白名单学习监控程序,其中白名单学习监控程序是独立的一套进程,该进程专门用来时时监控来自页面上的动作,接收用户点击开始或者结束的指令,并将学习的参数写入redis保存;所述第二白名单学习监控程序则是白名单学习进程中的一个线程,用来监控学习进程内部的状态,控制白名单学习进程正常结束;

所述学习进程的准备工作完成后,启动第二白名单学习监控程序,其中学习进程的准备工作有两个,第一个是要读取学习的参数,学习时间、等待时间,第二是要加载已有的规则hash,避免新进来的白名单和数据库中的重复,而第二白名单学习监控程序开始读取学习参数中的学习状态,当学习状态关闭时,立即通知入库程序退出,再进行学习进程的退出;

步骤50具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息。

5.根据权利要求4所述的一种基于高速缓存的工业白名单学习系统,其特征在于,所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。

说明书 :

一种基于高速缓存的工业白名单学习方法和系统

技术领域

[0001] 本发明涉及通信技术领域,具体地涉及一种基于高速缓存的工业白名单学习方法及系统。

背景技术

[0002] 在项目开发中,实现白名单学习虽在处理字符串方面,Python有着优势,但其性能瓶颈也很明显,尤其在白名单学习时间持续比较久,白名单数量巨大的时候,就会出现学习
加载慢,开启和结束的过程慢,学习过程中时时展示学习结果的时候慢的问题,并且随着学
习进行会慢慢消耗系统资源,最终导致无法学习的问题;除此之外,当白名单数据很大,加
载速度变慢,就会导致前后台学习倒计时时间不一致,出现学习状态不一致的问题,导致后
台崩溃。
[0003] 在传统模式下,白名单加载和入库都需要与Mysql进行交互,当突然有白名单结束的信号传递过来时,进程会立即退出,这样,这些与数据库交互的线程也会立刻退出,对于
Mysql而言,client没有关闭连接而突然退出Mysql是无法识别的,而这样的连接仍会被保
留到最大等待时间而成为异常连接,用户在这种情况下如果重复操作将会产生大量的失效
连接,并且使用ORM框架去操动数据库时,如果连接池使用了这种异常连接,会使程序抛出
异常。

发明内容

[0004] (一)发明目的
[0005] 本发明的目的是解决现有技术存在的技术问题提供一种基于高速缓存的工业白名单学习方法及系统。
[0006] (二)技术方案
[0007] 为解决上述问题,本发明一种基于高速缓存的工业白名单学习方法,包括如下步骤:
[0008] 步骤1:启动白名单学习监控程序;
[0009] 步骤2:白名单学习监控程序监控由端口发送的白名单学习指令信号;
[0010] 步骤3:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤4,否则向入库的队列发送关闭白名单学习指令,执行步骤11:
[0011] 步骤4:启动白名单学习的进程;
[0012] 步骤5:从Redis中获取白名单学习的配置信息;
[0013] 步骤6:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;
[0014] 步骤7:开启消息队列,接收底层解析的报文;
[0015] 步骤8:从报文中根据不同的协议提取关键字段拼接成白名单规则;
[0016] 步骤9:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;
[0017] 步骤10:入库程序,对队列里的规则进行入库;
[0018] 步骤11:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习
进程,否则继续执行步骤9。
[0019] 进一步的,步骤5具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息。
[0020] 进一步的,所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。
[0021] 进一步的,步骤6中,定时器基于学习时长对白名单学习的时间计时,当达到学习时长后退出白名单学习进程。
[0022] 进一步的,步骤6中,保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用。
[0023] 进一步的,还包括Redis热数据处理步骤,具体为:
[0024] 当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新
的白名单数据计数更新到Redis中。
[0025] 基于高速缓存的工业白名单学习系统,包括客户端和服务器,客户端向服务器发送基于高速缓存的工业白名单学习请求,服务器根据该请求执行如下步骤:
[0026] 步骤10:启动白名单学习监控程序;
[0027] 步骤20:白名单学习监控程序监控由端口发送的白名单学习指令信号;
[0028] 步骤30:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤40,否则向入库的队列发送关闭白名单学习指令,执行步骤
110:
[0029] 步骤40:启动白名单学习的进程;
[0030] 步骤50:从Redis中获取白名单学习的配置信息;
[0031] 步骤60:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;
[0032] 步骤70:开启消息队列,接收底层解析的报文;
[0033] 步骤80:从报文中根据不同的协议提取关键字段拼接成白名单规则;
[0034] 步骤90:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;
[0035] 步骤100:入库程序,对队列里的规则进行入库;
[0036] 步骤110:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习
进程,否则继续执行步骤90。
[0037] 步骤50具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息。
[0038] 一种基于高速缓存的工业白名单学习系统,所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。
[0039] 进一步的,步骤60中,保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用。
[0040] 进一步的,还包括Redis热数据处理步骤,具体为:
[0041] 当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新
的白名单数据计数更新到Redis中。
[0042] (三)有益效果
[0043] 本发明的上述技术方案具有如下有益的技术效果:解决了工业网络环境下白名单识别的问题,通过对白名单的部署,可以有效防护工业网络环境,抵御网络攻击,并且通过
可以高速稳定进行白名单学习。

附图说明

[0044] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0045] 图1为本发明白名单学习的方法流程示意图;
[0046] 图2为白名单学习中的利用redis缓存在整个过程保证热数据的流程示意图;
[0047] 图3为白名单学习中白名单规则生成的整个过程的流程示意图。

具体实施方式

[0048] 为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发
明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本
发明的概念。
[0049] 显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施
例,都属于本发明保护的范围。
[0050] 此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
[0051] 基于高速缓存的工业白名单学习方法,包括如下步骤:
[0052] 步骤1:启动白名单学习监控程序;
[0053] 步骤2:白名单学习监控程序监控由端口发送的白名单学习指令信号;
[0054] 步骤3:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤4,否则向入库的队列发送关闭白名单学习指令,执行步骤11:
[0055] 步骤4:启动白名单学习的进程;
[0056] 步骤5:从Redis中获取白名单学习的配置信息;
[0057] 步骤6:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;
[0058] 步骤7:开启消息队列,接收底层解析的报文;
[0059] 步骤8:从报文中根据不同的协议提取关键字段拼接成白名单规则;
[0060] 步骤9:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;
[0061] 步骤10:入库程序,对队列里的规则进行入库;
[0062] 步骤11:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习
进程,否则继续执行步骤9。
[0063] 步骤5具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息。
[0064] 所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。
[0065] 步骤6中,定时器基于学习时长对白名单学习的时间计时,当达到学习时长后退出白名单学习进程。
[0066] 步骤6中,保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用。
[0067] 还包括Redis热数据处理步骤,具体为:
[0068] 当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新
的白名单数据计数更新到Redis中。
[0069] 基于高速缓存的工业白名单学习系统,包括客户端和服务器,客户端向服务器发送基于高速缓存的工业白名单学习请求,服务器根据该请求执行如下步骤:
[0070] 步骤10:启动白名单学习监控程序;
[0071] 步骤20:白名单学习监控程序监控由端口发送的白名单学习指令信号;
[0072] 步骤30:解析白名单学习指令信号,判断该白名单学习指令信号指示开启还是关闭,如果指示开启则执行步骤40,否则向入库的队列发送关闭白名单学习指令,执行步骤
110:
[0073] 步骤40:启动白名单学习的进程;
[0074] 步骤50:从Redis中获取白名单学习的配置信息;
[0075] 步骤60:启动定时器,对白名单学习的时间计时,同时加载Redis中的规则hash;
[0076] 步骤70:开启消息队列,接收底层解析的报文;
[0077] 步骤80:从报文中根据不同的协议提取关键字段拼接成白名单规则;
[0078] 步骤90:对海量的白名单规则去重,生成规则的hash更新至hash字典中,放入队列;
[0079] 步骤100:入库程序,对队列里的规则进行入库;
[0080] 步骤110:启动第二白名单学习监控程序,当第二白名单学习监控程序监控到白名单学习停止的指令后,停止入库程序,将学习到的规则hash更新到Redis,退出白名单学习
进程,否则继续执行步骤90。
[0081] 步骤50具体为,当白名单学习进程启动时,白名单学习的配置信息被写入Redis,白名单学习进程启动后,读取白名单学习的配置信息。
[0082] 所述白名单学习的配置信息包括白名单学习时长、等待时长和学习状态。
[0083] 步骤60中,保存在redis中的hash以Python字典对象的形式保存,在保存前将字典转成json数据,在获取hash后转换为字典使用。
[0084] 还包括Redis热数据处理步骤,具体为:
[0085] 当白名单被删除,则重新获取白名单数据库中的白名单数据,包括获取最新的白名单规则hash值,将最新的hash值更新到Redis中;还包括获取最新的白名单数据,将最新
的白名单数据计数更新到Redis中。
[0086] 系统通过页面触发开始或者结束,可以进行学习的预约,通过学习监控程序来监控页面指令;
[0087] 学习进程启动后,需要加载已经存在白名单,保存白名单学习的一些配置信息,并启动倒计时来监控学习的时间;
[0088] 对于上述学习进程的准备工作完成后,启动第二个学习的监控程序,来监控学习状态;
[0089] 若这些工作完成后开始启动白名单生成的程序,启动消息队列接收底层的报文,处理这些数据,最终生成白名单规则,于此同时将每个规则生成唯一的hash更新到redis
中,当接收到监控进程的关闭信号时,停止接收并退出白名单的处理程序;
[0090] 通过接口触发开始或者结束,可以进行学习的预约,通过学习监控程序来监控页面指令,包括:
[0091] 对于所述开始和结束,是指页面上展示的学习状态,后台与底层要与页面展示的状态一致,当页面点击开始学习进入倒计时,后台学习进程相应的也要进入倒计时并进入
学习状态,并同时启动学习的第一监控程序,当学习进程启动后再启动学习的第二监控程
序。
[0092] 第一监控程序和第二监控程序,其中第一监控程序是独立的一套进程,该进程专门用来时时监控来自页面上的动作,也就说用户行为,主要是接收用户点击开始或者结束
的指令,并将学习的参数写入redis保存;所述第二监控程序则是白名单学习进程中的一个
线程,用来监控学习进程内部的状态,控制白名单学习进程正常结束。
[0093] 所述学习进程的准备工作完成后,启动第二个学习的监控程序,其中学习的准备工作主要有两个,第一个是要读取学习的参数,比如学习时间、等待时间等,第二是要加载
已有的规则hash,避免新进来的白名单和数据库中的重复,而第二监控程序开始读取学习
参数中的学习状态,当学习状态关闭时,立即通知入库程序退出,再进程学习进程的退出。
[0094] 启动消息队列接收底层的报文,处理这些数据最终生成白名单规则,于此同时将每个规则生成唯一的hash更新到redis中,包括:
[0095] 启动消息队列与DPI引擎对接,接收上报的报文,根据协议将不同报文的关键字段数据进行提取,拼接成白名单字符串,并将这些字符串做hash处理并进行对比,若对比通
过,则更新到hash字典中,并将这条规则放入队列中交给入库程序处理,否则该条规则丢
弃;
[0096] 对于上述所描述的入库程序,为白名单学习进程中的一个线程,负责将处理好的白名单规则写入数据库,并且时时获取第二监控程序发来的指令,当接收到学习停止的指
令后停止入库正常退出;
[0097] 当学习进程退出前,要将最新的hash数据更新到redis中,当下次学习开始时,直接从redis中获取。
[0098] 关于白名单学习信号传递问题,主要来源有两个,第一个是用户在页面上操作,第二个是学习倒计时结束,整个白名单学习中有两个程序在监控该信号,但它们分工不同,第
一监控程序是监控页面指令,然后将页面指令传递给入库程序,而第二监控程序主要监控
学习状态,和学习结束时间,当这两个任一个触发,该监控程序都会通知入库程序,最终的
学习结束都会由入库程序来执行。
[0099] 对于所述的性能方面,主要有3个,分别为学习开始时,已有的白名单规则的加载速度,这个加载时间将决定了学习开始后要等待多久才能开始处理报文;白名单数据量较
大时展示学习成果比较慢的问题,同时这个问题也会引起资源消耗过多的问题;最后是海
量字符串对比去重的问题。
[0100] 对于所述的稳定性方面,主要是指不管是开始还是结束,后台的白名单学习进程都要与前端页面状态保持一致,特别是结束学习的时候,不管是用户中断学习还是达到学
习时长主动退出,都要保证入库的程序先退出再结束进程,否则将会引起Mysql的异常。
[0101] 对于所述的海量字符串去重的问题,其核心主要是对关键字段按照一定顺序排序,因为底层上报的字段中,有可能顺序不一样,直接比对会造成规则重复的问题,字符串
顺序不一致,但生成的规则是有可能一致的;解决了上述问题后,直接去比对虽然不会重
复,但是,拿新的规则去跟已有的规则一一对比显然是非常消耗性能,并且效率是极其低
的,而且规则的字符串会比较长,直接比对字符串效率也非常低。
[0102] 上述直接对比的方案性能难以达标,若将白名单规则生成唯一的hash值再去对比,这样对比的效率会大大提升。
[0103] 利用Python中的字典对象,将这些hash值作为字典的key进行保存,这样,我们再去对比时,只需要判断当前规则的hash值是否存在于该字典中即可,这样,规则比对的问题
解决。
[0104] 对于所述的白名单加载问题,加载已有的白名单,主要是用来比对新生成的白名单,当已有的白名单数据过多时,还从Mysql中去获取所有的白名单字符串将是一个很耗时
耗性能的事情,所以,本发明在处理白名单加载时,直接从redis中去获取,这样只要保证
redis中的热数据与Mysql中一致即可,当白名单学习结束后,只需要将最新的白名单规则
hash更新到redis即可,另外当用户操作白名单时,需要更新redis中hash值,过程如图2。
[0105] 白名单学习成果展示同样采取redis来做缓存处理,白名单展示牵扯到数据库大量的聚合查询,数据量大时,速度慢,资源消耗高,在白名单学习进程中,增加计数器,对每
个学习到的规则进行计数,协议进行计数,并将这些计数时时更新到redis中,避免展示学
习成果时频繁的与Mysql交互;同样的,对于所述保证redis热数据与数据库同步的问题,与
上述方式一样,在用户操作白名单时,需要更新redis,过程如图2。
[0106] 对于所述的白名单学习稳定性方面,其核心主要是要快速开启,快速结束,要跟的上页面的反应速度,否则用户点击开始后立即点击结束会直接导致学习进程的紊乱。
[0107] 白名单学习开启的速度主要取决于已有白名单的加载速度,根据上述,白名单加载直接从redis中加载,可以实现已有白名单的瞬间加载,同样的结束进程主要是让入库程
序快速退出,在入库程序中加入时时检查学习状态和监控学习信号的程序,双管齐下让入
库程序无延迟正常退出,保证程序的健康运行,需要说明的是,这里的正常退出是只入库程
序退出前要关闭与Mysql的链接,避免产生上述的异常连接问题。
[0108] 为了保证redis的hash值与入库的白名单一致,每次学习过程中,需要时时的将入库成功的一条规则hash更新到存放hash的字典对象中,当学习结束,将本次学习的规则
hash更新到redis中,为下次学习做准备。
[0109] 结合附图1,显示为本发明一种白名单学习方式的实施例中流程示意图,所述白名单学习的整个监控流程,处理流程,图中所述通信过程是基于zmq和Python的队列实现。
[0110] 所述方法包括以下步骤:
[0111] S11:白名单监控进程,是独立于白名单学习的一个进程,该进程在后台启动后就一直存在,在用户没有进行白名单学习操作的时候,该进程会处理sleep状态;
[0112] S12:白名单监控进程会时时监控某个特定的端口,该端口会发来白名单学习的相关信号;
[0113] S13:判断指令,并将该指令进行传递;
[0114] S14:如果指令是开启白名单学习,则启动白名单学习的进程,该进程只会在接收到开启学习命名后才会启动,并在接收到退出学习指令的时候进行关闭;
[0115] S15:在页面启动白名单学习时,会将白名单学习的配置信息传递给后台,后台程序会将这些信息写入redis,白名单学习进程启动后,首先会读取白名单学习的配置信息,
如学习时长,等待时长,并将学习时长传递给定时器程序,定时器接到这个时间后开始倒计
时;
[0116] S16:所述定时器,主要是用来对白名单学习进行计时,当用户选择的学习时长达到后,会发送关闭学习的信号给监控程序来关闭白名单学习进程;
[0117] S17:在启动定时器的同时,开始加载redis中的规则hash,需要说明的是,保存在redis中的hash是以Python字典对象的形式保存,在保存前需要将字典转成json数据,在获
取hash后转换为字典使用而不需要遍历以节省时间;
[0118] S18:启动第二学习监控程序,该程序会监控学习停止的指令,然后告知入库程序退出,之后再退出学习进程;
[0119] S19‑S22:这四个阶段为白名单生成的主要程序(如图3所示),首先消息队列开启接收上报的报文,并对报文的有用字段数据进行提取,拼接成白名单规则,将白名单规则的
字符串进行排序后生成规则hash,最后进行比对,如果重复就丢弃,否则就放入队列中传递
给入库程序,入库程序接受到后将hash更新到hash字典中,并将规则进行入库,同时进行接
受第二监控程序的信号,如果收到关闭学习的信号,则进行退出;
[0120] S23:将本次学习到的规则hash更新到redis中,这里需要注意的是,只有当本次学习结束的时候,该更新的程序才会触发;
[0121] S24:该程序主要是发送一个关闭学习的信号到入库的队列中去,不过为了防止队列溢出而导致入库程序收不到该信号,入库程序会在每次入库之后获取一次学习状态,这
样双管齐下可以保证入库程序在学习结束被触发时可以立刻结束;
[0122] S25:退出当前进程,白名单学习进程结束;
[0123] 结合附图2,利用redis做缓存,该流程图主要是针对redis热数据处理的流程,因为学习不是一次性的工作,有可能用户在学习结束后会对白名单进行操作,比如删除无用
的白名单,这样数据库中的白名单规则就会和redis中的不一致,要解决这个问题,就要在
用户处理完白名单后,以异步的方式将最新的白名单数据更新到redis中去,这样当下次进
行学习的时候,redis保存的仍然是最新的白名单数据,类似的,白名单学习成果这里也要
做相同的处理,当白名单重新开始学习时,计数也会以最新的数据开始计数,展示的始终是
最新的数据,这样处理主要是优化性能,让白名单学习的整个过程,数据库始终只用负责入
库白名单规则即可,其他消耗时间和性能的工作全部交由redis处理,大大降低性能消耗。
[0124] 本发明首先收集底层报上来的海量报文数据,根据不同协议进行报文关键字段数据的提取,将这些字段数据拼接成能代表这些报文特征的白名单规则;将这些海量规则生
成唯一的hash值并缓存到redis中进行比对去重。本发明解决了工业网络环境下白名单识
别的问题,通过对白名单的部署,可以有效防护工业网络环境,抵御网络攻击,并且通过本
发明的方式可以高速稳定进行白名单学习。
[0125] 应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何
修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨
在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修
改例。
[0126] 以上参照本发明的实施例对本发明予以了说明。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本发明的范围。本发明的范围由所附权利要求及其等价物限定。
不脱离本发明的范围,本领域技术人员可以做出多种替换和修改,这些替换和修改都应落
在本发明的范围之内。
[0127] 尽管已经详细描述了本发明的实施方式,但是应该理解的是,在不偏离本发明的精神和范围的情况下,可以对本发明的实施方式做出各种改变、替换和变更。
[0128] 显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或
变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或
变动仍处于本发明创造的保护范围之中。