dosdbell.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. //This file outputs a ns file for a dumbell network to be used for
  2. //DDOS experiments.
  3. /*the input file is a script file which is read by the program to get
  4. the parameters of the network.
  5. A typical file example
  6. d (diameter of the network) H (hurtz parameter)  
  7. n1 (no of incoming TCP nodes) rate (rate) 
  8. n2 (no. of DDOS attackers in the subtree) master (0/1) rate (rate)
  9. */
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12. #include "dosdbell.h"
  13. void set_Topology(FILE *filer);
  14. void TCL_Write_Initial(FILE *);
  15. void TCL_Write_Nodes(FILE *);
  16. void TCL_Write_Connections(FILE*);
  17. void TCL_Write_Agents(FILE *);
  18. void TCL_Write_DDOS_Agent(FILE*);
  19. void TCL_Write_Final(FILE*);
  20. struct Topology topo;
  21. int diameter;
  22. double TCP_start_time;
  23. double DDOS_start_time;
  24. double finish_time;
  25. double bw;
  26. int pack_size;
  27. float bn_delay;
  28. float bn_bw ; 
  29. main(int argc, char **argv){
  30.   FILE *filer;
  31.  
  32.   if(argc !=3){
  33.     printf("USAGE: %s parameter_filename tcloutput_filenamen",argv[0]);
  34.     exit(0);
  35.   }
  36.   else{
  37.     filer = fopen(argv[1],"r");
  38.     set_Topology(filer);
  39.     fclose(filer);
  40.     filer = fopen(argv[2],"w");
  41.     TCL_Write_Initial(filer);
  42.     TCL_Write_Nodes(filer);
  43.     TCL_Write_Connections(filer);
  44.     TCL_Write_Agents(filer);
  45.     TCL_Write_DDOS_Agent(filer);
  46.     TCL_Write_Final(filer);
  47.     fclose(filer);
  48.   }  
  49. }
  50.   
  51. void set_Topology(FILE *filer){
  52.   double perT, perFTP, perCBR, perV;
  53.   int i;
  54.   double H;
  55.   double rnd;
  56.   int attackNo,master;
  57.   double DDOSRate;
  58.   double hop;  
  59.   fscanf(filer,"%d %f %fn",&diameter,&bn_bw,&bn_delay);
  60.   fscanf(filer,"%d %lf %lfn",&topo.TCPNodes.NoNodes,&bw,&TCP_start_time);  
  61.   topo.TCPNodes.TCPNode = (struct TCP_Node_Info *)malloc(topo.TCPNodes.NoNodes*sizeof(struct TCP_Node_Info));
  62.   for(i=0;i<topo.TCPNodes.NoNodes;i++){
  63.     
  64.     /* Based on the topology, get the number of hops from the source to destination.
  65.        Since a dumbbell has a minimum of three hops, the number of hops returned 
  66.        should be greater than 3 
  67.     */ 
  68.     do{
  69.       topo.TCPNodes.TCPNode[i].delayFrom = (double) Inet_default_no_hops(diameter);
  70.     }while(topo.TCPNodes.TCPNode[i].delayFrom<=3);
  71.     /* Calculate the delay in for both the links */
  72.     topo.TCPNodes.TCPNode[i].delayTo = ceil(drand48()*(topo.TCPNodes.TCPNode[i].delayFrom-2));
  73.     topo.TCPNodes.TCPNode[i].delayFrom -= topo.TCPNodes.TCPNode[i].delayTo;
  74.     
  75.     // Maximum delay between the start of all sources 
  76.     rnd = ((double)(drand48()*TCP_start_time));
  77.     topo.TCPNodes.TCPNode[i].startTime = rnd;
  78.   }
  79.   fscanf(filer,"%d %lf %d %d %lfn",&topo.CBRTraffic.NoAttackers,&topo.CBRTraffic.DDOSRate,&pack_size,&master,&DDOS_start_time); 
  80.   CBRTrafficInet(diameter,topo.CBRTraffic.NoAttackers, master, topo.CBRTraffic.DDOSRate, &topo.CBRTraffic.DDOSTraffic);
  81.   if(master==0)
  82.     topo.CBRTraffic.master = NoMaster;
  83.   else
  84.     topo.CBRTraffic.master = Master;
  85.   topo.CBRTraffic.MaxTime = topo.CBRTraffic.DDOSTraffic.Events[topo.CBRTraffic.DDOSTraffic.NoEvents-1].delay;
  86.   fscanf(filer,"%lfn",&finish_time);
  87.   printf("Topology Generated Using:n Diameter=%d BottleNeck: BW=%.3fMbps Delay=%.3fmsn 
  88. Background Traffic: TCP Nodes=%d BW=%.3lfMbps Starttime=%.1lfsn 
  89. Dos Traffic       : Attacker= %d BW=%.3lfMbps Starttime=%.1lfsn 
  90. PacketSize=%dB  Master = %d  Finishtime = %.1lfsn", 
  91.  diameter,bn_bw,bn_delay,topo.TCPNodes.NoNodes,bw,TCP_start_time, 
  92.  topo.CBRTraffic.NoAttackers, 
  93.          topo.CBRTraffic.DDOSRate, DDOS_start_time,pack_size,master,finish_time);
  94. }
  95. void TCL_Write_Initial(FILE *filew){
  96.   fprintf(filew, "set ns [new Simulator]nnn");
  97.   /* Incase we need nam support */
  98.   //fprintf(filew, "set nf [open out.nam w]n");
  99.   //fprintf(filew, "$ns namtrace-all $nfnnn");
  100.   //fprintf(filew, "proc finish {} { n  global ns nf n  $ns flush-trace n  close $nf n  exec nam out.nam & n  exit 0 n  }nnn");
  101.   /***till here***/
  102.   fprintf(filew, "proc finish {} {n  exit 0 n  }nnn");
  103. }
  104. void TCL_Write_Nodes(FILE *filew){
  105.   fprintf(filew, "for {set i 0} {$i < %d} {incr i} { n  set TCPSend($i) [$ns node] n  }nn",topo.TCPNodes.NoNodes);
  106.   fprintf(filew, "for {set i 0} {$i < %d} {incr i} { n  set TCPRecv($i) [$ns node] n  }nn",topo.TCPNodes.NoNodes);
  107.   
  108.    fprintf(filew,"set BotLeft [$ns node] n");
  109.    fprintf(filew,"set BotRight [$ns node] n");
  110.    fprintf(filew,"set DDOSNode [$ns node] n");
  111.    fprintf(filew,"set Victim [$ns node] n");
  112.    fprintf(filew,"nn");
  113. }
  114. void TCL_Write_Connections(FILE *filew){
  115.   int i;
  116.   for(i=0;i<topo.TCPNodes.NoNodes;i++){
  117.     fprintf(filew,"$ns duplex-link $TCPSend(%d) $BotLeft %.3lfMb %.3lfms DropTailn",i,bw,topo.TCPNodes.TCPNode[i].delayTo*bn_delay); 
  118.     fprintf(filew,"$ns duplex-link $TCPRecv(%d) $BotRight %.3lfMb %.3lfms DropTailn",i,bw,topo.TCPNodes.TCPNode[i].delayFrom*bn_delay); 
  119.   }
  120.    fprintf(filew,"nn");
  121.    fprintf(filew,"$ns duplex-link $BotLeft $BotRight %.3lfMb %.3lfms DropTailn",bn_bw,bn_delay); 
  122.    fprintf(filew,"$ns duplex-link $BotLeft $DDOSNode %.3lfMb %.3lfms DropTailn",10*bn_bw,bn_delay);
  123.    fprintf(filew,"$ns duplex-link $BotRight $Victim %.3lfMb %.3lfms DropTailn",10*bn_bw,bn_delay);
  124.    fprintf(filew,"nn");
  125. }
  126. void TCL_Write_Agents(FILE *filew){
  127.   int i;
  128.   double time;
  129.   fprintf(filew, "for {set i 0} {$i < %d} {incr i} { n    
  130. set TCPSendAg($i) [new Agent/TCP] n  
  131. $ns attach-agent $TCPSend($i) $TCPSendAg($i) n     
  132. set TCPSendTraffic($i) [new Application/FTP] n     
  133. $TCPSendTraffic($i) attach-agent $TCPSendAg($i) n   
  134. set TCPRecvAg($i) [new Agent/TCPSink] n    
  135. $ns attach-agent $TCPRecv($i) $TCPRecvAg($i) n   
  136. $ns connect $TCPSendAg($i) $TCPRecvAg($i) n  
  137. $TCPSendAg($i) set class_ 1 n}nn",topo.TCPNodes.NoNodes);
  138.   fprintf(filew,"nnn");
  139.   for(i=0;i<topo.TCPNodes.NoNodes;i++){
  140.     fprintf(filew,"$ns at %lf "$TCPSendTraffic(%d) start"n",topo.TCPNodes.TCPNode[i].startTime,i);
  141.   }
  142.   fprintf(filew,"nn");
  143. }
  144. void TCL_Write_DDOS_Agent(FILE* filew){
  145.   int i;
  146.   fprintf(filew,"nn");
  147.   fprintf(filew,"set DDOSUDP [new Agent/UDP]n");
  148.   fprintf(filew,"$ns attach-agent $DDOSNode $DDOSUDPn");
  149.   fprintf(filew,"set DDOSTraffic [new Application/Traffic/CBR]n");
  150.   fprintf(filew,"$DDOSTraffic attach-agent $DDOSUDPn");
  151.   fprintf(filew,"set VictimAgent [new Agent/Null]n");
  152.   fprintf(filew,"$ns attach-agent $Victim $VictimAgentn");
  153.   fprintf(filew,"$ns connect $DDOSUDP $VictimAgentn");
  154.   fprintf(filew,"$DDOSUDP set class_ 2n");
  155.   fprintf(filew,"nnn");
  156.   DDOS_start_time*=1000;
  157.   fprintf(filew,"$ns at %lf "$DDOSTraffic set rate_ %lfMb "n",ceil(DDOS_start_time+topo.CBRTraffic.DDOSTraffic.Events[0].delay*bn_delay)/1000, 
  158.                                    topo.CBRTraffic.DDOSTraffic.Events[0].NetCBR);
  159.   fprintf(filew,"$ns at %lf "$DDOSTraffic set packet_size_ %d "n",
  160.                                    ceil(DDOS_start_time+topo.CBRTraffic.DDOSTraffic.Events[0].delay*bn_delay)/1000,pack_size);
  161.   fprintf(filew,"$ns at %lf "$DDOSTraffic start"n",ceil(DDOS_start_time+topo.CBRTraffic.DDOSTraffic.Events[0].delay*bn_delay)/1000);
  162.   for(i=1;i<topo.CBRTraffic.DDOSTraffic.NoEvents;i++){
  163.     fprintf(filew,"$ns at %lf "$DDOSTraffic set rate_ %lfMb"n",
  164.                                    ceil(DDOS_start_time+topo.CBRTraffic.DDOSTraffic.Events[i].delay*bn_delay)/1000, 
  165.                                    topo.CBRTraffic.DDOSTraffic.Events[i].NetCBR);
  166.   }
  167.   fprintf(filew,"nn");
  168. }
  169. void TCL_Write_Final(FILE *filew){
  170.   fprintf(filew,"nn");
  171.   fprintf(filew,"set outfile [open qtrace.tr w]n$ns trace-queue $BotLeft $BotRight $outfilennn");
  172.   fprintf(filew,"$ns at %lf "finish"n",finish_time);
  173.   fprintf(filew, "$ns runn");
  174. }