BW-seq.pl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (C) 2001 by USC/ISI
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms are permitted
  7. # provided that the above copyright notice and this paragraph are
  8. # duplicated in all such forms and that any documentation, advertising
  9. # materials, and other materials related to such distribution and use
  10. # acknowledge that the software was developed by the University of
  11. # Southern California, Information Sciences Institute.  The name of the
  12. # University may not be used to endorse or promote products derived from
  13. # this software without specific prior written permission.
  14. #
  15. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  16. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18. #
  19. # An tcl script that extracts DATA/ACK packets from/to ISI domain, 
  20. # used by SAMAN ModelGen
  21. #
  22. # This work is supported by DARPA through SAMAN Project
  23. # (http://www.isi.edu/saman/), administered by the Space and Naval
  24. # Warfare System Center San Diego under Contract No. N66001-00-C-8066
  25. #
  26. sub usage {
  27.         print STDERR <<END;
  28. usage: $0 [-s DomainPrefix] [-p Port] 
  29. Options:
  30.     -s string  specify IP prefix to distinguish Inbound from outbound
  31.                traffic (eg. 192.1)
  32.     -p string  specify the port number
  33. END
  34. exit 1;
  35. }
  36. BEGIN {
  37.      $dblibdir = "./";
  38. push(@INC, $dblibdir);
  39. }
  40. use DbGetopt;
  41. require "dblib.pl";
  42. my(@orig_argv) = @ARGV;
  43. &usage if ($#ARGV < 0);
  44. my($prog) = &progname;
  45. my($dbopts) = new DbGetopt("s:p:?", @ARGV);
  46. my($ch);
  47. while ($dbopts->getopt) {
  48.         $ch = $dbopts->opt;
  49.         if ($ch eq 's') {
  50.                 $prefix = $dbopts->optarg;
  51.         } elsif ($ch eq 'p') {
  52.                 $port = $dbopts->optarg;
  53.         } else {
  54.                 &usage;
  55.         };
  56. };
  57. ($ip1,$ip2,$ip3,$ip4,$m1,$m2,$m3,$m4) = split(/[./ ]/,$prefix);
  58. $ip3="";
  59. $ip4="";
  60. $m1="";
  61. $m2="";
  62. $m3="";
  63. $m4="";
  64. $isiPrefix=join(".",$ip1,$ip2,$port);
  65. #$isiPrefix=join(".",$prefix,$port);
  66. open(OUT,"> outbound.seq") || die("cannot open outbound.seqn");
  67. open(IN,"> inbound.seq") || die("cannot open inbound.seqn");
  68. open(OUTP,"> outbound.pkt.size") || die("cannot open outbound.pkt.sizen");
  69. open(INP,"> inbound.pkt.size") || die("cannot open inbound.pkt.sizen");
  70. while (<>) {
  71.         ($time1,$time2,$ip11,$ip12,$ip13,$ip14,$srcPort,$dummy1,$ip21,$ip22,$ip23,$ip24,$dstPort,$dummy2,$flag,$seqb,$seqe,$size,$size1) = split(/[.:() ]/,$_);
  72. #        ($time1,$time2,$dummy0,$ip11,$ip12,$ip13,$ip14,$srcPort,$dummy1,$ip21,$ip22,$ip23,$ip24,$dstPort,$dummy2,$flag,$seqb,$seqe,$size,$size1) = split(/[.:() ]/,$_);
  73. $sTime=join(".",$time1,$time2);
  74. # $dummy0="";
  75. $dummy1="";
  76. $dummy2="";
  77. $flag="";
  78. if ( ($seqe ne "ack") && ($seqb eq "")) {
  79.    $seqb=$seqe;
  80.    $seqe=$size;
  81.    $size=$size1;
  82. }
  83. $prefixc=join(".",$ip11,$ip12,$srcPort);
  84. $prefixs=join(".",$ip21,$ip22,$dstPort);
  85. $client=join(".",$ip11,$ip12,$ip13,$ip14,$srcPort);
  86. $server=join(".",$ip21,$ip22,$ip23,$ip24,$dstPort);
  87.         if ( $srcPort eq $port ) {
  88. $server=join(".",$ip11,$ip12,$ip13,$ip14,$srcPort);
  89.   $client=join(".",$ip21,$ip22,$ip23,$ip24,$dstPort);
  90.         }
  91.         #capture the packet size distribution
  92. if ( $seqe ne "ack" ) {
  93. if ( $prefixc eq $isiPrefix) {
  94. print OUTP "$client $server $sTime $sizen";
  95. } else {
  96. print INP "$client $server $sTime $sizen";
  97. }
  98. }
  99.         #capture 3 types of packaets
  100. # 1. data packet to the server
  101. # 2. data packet from the server
  102. # 3. ack packet to the server
  103.         #data packet from ISI
  104. if ( $prefixc eq $isiPrefix) {
  105. if ( $seqe ne "ack" ) {
  106. # if ( $size eq 1460 ) {
  107. if ( $size > 1400 ) {
  108. print OUT "$client $server $seqe $sTime datan"
  109. }
  110.                 }
  111. }
  112. #ACK packet to ISI
  113. if (($prefixs eq $isiPrefix) && ($seqe eq "ack")) {   
  114. print OUT "$client $server $size $sTime ackn"
  115. }
  116.         #data packet to ISI
  117.         if ( ($srcPort eq $port) && ($prefixc ne $isiPrefix)) {
  118. if ( $seqe ne "ack" ) {
  119. # if ( $size eq 1460 ) {
  120. if ( $size > 1400 ) {
  121. print IN "$client $server $sTime $seqen";
  122. }
  123.                 }
  124. }
  125. }
  126. close(OUT);
  127. close(IN);
  128. close(OUTP);
  129. close(INP);