有效
基于流量数据的实时网络节点重要性排序方法
原玉磊、时向泉、王宝生、赵锋、陶静、赵宝康
中国人民解放军国防科技大学
摘要
本发明公开了一种基于流量数据的实时网络节点重要性排序方法,目的是为重点防护在流量数据上具有中心性的节点提供技术支撑。技术方案是利用实时采集的网络报文,构建网络节点间的数据流,得到网络流数据链表和数据流数据链表;利用网络节点间的数据流,动态构建网络的邻接矩阵,使用网络流数据大小对邻接矩阵赋权,通过该邻接矩阵所体现的流量数据中心性计算节点重要性,并根据节点重要性对节点排序。采用本发明可以准确得到基于流量数据的网络节点重要性及其排序。
1.一种基于流量数据的实时网络节点重要性排序方法,其特征在于包括以下步骤:第一步,利用网络报文采集方法采集并存储目标网络中传输的以太网报文,存储的数据包括报文内容和采集报文的时间,将报文内容和采集报文的时间存储为网络报文文件;第二步,根据网络报文文件建立网络流数据链表netflow_list,netflow_list中元素结构为网络流数据结构netflow_struct;netflow_struct包括7个域,分别为网络流的时间标签即ntime,源IP地址即sip,目的IP地址即dip,源端口号即sport,目的端口号即dport,协议号即proto,网络流的数据长度即length;方法为:2.1根据网络报文文件构建目标网络的网络流数据:根据网络报文的采集时间、源IP地址、目的IP地址、源端口号、目的端口号、协议号数据,将属于同一个网络流的报文源数据组织在一起,方法是:2.1.1初始化网络流数据链表netflow_list为空;2.1.2从网络报文文件读取一条报文数据,令该条报文数据的采集时间为pkg_time,报文内容为pkg;2.1.3从报文内容pkg中获取源IP地址pkg_sip、目的IP地址pkg_dip、源端口号pkg_sport、目的端口号pkg_dport、协议号pkg_proto以及报文长度pkg_len;2.1.4判断pkg是否属于netflow_list中的某个元素,根据判定结果进行以下步骤:2.1.4.1如果报文pkg的源IP地址与netflow_list中某个元素Y的源IP地址相同且目的IP地址与元素Y的目的IP地址相同,或者报文pkg的源IP地址与元素Y的目的IP地址相同且目的IP地址与元素Y的源IP地址相同,转步骤2.1.4.2,否则说明报文pkg属于新的网络流,转步骤2.1.5;2.1.4.2如果报文pkg的源端口号与netflow_list中元素Y的源端口相同且目的端口与元素Y的目的端口相同,或者报文pkg的源端口与元素Y的目的端口相同且目的端口与元素Y的源端口号相同,转步骤2.1.4.3,否则转步骤2.1.5;2.1.4.3如果报文pkg的采集时间与元素Y的时间标签之差在阈值m内,0<m<200毫秒,则报文pkg属于元素Y所代表的网络流,转步骤2.1.4.4,否则转步骤2.1.5;2.1.4.4更新元素Y的网络流的数据长度,令Y->length=Y->length+pkg_len,Y->length表示元素Y的length,转步骤2.1.6;“A->a”表示A的域a,A是包含多个域的数据结构,a是A中的任意一个域;2.1.5新建网络流数据链表元素netflow_pkg,令:netflow_pkg->ntime=pkg_time;netflow_pkg->sip=pkg_sip;netflow_pkg->dip=pkg_dip;netflow_pkg->sport=pkg_sport;netflow_pkg->dport=pkg_dport;netflow_pkg->proto=pkg_proto;netflow_pkg->length=pkg_len;将netflow_pkg加入至netflow_list,转步骤2.1.6;2.1.6判断网络报文文件中是否还有报文数据,如果有,转步骤2.1.2,否则转2.2;2.2根据步骤2.1得到的网络流数据链表netflow_list构建数据流数据链表dataflow_list,dataflow_list中元素的数据结构为数据流数据结构,命名为dataflow_struct;数据流数据结构包括3个域,分别为数据流一端的IP地址即ip1,数据流另一端的IP地址即ip2,数据流大小即size;方法是:2.2.1初始化数据流数据链表dataflow_list为空;2.2.2获取网络流数据链表netflow_list的元素总数NN,定义变量i=1;2.2.3从netflow_list中获取第i个元素i_netlfow;2.2.4判断i_netflow是否属于数据流数据链表dataflow_list中的某个数据流,具体步骤如下:2.2.4.1如果i_netflow的源IP地址sip与数据流链表中某个元素X的ip1相同且目的IP地址与元素X的ip2相同,或者i_netflow的源IP地址与元素X的ip2相同且目的IP地址与元素X的ip1相同,转步骤2.2.4.2,否则说明i_netflow属于新的数据流,转步骤2.2.5;2.2.4.2更新dataflow_list中的X元素,令X->size=X->size+i_netflow->length,转步骤2.2.6;2.2.5新建数据流数据链表元素dataflow_nf,令:dataflow_nf->ip1=i_netflow->sip;dataflow_nf->ip2=i_netflow->dip;dataflow_nf->size=i_netflow->length;将数据流dataflow_nf加入到数据流数据链表dataflow_list,转步骤2.2.6;2.2.6令i=i+1,如果i小于等于NN,转步骤2.2.3,否则转第三步;第三步,根据数据流数据链表dataflow_list建立数据流邻接矩阵,方法是:3.1建立节点IP地址与节点编号的对应关系,得到节点IP地址编号数据链表ipn_list,ipn_list元素为节点IP地址编号数据结构ipn_struct;节点IP地址编号数据结构包括3个域,分别为节点的IP地址即nip,节点IP地址的编号即ipnum,节点的重要性即w;3.2根据步骤3.1建立的ipn_list以及第二步建立的网络流数据链表netflow_list构建数据流邻接矩阵,方法是:3.2.1获取ipn_list的元素总数NI,获取dataflow_list的元素总数ND,定义循环变量j2=1;3.2.3定义维度为NI×NI的数据流邻接矩阵dataflow_mt,初始化dataflow_mt的各个元素为0,即令dataflow_mt的任意一个元素dataflow_mt[k1][k2]=0,其中1≤k1≤NI;1≤k2≤NI,且k1和k2均为正整数;3.2.4获取数据流数据链表dataflow_list的第j2个元素j2_dataflow;3.2.5在节点IP地址编号数据链表ipn_list中查找IP地址nip与j2_dataflow的一端IP地址ip1相同的元素,令此元素为ipn_j21,令j21=ipn_j21->ipnum;3.2.6在节点IP地址编号数据链表ipn_list中查找IP地址nip与j2_dataflow的另一端IP地址ip2相同的元素,令此元素为ipn_j22,令j22=ipn_j22->ipnum;3.2.7用数据流中的数据大小给数据流邻接矩阵赋值,即令dataflow_mt[j21][j22]=dataflow_j2->size;dataflow_mt[j22][j21]=dataflow_j2->size;3.2.8令j2=j2+1,如果j2≤ND,转步骤3.2.4;否则转第四步;第四步,根据数据流邻接矩阵dataflow_mt计算节点重要性,并根据重要性对节点排序,方法是:4.1定义目标网络NI个节点的强度向量B,B的长度为NI,初始化向量B的各个元素为0,即令B[k1]=0,1≤k1≤NI,且k1为正整数;4.2计算NI个节点的强度值,方法是:4.2.1定义循环变量k1,令k1=1;4.2.2定义循环变量k2,令k2=1;4.2.2令B[k1]=B[k1]+dataflow_mt[k1][k2];4.2.3令k2=k2+1,如果k2≤NI,转步骤4.2.2;否则转步骤4.2.4;4.2.4令k1=k1+1,如果k1≤NI,转步骤4.2.2;否则转步骤4.3;4.3计算各个节点的加权度中心性,方法是:4.3.1定义目标网络NI个节点的度中心性向量W,W的长度为NI,初始化向量W的各个元素为0,即令W[i1]=0,1≤i1≤NI,且i1为正整数;4.3.2定义目标网络所有节点强度总和BCOUNT=0,定义循环变量i1=0;4.3.3计算BCOUNT=BCOUNT+B[i1];4.3.4令i1=i1+1,如果i1≤NI,转步骤4.3.3;否则转步骤4.3.5;4.3.5定义循环变量i2=1;4.3.6计算W[i2]=B[i2]/BCOUNT;4.3.7令i2=i2+1,如果i2≤NI,转步骤4.3.6;否则转步骤4.4;4.4根据步骤4.3计算的W,得到目标网络中各个节点的重要性排序值,具体步骤如下:4.4.1根据W为ipn_list赋值;4.4.2按照从大到小对度中心性向量W中的各个元素排序,得到排序后的度中心性向量W’;4.4.3计算网络中所有IP地址对应节点的重要性,具体步骤如下:4.4.3.1获取IP地址编号数据链表ipn_list中的元素总数NI;4.4.3.2定义循环变量i5=1,i6=1;4.4.3.3获取ipn_list的第i5个元素i5_ipn;如果i5_ipn->w=W’[i6],说明IP为i5_ipn->nip的节点在网络中的重要性序号为i6,转步骤4.4.3.5,否则转步骤4.4.3.4;4.4.3.4令i6=i6+1,如果i6>NI,转步骤4.4.3.5,否则转步骤4.4.3.3;4.4.3.5令i5=i5+1,如果i5>NI,转第五步;否则转步骤4.4.3.3;第五步,结束。
2.如权利要求1所述的基于流量数据的实时网络节点重要性排序方法,其特征在于第一步所述网络报文采集方法是在目标网络的交换机或者路由器上连接网络分流设备,由网络分流设备采集以太网报文。
3.如权利要求1所述的基于流量数据的实时网络节点重要性排序方法,其特征在于2.1.4.3步所述m为100毫秒。
4.如权利要求1所述的基于流量数据的实时网络节点重要性排序方法,其特征在于3.1步所述建立节点IP地址与节点编号的对应关系,得到节点IP地址编号数据链表ipn_list的方法是:3.1.1初始化节点IP地址编号数据链表ipn_list为空,为空时ipn_list的元素总数NI为0;3.1.2获取数据流数据链表dataflow_list的元素总数ND,定义循环遍历变量j=1;3.1.3从dataflow_list中获取第j个元素j_dataflow;3.1.4获取节点IP地址编号数据链表ipn_list的元素总数NI,定义循环变量j1=1;如果NI=0,转步骤3.1.7,否则转步骤3.1.5;3.1.5获取ipn_list的第j1个元素,令为j1_ipn;如果j1_ipn->nip=j_dataflow->sip,说明j_dataflow所代表的网络流的sip已经被j1_ipn编号,转步骤3.1.8;否则说明j_dataflow所代表的网络流的sip没有被j1_ipn编号,转步骤3.1.6;3.1.6令j1=j1+1,如果j1小于等于NI,转步骤3.1.5;否则转步骤3.1.7;3.1.7新建节点IP地址编号数据链表ipn_list的元素ipn_js,令:ipn_js->nip=j_dataflow->sip;ipn_js->ipnum=NI;ipn_js->w=0;将ipn_js加入到ipn_list中,令NI=NI+1,转步骤3.1.8;3.1.8令j1=1;3.1.9获取ipn_list的第j1个元素,令为j1_ipn;如果j1_ipn->nip=j_dataflow->dip,说明j_dataflow所代表的网络流的dip已经被j1_ipn编号,转步骤3.2;否则说明j_dataflow所代表的网络流的dip没有被j1_ipn编号,转步骤3.1.10;3.1.10令j1=j1+1,如果j1≤NI,转步骤3.1.9;否则转步骤3.1.11;3.1.11新建节点IP地址编号数据链表ipn_list的元素ipn_jd,令:ipn_jd->nip=j_dataflow->dip;ipn_jd->ipnum=NI;ipn_js->w=0;将ipn_jd加入到ipn_list中;3.1.12令j=j+1,如果j≤ND,转步骤3.1.3,否则结束。
5.如权利要求1所述的基于流量数据的实时网络节点重要性排序方法,其特征在于4.4.1步所述根据W为ipn_list赋值的方法是:4.4.1.1定义循环变量i3=1,i4=1;4.4.1.2获取ipn_list的第i4个元素i4_ipn,如果i4_ipn->ipnum=i3,转步骤4.4.1.4,否则转步骤4.4.1.3;4.4.1.3令i4=i4+1,如果i4>NI,转步骤4.4.1.5,否则转步骤4.4.1.2;4.4.1.4令i4_ipn->w=W[i3];4.4.1.5令i3=i3+1,如果i3>NI,结束;否则转步骤4.4.1.2。



