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

通讯编程

开发平台:

Visual C++

  1. proc Pre { tfile } { 
  2.     global timezero 
  3.     set f [open "|tcpdump -n -r $tfile src port 80 and tcp" r]
  4.     set line [gets $f]
  5.     catch "close $f"
  6.     set aslist [split $line " "]
  7.     set timezero [tcpdtimetosecs [lindex $aslist 0]]
  8. }
  9. proc max {arg1 arg2}  {
  10.     if { $arg1 > $arg2 } { return $arg1 }
  11.     return $arg2 
  12. }
  13. proc min {arg1 arg2}  {
  14.     if { $arg1 > $arg2 } { return $arg2 }
  15.     return $arg1 
  16. }
  17. proc tcpdtimetosecs tcpdtime  {
  18.     global timezero 
  19.     # convert time to seconds
  20.     set t [split $tcpdtime ":."]
  21.     regsub {^0*([0-9])} [lindex $t 0] {1} hours
  22.     regsub {^0*([0-9])} [lindex $t 1] {1} minutes
  23.     regsub {^0*([0-9])} [lindex $t 2] {1} seconds
  24.     set micsec [lindex $t 3]
  25.     append mtim "0." $micsec
  26.     set tim [expr 1.0*$hours*3600 + 1.0*$minutes*60 + 1.0*$seconds ]
  27.     set tim [expr $tim + 1.0*$mtim]
  28.     ##  check for time wrap
  29.     ##
  30.     if { $tim < $timezero } { set tim [expr $tim + 86400.0] }
  31.     return [expr $tim - $timezero]
  32. }
  33. proc outputPDF {cur_epoch incr tfile }  {
  34. set count 0
  35. set cur_time  0
  36. set tfileI [format "%s.sorted" $tfile]
  37. set tfileO [format "%s.pdf" $tfile]
  38. set fi [open $tfileI r ]
  39. set fo [open $tfileO w ]
  40. while {[gets $fi line] >= 0} {
  41. set cur_time [lindex $line 0]
  42. if {$cur_time > $cur_epoch} {
  43.    while {$cur_epoch < $cur_time} {
  44.      puts $fo "$cur_epoch   $count"
  45.      set cur_epoch [expr $cur_epoch + $incr]
  46.      set count 0
  47.    }
  48.    if {$cur_time <= $cur_epoch} {
  49.       set count 1
  50.    } else {
  51.       set count 0
  52.    }
  53. } else {
  54.    set count [expr $count + 1]
  55. }
  56. }
  57. puts $fo "$cur_epoch   $count"
  58. close $fo
  59. }
  60. proc outputCDF {tfile}  {
  61. set tfileI [format "%s.pdf" $tfile]
  62. set tfileO [format "%s.cdf" $tfile]
  63. set fi [open $tfileI r ]
  64. set fo [open $tfileO w ]
  65. set totalCnt 0
  66. set cumCnt 0
  67. while {[gets $fi line] >= 0} {
  68.    set cnt [lindex $line 1]
  69.    set totalCnt [expr $totalCnt + $cnt]
  70. }
  71. close $fi
  72. set fi [open $tfileI r ]
  73. while {[gets $fi line] >= 0} {
  74.    set value [lindex $line 0]
  75.    set cnt [lindex $line 1]
  76.    set cumCnt [expr $cumCnt + $cnt]
  77.    puts $fo "$value $cumCnt [expr ($cumCnt * 1.0) / ($totalCnt * 1.0)]"
  78. }
  79. }