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

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/tclsh
  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 find and pair SYN and SYN-ACK packets for each tcp 
  20. # connection, 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. if { $argc != 2} {
  26.     puts "usage: pair.tcl <tcpdump ASCII file> <prefix>"
  27.     exit
  28. } else {
  29.    set arg [split $argv " " ]
  30.    set tfile [lindex $arg 0]
  31.    set prefix [lindex $arg 1]
  32. }
  33. set arg1 [split $prefix "." ]
  34. set netPrefix [format "%s.%s" [lindex $arg1 0] [lindex $arg1 1]]
  35. set prevClnt ""
  36. set prevSvr ""
  37. set fi [open $tfile r ]
  38. while {[gets $fi line] >= 0} {
  39.    set client [lindex $line 0]
  40.    set server [lindex $line 1]
  41.    set time [lindex $line 2]
  42.    set c [split $client ".:" ]
  43.    set s [split $server ".:" ]
  44.    set Sequence [split [lindex $line 3] ":"]
  45.    set seq [lindex $Sequence 0]
  46.    set Client [format "%s.%s.%s.%s.%s" [lindex $c 0] [lindex $c 1] [lindex $c 2] [lindex $c 3] [lindex $c 4]]
  47.    set Server [format "%s.%s.%s.%s.%s" [lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3] [lindex $s 4]]
  48.    set Client1 [format "%s.%s.%s.%s" [lindex $c 0] [lindex $c 1] [lindex $c 2] [lindex $c 3]]
  49.    set Server1 [format "%s.%s.%s.%s" [lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3]]
  50.    set ClientD [format "%s.%s" [lindex $c 0] [lindex $c 1]]
  51.    set ack [lindex $line 4]
  52.    if { [lindex $line 5] != "win"} {
  53.     set seq1 [expr [lindex $line 5] - 1]
  54.     if { $Client == $prevClnt} {
  55.      if { $Server == $prevSvr} {
  56.       if { $ack == "ack"} {
  57.        if { $ClientD == $netPrefix} {
  58.         if { $seq1 == $prevSeq} {
  59.          puts "$Client1 $Server1 [expr $time - $prevTime]"
  60.         }
  61.        }
  62.       }
  63.      }
  64.     }
  65.    }
  66.    set prev $line
  67.    set prevClnt $Client
  68.    set prevSvr $Server
  69.    set prevSeq $seq
  70.    set prevTime $time 
  71. }
  72. close $fi