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

通讯编程

开发平台:

Visual C++

  1. #! /bin/sh
  2. #!/usr/bin/tclsh
  3. #
  4. # Copyright (C) 2001 by USC/ISI
  5. # All rights reserved.
  6. #
  7. # Redistribution and use in source and binary forms are permitted
  8. # provided that the above copyright notice and this paragraph are
  9. # duplicated in all such forms and that any documentation, advertising
  10. # materials, and other materials related to such distribution and use
  11. # acknowledge that the software was developed by the University of
  12. # Southern California, Information Sciences Institute.  The name of the
  13. # University may not be used to endorse or promote products derived from
  14. # this software without specific prior written permission.
  15. #
  16. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  17. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  18. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19. #
  20. # ModelGen is a set of scripts that take tcpdump trace as input and
  21. # output a set of CDF files that model Web traffic. It also outputs
  22. # a time series of traffic size (in 1ms block) for further wavelet 
  23. # scaling analysis
  24. #
  25. #             usage:
  26. #                  ./ModelGen <tcpdump trace> <threshold> <network prefix>
  27. #
  28. #                  <tcpdump trace> : tcpdump trace file generated using
  29. #                                    tcpdump -w option
  30. #                  <threshold>     : the threshold time value (in millisecond)
  31. #                                    that distinguishes idle periods in order 
  32. #                                    to infer user "think" times between 
  33. #                                    requests for new top-level pages.
  34. #                  <network prefix>: network prefix used to distinguish
  35. #                                    inbound vs. outbound traffic
  36. #
  37. #             example: ./ModelGen tracefile 1000 128.9
  38. #
  39. # Note that current it's only tested on Linux system
  40. #
  41. # This work is supported by DARPA through SAMAN Project
  42. # (http://www.isi.edu/saman/), administered by the Space and Naval
  43. # Warfare System Center San Diego under Contract No. N66001-00-C-8066
  44. #
  45. #
  46. #
  47. date
  48. echo "***  parsing tcpdump file  ***"
  49. echo "***  parsing .all  ***"
  50. ./tcpdump -n -tt -q -r $1  > $1.all
  51. date
  52. echo "***  parsing .www  ***"
  53. ./tcpdump -n -tt -r $1 tcp port 80 > $1.www
  54. #./tcpdump -n -tt -r $1 port ftp or port ftp-data > $1.ftp
  55. date
  56. echo "***  parsing .ftp  ***"
  57. ./tcpdump -n -tt -r $1 port ftp  > $1.ftp1
  58. cat $1.ftp1 | getFTPclient.pl  > $1.ftp2
  59. cat $1.all | getFTP.pl -r $1.ftp2 > $1.ftp
  60. #./tcpdump -q -n -tt -r $1 port ftp or port ftp-data > $1.ftps
  61. #./tcpdump -n -tt -r $1 port domain > $1.dns
  62. date
  63. echo "***  parsing .http-srv  ***"
  64. ./tcpdump -n -tt -r $1 tcp src port 80 > $1.http-srv
  65. date
  66. echo "***  analyze traffic mix  ***"
  67. #cat $1.all | io.pl -s $3  -w $1.all
  68. #cat $1.all.inbound | traffic-classify > $1.traffic.cnt.inbound
  69. #cat $1.all.outbound | traffic-classify > $1.traffic.cnt.outbound
  70. date
  71. echo "***  analyze flow statistics  ***"
  72. #awk -f flow.awk < $1.all.outbound > $1.all.outbound.flow
  73. #awk -f flow.awk < $1.all.inbound > $1.all.inbound.flow
  74. #sort -s -o $1.all.outbound.flow.sort -T /tmp $1.all.outbound.flow
  75. #sort -s -o $1.all.inbound.flow.sort -T /tmp $1.all.inbound.flow
  76. #cat $1.all.outbound.flow.sort | flow.pl -w $1.outbound.flow
  77. #cat $1.all.inbound.flow.sort | flow.pl -w $1.inbound.flow
  78. #sort -s -o $1.inbound.flow.start.sort $1.inbound.flow.start
  79. #sort -s -o $1.outbound.flow.start.sort $1.outbound.flow.start
  80. #awk -f arrive2inter.awk < $1.outbound.flow.start.sort > $1.outbound.flow.arrival
  81. #awk -f arrive2inter.awk < $1.inbound.flow.start.sort > $1.inbound.flow.arrival
  82. #dat2cdf -e 1024 -i 1024 -d 1024 -t $1.outbound.flow.size
  83. #dat2cdf -e 1024 -i 1024 -d 1024 -t $1.inbound.flow.size
  84. #dat2cdf -e 0 -i 1 -d 1 -t $1.outbound.flow.dur
  85. #dat2cdf -e 0 -i 1 -d 1 -t $1.inbound.flow.dur
  86. #dat2cdf -e 0 -i 0.001 -d 1 -t $1.outbound.flow.arrival
  87. #dat2cdf -e 0 -i 0.001 -d 1 -t $1.inbound.flow.arrival
  88. date
  89. echo "***  seperate Inbound and Outbound traffic  ***"
  90. echo "DNS"
  91. #io.tcl $1.dns
  92. date
  93. echo "WWW"
  94. #cat $1.www | io.www.pl -s $3  -w $1.www
  95. cat $1.http-srv | io.www.pl -s $3  -w $1.http-srv
  96. date
  97. echo "FTP"
  98. #cat $1.ftp | io.ftp.pl -s $3  -w $1.ftp
  99. #cat $1.ftps | io.ftp.pl -s $3  -w $1.ftps
  100. ##############################
  101. date
  102. /bin/rm -rf *.time-series
  103. /bin/rm -rf *connect.time*
  104. echo "***  Analyze Inbound traffic  ***"
  105. echo "run http_connect"
  106. sort -s -o $1.in.http-srv-sort +1 -2 +3 -4 +0 -1 -T /tmp $1.http-srv.inbound
  107. http_connect -r $1.in.http-srv-sort -w $1.in.http-srv.connect
  108. grep "ACT" $1.in.http-srv.connect > $1.in.http-srv.connect.time
  109. sort $1.in.http-srv.connect.time > $1.in.http-srv.connect.time.sort
  110. date
  111. echo "run http_active"
  112. sort -s -o $1.in.http-srv.connect.sort +1 -2 +0 -1 -T /tmp $1.in.http-srv.connect
  113. http_active -r $1.in.http-srv.connect.sort -w $1.in.http-srv.active -I $2
  114. date
  115. echo "compute CDF statistics"
  116. cat $1.in.http-srv.active.activity | outputCDF -e inbound
  117. date
  118. echo "compute time series (1ms block)"
  119. bw.tcl $1.http-srv.inbound
  120. cat $1.http-srv.inbound.bw | time-series.pl > $1.in.time-series
  121. ##############################
  122. date
  123. echo "***  Analyze Outbound traffic  ***"
  124. echo "run http_connect"
  125. sort -s -o $1.out.http-srv-sort +1 -2 +3 -4 +0 -1 -T /tmp $1.http-srv.outbound
  126. http_connect -r $1.out.http-srv-sort -w $1.out.http-srv.connect
  127. grep "ACT" $1.out.http-srv.connect > $1.out.http-srv.connect.time
  128. sort $1.out.http-srv.connect.time > $1.out.http-srv.connect.time.sort
  129. date
  130. echo "run http_active"
  131. sort -s -o $1.out.http-srv.connect.sort +1 -2 +0 -1 -T /tmp $1.out.http-srv.connect
  132. http_active -r $1.out.http-srv.connect.sort -w $1.out.http-srv.active -I $2
  133. date
  134. echo "compute CDF statistics"
  135. cat $1.out.http-srv.active.activity | outputCDF -e outbound
  136. date
  137. echo "compute time series (1ms block)"
  138. bw.tcl $1.http-srv.outbound
  139. cat $1.http-srv.outbound.bw | time-series.pl > $1.out.time-series
  140. ######################################
  141. echo "***  Delay and Bandwidth estimation  ***"
  142. echo "WWW traffic"
  143. date
  144. echo "output traffic between web servers and clients"
  145. cat $1.www | BW-seq.pl -s $3 -p 80
  146. sort inbound.seq -o inbound.seq.sorted
  147. sort outbound.seq -o outbound.seq.sorted
  148. date
  149. echo "search for DATA/ACK packets which have the same seqence number for outboun
  150. d traffic"
  151. cat outbound.seq.sorted | BW-pair.pl > $1.outbound.pair
  152. date
  153. echo "estimate the bandwidth for inbound/outbound traffic"
  154. cat $1.outbound.pair | BW.out.pl -w $1.www
  155. cat inbound.seq.sorted | BW.in.pl -w $1.www
  156. dat2cdf -e 0 -i 0.001 -d 1 -t $1.www.outbound.BW
  157. dat2cdf -e 0 -i 0.001 -d 1 -t $1.www.inbound.BW
  158. dat2cdf -e 0 -i 0.001 -d 1 -t $1.www.outbound.delay
  159. date
  160. echo "Locate SYN connection"
  161. cat $1.www | delay.pl -p 80 > $1.sync
  162. sort -s -o $1.sync.sorted -T /tmp $1.sync
  163. date
  164. echo "compute delay for each SYN connection pair between servers and clients"
  165. pair.tcl $1.sync.sorted >  $1.sync.delay
  166. sort -s -o $1.sync.delay.sorted -T /tmp $1.sync.delay
  167. awk -f delay.awk < $1.sync.delay.sorted > $1.www.inbound.delay
  168. dat2cdf -e 0 -i 0.001 -d 1 -t $1.www.inbound.delay
  169. ######################################
  170. echo "FTP traffic"
  171. date
  172. echo "output traffic between ftp servers and clients"
  173. cat $1.ftp | BW-seq.pl -s $3 -p 20
  174. sort inbound.seq -o inbound.seq.sorted
  175. sort outbound.seq -o outbound.seq.sorted
  176. date
  177. echo "search for DATA/ACK packets which have the same seqence number for outboun
  178. d traffic"
  179. cat outbound.seq.sorted | BW-pair.pl > $1.outbound.pair
  180. date
  181. echo "estimate the bandwidth for inbound/outbound traffic"
  182. cat $1.outbound.pair | BW.out.pl -w $1.ftp
  183. cat inbound.seq.sorted | BW.in.pl -w $1.ftp
  184. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.outbound.BW
  185. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.inbound.BW
  186. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.outbound.delay
  187. date
  188. echo "Locate SYN connection"
  189. cat $1.ftp | delay.pl -p 21 > $1.sync
  190. sort -s -o $1.sync.sorted -T /tmp $1.sync
  191. date
  192. echo "compute delay for each SYN connection pair between servers and clients"
  193. pair.tcl $1.sync.sorted >  $1.sync.delay
  194. sort -s -o $1.sync.delay.sorted -T /tmp $1.sync.delay
  195. awk -f delay.awk < $1.sync.delay.sorted > $1.ftp.inbound.delay
  196. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.inbound.delay
  197. ######################################
  198. echo "Output statistics for FTP traffic"
  199. date
  200. grep ".20 >" $1.ftps.outbound | awk -f ftp.awk | sort > $1.ftp.outbound.conn
  201. cat $1.ftp.outbound.conn | ftp.pl -w $1.ftp.outbound
  202. sort -o $1.ftp.outbound.sess.arrive.sort $1.ftp.outbound.sess.arrive
  203. grep ".20 >" $1.ftps.inbound | awk -f ftp.awk | sort > $1.ftp.inbound.conn
  204. cat $1.ftp.inbound.conn | ftp.pl -w $1.ftp.inbound
  205. sort -o $1.ftp.inbound.sess.arrive.sort $1.ftp.inbound.sess.arrive
  206. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.outbound.file.inter
  207. dat2cdf -e 0 -i 1000 -d 1000 -t $1.ftp.outbound.size
  208. dat2cdf -e 0 -i 1 -d 1 -t $1.ftp.outbound.fileno
  209. dat2cdf -e 0 -i 0.001 -d 1 -t $1.ftp.inbound.file.inter
  210. dat2cdf -e 0 -i 1000 -d 1000 -t $1.ftp.inbound.size
  211. dat2cdf -e 0 -i 1 -d 1 -t $1.ftp.inbound.fileno
  212. awk -f arrive2inter.awk < $1.ftp.outbound.sess.arrive.sort > $1.ftp.outbound.sess.inter
  213. dat2cdf -e 0 -i 0.01 -d 1 -t $1.ftp.outbound.sess.inter
  214. awk -f arrive2inter.awk < $1.ftp.inbound.sess.arrive.sort > $1.ftp.inbound.sess.inter
  215. dat2cdf -e 0 -i 0.01 -d 1 -t $1.ftp.inbound.sess.inter
  216. ######################################
  217. echo "Output TCP window size
  218. date
  219. echo "WWW"
  220. grep " S " $1.www.outbound | grep ".80 >" > $1.www.outbound.svr.win
  221. grep " S " $1.www.inbound | grep ".80 >" > $1.www.inbound.svr.win
  222. grep " S " $1.www.outbound | grep ".80:" > $1.www.outbound.clnt.win
  223. grep " S " $1.www.inbound | grep ".80:" > $1.www.inbound.clnt.win
  224. awk -f win.awk < $1.www.outbound.svr.win > $1.www.outbound.wins
  225. awk -f win.awk < $1.www.inbound.svr.win > $1.www.inbound.wins
  226. awk -f win.awk < $1.www.outbound.clnt.win > $1.www.outbound.winc
  227. awk -f win.awk < $1.www.inbound.clnt.win > $1.www.inbound.winc
  228. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.www.outbound.wins
  229. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.www.outbound.winc
  230. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.www.inbound.wins
  231. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.www.inbound.winc
  232. echo "FTP"
  233. grep " S " $1.ftp.outbound | grep ".20 >" > $1.ftp.outbound.svr.win
  234. grep " S " $1.ftp.inbound | grep ".20 >" > $1.ftp.inbound.svr.win
  235. grep " S " $1.ftp.outbound | grep ".20:" > $1.ftp.outbound.clnt.win
  236. grep " S " $1.ftp.inbound | grep ".20:" > $1.ftp.inbound.clnt.win
  237. awk -f win.awk < $1.ftp.outbound.svr.win > $1.ftp.outbound.wins
  238. awk -f win.awk < $1.ftp.inbound.svr.win > $1.ftp.inbound.wins
  239. awk -f win.awk < $1.ftp.outbound.clnt.win > $1.ftp.outbound.winc
  240. awk -f win.awk < $1.ftp.inbound.clnt.win > $1.ftp.inbound.winc
  241. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.ftp.outbound.wins
  242. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.ftp.outbound.winc
  243. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.ftp.inbound.wins
  244. dat2cdf -e 1024 -i 1024 -d 1024 -t $1.ftp.inbound.winc
  245. date
  246. echo "execution complete"