攻击数据集的建立、采样以及SVM特征值计算

1. NS2环境下,在不同的实验配置下进行网络仿真。testdata*.tcl为一系列配置文件。由于是通过脚本文件进行批处理,所以如果运行单个配置文件有新文件(跟踪文件、日志文件等)生成,最好不要使用默认文件名,而应该在配置文件中为新产生的文件定义能够相互区别的文件名。

   for i in testdata*.tcl

   do

   ns $i

   done

   生成一批跟踪文件testdata*.tr。

2. Cygwin环境下,从跟踪文件中提取包过程。

   for i in testdata*.tr

   do

   gawk -f extractor.awk $i > $i.sample

   done

   生成一批包序列文件testdata*.tr.sample。其中extractor.awk文件内容如下:

   BEGIN {
   time_start = 0;
   time_interval = 0.01;
   i = 1;
   temp = 0;
   time_thresh = 0.01;
   }
   {
   action = $1;
   time_now = $2;
   node_start = $3;
   node_end = $4;
  
   if(time_now > time_thresh)
   {
      N[i] = temp;
      temp = 0;
      i++;
      time_thresh = i*time_interval;
   }

   if(node_start == 2 && node_end == 4 && action == "+" && time_now <= time_thresh)
      temp++;
   }
   END {
   if(temp>0)
   {  
      N[i] = temp;
      temp = 0;
      i++;
   }
   for(j=1;j<i;j++)
      printf("%f/n",N[j]);
   }

3. Matlab环境下,对包过程进行采样。每一个包序列文件采样2组,采样长度为1000(10s)。

   tagdata = dir('*.sample');

   len = length(tagdata);

   for i=1:len

      SampleMatrix = load(tagdata(i).name);

      MatrixSampled(:,2*i-1) = SampleMatrix(2501:3500);

      MatrixSampled(:,2*i) = SampleMatrix(3501:4500);

   end

4. Matlab环境下,根据采样数据计算SVM特征值,并且加上类标。

   SVMatrix = SVMdata(MatrixSampled,no,class);

   注意:在计算CUSUM统计值时会出现“初始异常”现象,以前是通过将初始段全部取0来校正,但在采样长度较小的情况下异常CUSUM统计值的个数占了大部分,被校正为0后可用的正常CUSUM值所剩无几,无法满足计算特征值的要求。改进的校正方法是,在采样得到的数据前加一段平稳数据(确保“初始异常”现象能在该平稳数据段结束),对整个数据段进行CUSUM处理后取后半部分(所取得数据段长度等于采样长度)。上述命令行中的参数no即为校正数据段。SVMdata函数定义如下:

   function SVMatrix = SVMdata(MatrixSampled,no,class)
   Lnum = size(MatrixSampled,1);    %行数
   Cnum = size(MatrixSampled,2);    %列数

   if nargin == 1,           %无需校正
       fixed = MatrixSampled;
   elseif nargin<4,
       Nolen = length(no);              %校正序列的元素个数
       for i=1:Cnum                        %校正过程
           for j=1:(Lnum+Nolen)
               if j<=Nolen
                   fixed(j,i) = no(j);
               else
                   fixed(j,i) = MatrixSampled(j-Nolen,i);
               end
           end
       end
   else
       error('the number of arguments is wrong!');
   end

   for i=1:Cnum

       SVMatrix(i,1) = class;
       SVMatrix(i,2) = mean(MatrixSampled(:,i));   %采样窗口内到达包个数的平均值
       Cfixed = cusum(fixed(:,i));
       Clen = length(Cfixed);
       Cfix = Cfixed((Clen-Lnum+1):Clen);          %校正后的CUSUM统计量
       SVMatrix(i,3) = mean(Cfix);
       [f,psdpercent] = PowerSD(Cfix,100,1024);
       temp = 0;
       j = 1;
       while f(j)<=10
           temp = temp+psdpercent(j);
           j = j+1;
       end
       SVMatrix(i,4) = temp;                       %低频带(0-10Hz)功率所占的比例
       temp1 = 0;
       temp2 = 0;
       for j=1:length(f)
           if psdpercent(j)>temp1
               temp1 = psdpercent(j);
               temp2 = j;
           end
       end
       SVMatrix(i,5) = f(temp2);                   %最高的功率比例所对应的频率值
       SVMatrix(i,6) = temp1;                      %最高的功率比例
   end
   end
  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值