《Web安全之机器学习入门》笔记:第七章 7.6 朴素贝叶斯检测对Apache的DDoS攻击

一、DDoS攻击

        拒绝服务攻击是 Denial of service的简称,即拒绝服务,任何对服务的干涉,使得其可用性降低或者失去可用性均称为拒绝服务。DDos是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。

        单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。

《Web安全之机器学习入门》笔记:第七章 7.6 朴素贝叶斯检测对Apache的DDoS攻击

        分布式拒绝服务(Distributed Denial of Service,简称DDoS)将多台计算机联合起来作为攻击平台,通过远程连接利用恶意程序,对一个或多个目标发起DDoS攻击,消耗目标服务器性能或网络带宽,从而造成服务器无法正常地提供服务。

二、数据集

        数据集选择KDD99,构造数据集从中提取出满足http协议的数据,对于类型为apache2的标记为1,对于类型为normal的标记为0。

def load_kdd99(filename):
    x=[]
    with open(filename) as f:
        for line in f:
            line=line.strip('\n')
            line=line.split(',')
            x.append(line)
    return x

def get_apache2andNormal(x):
    v=[]
    w=[]
    y=[]
    for x1 in x:
        if ( x1[41] in ['apache2.','normal.'] ) and ( x1[2] == 'http' ):
            if x1[41] == 'apache2.':
                y.append(1)
            else:
                y.append(0)

三、特征处理

        其中与DDoS相关特征如下所示

        (1)网络连接基本特征:包括duration, src_bytes, dst_bytes, land, wrong_fragment,urgent

       (2)基于时间的网络流量统计特征:包括count, srv_count, serror_rate, srv_serror_rate, rerror_rate, srv_rerror_rate, same_srv_rate, deff_srv_rate, rv_diff_host_rate

   (3)基于主机的网络流量统计:包括dst_host_count, dst_houst_srv_count, dst_host_same_srv_rate, dst_host_diff_srv_rate, dst_host_same_src_port_rate, dst_host_srv_diff_host_rate, dst_host_serror_rate, dst_host_srv_serror_rate, dst_host_rerror_rate, dst_host_srv_rerror_rate

        如下所示,代码选取第0,4-8,22-30,31-40为特征4

def get_apache2andNormal(x):
    v=[]
    w=[]
    y=[]
    for x1 in x:
        if ( x1[41] in ['apache2.','normal.'] ) and ( x1[2] == 'http' ):
            if x1[41] == 'apache2.':
                y.append(1)
            else:
                y.append(0)

            x1 = [x1[0]] + x1[4:8]+x1[22:30]+x1[31:40]
            #x1 = x1[4:8]
            v.append(x1)

    for x1 in v :
        v1=[]
        for x2 in x1:
            v1.append(float(x2))
        w.append(v1)
    return w,y

 四、完整代码

        基于python3的代码如下所示:

# -*- coding:utf-8 -*-

from sklearn import model_selection
from sklearn.naive_bayes import GaussianNB


def load_kdd99(filename):
    x=[]
    with open(filename) as f:
        for line in f:
            line=line.strip('\n')
            line=line.split(',')
            x.append(line)
    return x

def get_apache2andNormal(x):
    v=[]
    w=[]
    y=[]
    for x1 in x:
        if ( x1[41] in ['apache2.','normal.'] ) and ( x1[2] == 'http' ):
            if x1[41] == 'apache2.':
                y.append(1)
            else:
                y.append(0)

            x1 = [x1[0]] + x1[4:8]+x1[22:30]+x1[31:40]
            #x1 = x1[4:8]
            v.append(x1)

    for x1 in v :
        v1=[]
        for x2 in x1:
            v1.append(float(x2))
        w.append(v1)
    return w,y

if __name__ == '__main__':
    v=load_kdd99("../data/kddcup99/corrected")
    x,y=get_apache2andNormal(v)
    clf = GaussianNB()
    print(model_selection.cross_val_score(clf, x, y, n_jobs=1, cv=10))




五、运行结果

[0.99925094 0.99875156 0.99950062 0.99950062 0.996004   0.9995005
 0.997003   0.98975768 0.99975019 0.99925056]

 

上一篇:python文件操作


下一篇:题目翻译(18)