文献标识码:A
DOI:10.16157/j.issn.0258-7998.2016.08.033
中文引用格式:刘建明,唐霞,李龙. 基于机器学习的VoIP流量在线识别系统[J].电子技术应用,2016,42(8):133-137.
英文引用格式:Liu Jianming,Tang Xia,Li Long. Real-time detection system of VoIP traffic based on machine learning[J].Application of Electronic Technique,2016,42(8):133-137.
0 引言
VoIP(Voice over Internet Protocol)业务成本低、部署方便,在语音通信业务中的比例持续上升,其发展带来机遇的同时也给网络安全运行带来了巨大挑战[1]。因此,对VoIP业务进行管控非常重要,高精度在线流量识别也成为众多研究领域的热点与难点。
目前,主流VoIP流量识别方法主要包括两大类:基于流特征的VoIP流量识别与基于机器学习的VoIP流量识别。文献[2]最早利用流特征进行流量分类,提出249种具体的流特征,并提供10组可用的流量数据集。文献[3]针对数据流中一段时间内的数据包长和包时间间隔,统计其分布范围、均值、中值与方差等特征作为VoIP流量识别的依据。上述文献识别精度不高,基于流特征的识别方法对不同类型的网络流量适应性也较低。基于机器学习的识别方法主要集中于离线识别,对于在线VoIP流量识别的研究并不多[4-7]。文献[4]实现了基于WEKA库文件的Skype流量在线检测工具,但存在无netAI工具更新、无可视化界面、算法单一等缺陷。文献[5]改进了支持向量机算法,能够节省1/4的识别时间,但仍然无法满足在线识别的实时性要求。文献[6]基于流统计特征,利用机器学习算法构建分类器模型,系统在线识别精度为93%。其不足之处在于,没有研究在线识别系统的实时性,并不是真正意义上的在线识别。文献[7]基于开源数据挖掘工具WEKA中的机器学习算法,针对特定应用Skype提出并设计出一种基于决策理论的识别工具,然而只能达到82%的精度,无法满足大流量环境下的高精度识别。从目前的研究成果来看,在线识别的难点主要在两方面:一是无法满足较高实时性要求,二是无法实现高精度识别。
针对以上问题,本文设计了VoIP流量在线识别系统,不仅能实现实时在线识别,且识别精度高达到92%。
1 VoIP流量在线识别系统
本文所设计的系统中,数据流定义为两个主机之间交换的连续数据包。同一条流中所有数据包的五元组相同(五元组包括源地址、目的地址、源端口、目的端口和传输协议)。构建训练集的过程需对数据包进行分流,根据思科分流定义,单条TCP流须包含完整语义的开始时刻(SYN)和结束时刻(FIN/RST),UDP流中两个包之间的时间间隔不超过30 s[8]。
1.1 在线识别系统原理
在线识别系统分为离线分类器建模和在线识别。其中,离线分类器建模如图1所示,预处理模块对PCAP文件格式的数据集进行分流,并转化为WEKA工具所能识别的CSV文件格式,同时统计每个数据流的流特征构建成训练集。算法学习模块采用Best first search算法和CSF算法去除候选特征中的冗余且不相关的流特征,获得最优特征子集,再调用机器学习算法对训练集进行学习并搭建分类器模型。最后,通过相关指标评估获得最优分类器模型。
图1 离线分类器框图
如图2所示,本文所设计的在线识别系统建立在获得离线分类器的基础上,提出JPcap边抓包边检测机制,利用JPcap库编写探嗅器控制底层网卡抓取数据包,同时分流模块对数据包分流并统计流特征。设定流量累积时间,每次达到阈值时间30 s,将统计好的数据流作为测试集送入离线状态下构建好的分类器进行识别,并将识别出的VoIP流量以IP地址的形式输出到系统界面,动态显示网络中VoIP电话状态。
图2 在线识别系统
1.2 预处理模块
预处理模块在离线状态进行,为系统搭建分类器提供完整训练集。该模块包括获取数据集、文件格式转换与分流统计构建训练集。
1.2.1 获取数据集
使用Wireshark软件抓取PC中运行的特定应用类型流量获取数据集,通过配置交换机镜像端口将抓取单个PC产生的流量扩展为整个局域网产生的流量。同时使用文献[4]中提到的Moore数据集与Tstat网[9]提供的Skype数据集。此外,在数据集中新增PC-PHONE端的VoIP类型流量,使系统同时具备PC-PC端与PC-PHONE端VoIP电话的识别能力。
1.2.2 文件格式转换
Wireshark软件数据包的存储格式为PCAP格式。PCAP文件头包括:数据链路层14 B包头+20 B IP包头+20 B TCP或UDP包头。预处理模块通过分析PCAP文件头信息,编程实现五元组、时间戳及数据包长等流特征信息的提取,并转换为WEKA能识别的CSV文件格式。
1.2.3 分流统计构建训练集
首先在五元组相同且满足思科分流定义的条件下,对Wireshark抓取的数据包进行分流,利用文献[2]提供的fullstats分流器,在Linux系统中实现分流。完成数据包分流后,统计数据流的相关流特征,并将统计后的数据流作为最终训练集。
1.3 流特征选择
文献[2]提出了249种流特征,若对每个特征进行统计,将耗费大量的计算时间,成本过高,且并不是所有流特征都适用于VoIP流量识别,因此需要去除不相关且冗余的流特征,以达到提高模型精确度,减少运行时间的目的。本设计根据VoIP语音电话特有的通信属性对其进行初步筛选,得出20个候选流特征再进行特征选择。特征选择首先从候选特征集中产生一个特征子集,然后用评价函数对该特征子集进行评价,将评价的结果与停止准则进行比较,若评价结果比停止准则好就停止,否则就继续产生下一组特征子集,直到获得评价最高的特征子集。本文使用Best first search搜索算法从候选特征集中产生特征子集,然后用CFS(Correalation-based Feature Selection)算法进行评估,得到12个相关性最好、得分最高的特征子集,如表1所示。
1.4 机器学习算法
本文着重研究C4.5决策树算法,为增强系统可扩展性,另在系统中集成了朴素贝叶斯算法(NaiveBayes)与支持向量机算法(SVM)。
C4.5决策树是一种经典的分类与回归算法。决策树的数据结构由内部节点和叶子节点组成,内部节点代表一个特征属性,叶子节点代表一个类别[10]。算法的处理过程分为以下几个步骤:首先,计算数据集D的经验熵H(D),熵是一种不纯度度量准则:
式中,pi是属于第i类的概率。其次,计算特征A对数据集D的经验条件熵H(D|A):
进一步得出信息增益为:
信息增益比为:
式中HA(D)为属性A的信息熵。依次选取信息增益比最大的特征Ag分割数据集D为Di,将Di中最大的类作为子节点再递归调用得到子树Ti。最终经过“悲观剪枝”修剪决策树得到损失函数最小的子树。
朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练集,首先基于特征条件独立假设学习输入/输出的联合概率分布,再基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯的算法效率高,是一种常用的分类算法。
支持向量机是一种二分类模型,基本模型是定义在特征空间上的间隔最大的线性分类器。其学习策略是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。
1.5 在线识别——JPcap边抓包边检测机制
在线识别的关键技术是实现在线抓包同时短时间内识别出目标流量。本文致力于寻找一个能实现Window系统下在线抓包的工具,而JPcap库正是实现这一想法的重要类库。
JPcap库是Keita Fujiiy开发的一套能够捕获、发送网络数据包的Java类库[11]。Java语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制却无能为力。JPcap类库给Java语言提供一个公共接口,类库使用libpcap和原始套接字API,调用Jini获得JavaAPI中的数据,实现Java语言对底层网卡的控制与链路层数据包的获取。
本文提出JPcap边抓包边检测机制,基于JPcap库编写探嗅器实现在线抓包。利用JPcap库所抓取的数据包对象是单个数据包。因此,系统在抓包的同时能实现对单个数据包按五元组分流并统计其流特征。每当统计时间达到所设置的阈值时间30 s时,便将这段时间内统计好的数据流作为测试集送入分类器进行识别,输出识别的VoIP流IP地址,动态显示网络中VoIP的状态,实现真正意义上的VoIP流量实时在线识别系统。
2 实验结果与分析
实验环境:新西兰怀卡托大学基于Java开发的开源数据挖掘平台weka3.6、一台装有Windows 7操作系统和Eclipes的个人PC、一台华为S5000交换机。
2.1 评价指标
评价二分类类型的分类器性能指标为:精度(precision)、召回率(recall)、F1值。实验以VoIP类为正类,非VoIP类为负类,分类器在测试集上预测结果为正确或错误。可能出现的4种情况记:TP,将正类预测为正类数;FN,将正类预测为负类数;FP,将负类预测为正类数;TN,将负类预测为负类数。进一步,得到精度:
召回率为:
F1值为精度和召回率的调和均值:
2.2 实验数据
本次实验使用1.5G Skype流,包含了Skype 10个版本,共计1 371条流,其中371条为PC-PHONE端VoIP流量。非VoIP流量1G,使用文献[2]中提到的Moore数据集与通过镜像端口抓取到的数据集。整个训练集共34 371条数据流,覆盖14种流量类型,具体见表2。
2.3 离线分类器模型结果分析
系统识别结果如图3所示。离线建模过程如图3上半部分所示,步骤包括打开训练集文件、选择机器学习算法、建模,图中所示J48即C4.5决策树算法,结果框为分类器识别结果,具体如图4所示。
图3 系统识别结果
图4 分类器识别结果
实验使用10折交叉验证法评估出平均测试误差最小的分类器,由图4可知,分类器识别精度为99.9%,召回率为99.6%。图4最下方为混淆矩阵,对于二分类问题,用2×2矩阵表示,正对角线上表示正确分类的样本,反对角线表示被错误分类的样本数,结果显示有2个非VoIP样本被分类成VoIP类,6个Skype样本被分类成非VoIP类。实验结果表明,本文所选取的最优特征子集大幅提高了分类器的性能指标。由于本文针对VoIP流包长、时间间隔等关键属性对流特征进行筛选,增强了机器学习算法的学习能力,从而使得分类器识别性能大大提高。
同样地,对NaiveBayes和SVM算法分别进行实验,3个算法搭建的分类器识别结果对比图如图5所示。可知,基于C4.5决策树算法分类器的3个评价指标均最高。这是因为C4.5决策树算法建模时不依赖于网络流量类型的分布,对于不同类型的流量数据有更强的适应能力,在分析较大训练集时优于依赖先验概率的NaiveBayes算法,且内存需求小于SVM算法,因此得到了最好的识别精度。
图5 3种算法分类器结果对比
2.4 在线分类器识别结果分析
在线识别如图3下半部分所示。首先打开本地网卡开始抓包,设定混杂模式抓取流经本地网卡的所有数据包,同时对数据包进行分流并统计流特征。每达到设定的30 s阈值时,选择对应算法的分类器对测试集进行在线识别,识别出VoIP类型流量并以IP地址形式输出到图示结果框。图3仅是一次测试结果,3个IP地址均为VoIP通话主机地址,结果表明系统实时准确识别出了当前网络中的VoIP通话。
接下来,累积进行100次在线实验,对比3种分类器在线识别精度,结果如表3所示。由表3可知,在线识别精度最高的分类器为基于C4.5算法的分类器。
而作为在线识别系统,除精度以外,还需考虑第二个核心指标——实时性。这里也对3种算法的建模时间与识别时间进行对比,结果如表4所示。由表4可得,基于C4.5算法的在线识别时间最短,建模时间略低于NaiveBayes算法,而NaiveBayes在线识别时间低于C4.5算法,SVM建模与识别时间均最长。由于C4.5决策树模型处理样本时,仅需根据网络流流特征值自顶向下进行比较,找到相应叶节点即可,处理简单,处理效率更高,因此识别速度更快。
结合表3、表4的结果对精度与实时性指标进行分析,得到C4.5决策树算分类器识别精度最高,且在线实时性最好;NaiveBayes分类器虽然建模时间短,但在线实时性略差,且精度较低;SVM分类器精度与实时性均不佳。在实际应用中应同时保证高识别精度与实时性,因此本文选择C4.5决策树为系统的核心算法。实验结果表明,本文所设计的VoIP流量在线识别系统确实能同时满足高精度与实时性。
3 结束语
本文设计并实现了基于机器学习的VoIP流量在线识别系统,在大幅提高VoIP流量识别精度的同时保证了系统的实时性,且有良好可视化界面。实验结果表明,本文所设计的VoIP流量在线识别系统离线识别精度达99.9%,在线识别精度达92%,且识别时间短,能够快速识别出目标流量并显示VoIP流量活动的IP地址。不过,本文的训练集未能涵盖更多种类的流量类型,对未知流量识别仍有待提高。未来的工作旨在建立一种更优化的在线识别系统,继续增强样本容量,增加更多种类的流量类型并支持更多的算法。
参考文献
[1] 梁伟,陈福才,李海涛.一种基于C4.5决策树的VoIP流量识别方法[J].计算机应用研究,2012,29(9):3418-3421.
[2] MOORE A,ZUEV D,CROGAN M.Discriminators for use in flow-based classification[M].Queen Mary and Westfield College,Department of Computer Science,2005.
[3] OKABE T,KITAMURA T,SHIZUNO T.Statistical traffic identification method based on flow-level behavior for fair VoIP service[C].VoIP Management and Security,2006.1stIEEE Workshop on.IEEE,2006:35-40.
[4] CALCHAND A O,DINH V T,BRANCH P,et al.Skype
[5] 鲁刚,张宏莉,叶麟.P2P流量识别[J].软件学报,2011,22(6):1281-1298.
[6] GU C,ZHANG S,SUN Y.Realtime encrypted traffic identification using machine learning[J].Journal of Software,2011,6(6):1009-1016.
[7] DI MAURO M,LONGO M.Skype traffic detection:A decision theory based tool[C].Security Technology(ICCST),2014International Carnahan Conference on.IEEE,2014:1-6.
[8] 鲁刚,张宏莉,叶麟.P2P流量识别[J].软件学报,2011,22(6):1281-1298.
[9] TCP statistic and analysis tool.[EB/OL].[2016-01-02].http://tstat.tlc.polito.it/.
[10] 李航. 统计学习方法[M].北京:清华大学出版社,2012.
[11] 石慧慧.基于Jpcap的网络流量采集监控系统研究与设计[D].南京:南京林业大学,2010.