之前有介绍过BGP特征提取的有效工具-BML,并且整体介绍了BML的原理以及基本使用。今天,我们进一步深度研究这就工具,深度解析这个工具的更多秘密。
首先,我们得知道这个工具由四个子模块组成,分别是BML.data,BML.scripts,BML.transform以及BML.utils。其中BML.data模块是数据收集模块,主要用于进行数据收集和预处理。BML.utils是通信模块,用来进行模块件的沟通与调节,其主要功能包括作业文件执行,日志打印,参数设置,路径生成,时间戳确定等功能。BML.transform是特征转换模块,其主要功能是按照工程师和研究人员的需求生成相应特征的。BML.scripts是一个脚本模块,其主要功能是将作业文件进行并行执行的一个脚本,是所有模块中功能最简单的模块,包括对路由快照、updates文件解析以及作业文件执行等功能并行处理。
由于BML.utils和BML.scripts主要是进行系统调度上的功能处理,与我们用户的关系不大,因此,在本文中,我们将着重讲解BML.data模块和BML.transform模块。
1.BML data
BML.data模块主要功能是进行数据收集与预处理,包括从routeviews和RIPE RIS收集到的BGP原始数据的收集,解析以及快照生成。BML.data模块还包括三个子模块,分别是updates模块、routes模块和datasets模块。
1.1 updates模块
updates模块的主要功能就是用来解析接收到的BGP updates数据流的。当系统使用BGPstream获取到特定时间的BGP数据流之后,对收到的updates数据进行解析,日志打印以及存储。
1.2 routes模块
routes模块则是用来生成路由快照的,并且同步打印日志以记录处理情况。一旦收集到数据,就必须对其进行转换,以满足从业人员的目标和 ML 模型的要求。BML 在感兴趣的时间段内每隔 ∆ 秒生成一个路由快照,从而生成一组 路由快照,存储格式如下:前缀:收集器:peer AS:AS-Path。
1.3 dataset模块
dataset模块是BML.data模块中主要执行模块,用来启动数据收集程序,也会同步输出日志。对于dataset模块而言,最重要的是Dateset类,它包括了三个方法:getJobs、setParams、setPeriodsOfInterests。
如果你已经熟悉了BML的使用方法,你可能就非常清楚这三种方法的基本用途:
- Dateset.setParams:用来设置数据收集的启动参数,列表-字典格式进行参数传输,例如:
dataset.setParams({
"PrimingPeriod": 10*60, # 10 hours of priming data
"IpVersion": [4], # only IPv4 routes
"Collectors": ["rrc06"], # rrc06: at Otemachi, Japan
})
其可进行设置的参数包含6类,分别是:
参数名 | 含义 | 默认 |
Projects | 数据来源。默认的数据来源是ris和routeviews。 | ['ris','routeviews'] |
Collectors | 收集器列表,默认为空。 具体的收集器有哪些可以去ris和routeviews官网去查找。 |
[] |
IpVersion | 支持的IP版本,默认同时支持IPv4和IPv6。 | [4,6] |
PrimingPeriod | 防止冷启动的预置时间,默认为一小时。 | 1*60 |
UseRibsPriming | 是否使用Ribs文件的预置时间选项,默认为否。 | False |
UseRibsData | 是否使用Ribs数据,默认为否。 | False |
SkipIfExist | 系统设置,遇到exit是否跳过,默认为是。 | True |
通过Dateset.setParams方法,我们可以确定自己想要收集的数据来源于哪里,在哪里收集以及收集什么类型的数据。
2. Dateset.setPeriodsOfInterests:用来设置你需要用来统计特征的时间段,即你感兴趣的时间段,以及最后生成的特征文件的存储路径。例如:
dataset.setPeriodsOfInterests([
{
"name": "GoogleLeak", # 事件目录
"label": "anomaly", # 标签目录
"start_time": utils.getTimestamp(2017, 8, 25, 3, 0, 0), # August 25, 2017, 3:00 UTC
"end_time": utils.getTimestamp(2017, 8, 25, 4, 0, 0) # August 25, 2017, 4:00 UTC
}
])
在这个Dateset.setPeriodsOfInterests方法中,我们将自己感兴趣的时间的起止事件分别用‘satrt_time’和‘end_time’来进行表示,然后给这个事件打个标签‘label’,并且给他取名‘name’。最后,特征文件会存在folderpath/label/name/文件夹下。
3. Dateset.getJobs:启动数据收集模块的,开始进行数据收集和预处理。
2. BML.transform
BML.transform模块就是用来执行数据转换,生成特征的模块。我们要完成数据转换,需要对路由快照序列应用特征规格数据转换函数 T (.) 。用于 BGP 分析的 ML 模型已经或可能使用各种功能和数据表示方式:
- 统计特征:如前缀或路由的数量、路由的平均跳数。
- 图:由于 BGP 反映了互联网拓扑结构,因此路由快照可以很容易地表示为一个图,其结构可能因 ML 模型而异。
- 图特征:虽然许多 ML 模型无法利用图结构数据,但它们可以使用从 BGP 图中提取的合