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

通讯编程

开发平台:

Visual C++

  1. #! /bin/sh
  2. #!/usr/bin/tclsh
  3. #
  4. # Copyright (C) 2002 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. # RAMP is a set of scripts that take tcpdump trace as input and
  21. # output a set of CDF files that model Web traffic, FTP traffic
  22. # and the underlying topology information including RTT and
  23. # bottleneck bandwidth. It also outputs a time series of 
  24. # traffic size (in 1ms block) for further wavelet scaling analysis
  25. # for detailed explanation of RAMP, please see 
  26. # http://www.isi.edu/~kclan/paper/ramp.pdf 
  27. #
  28. #             usage:
  29. #                  ./RAMP [-c] <tcpdump) trace> <threshold> <network prefix>
  30. #
  31. #                  [-f]            : generate multiple traffic models
  32. #                                    based on filter specified in model.conf
  33. #                  [-c]            : convert trace file from CoralReef to
  34. #                                    tcpdump format
  35. #                  <tcpdump trace> : tcpdump trace file generated using
  36. #                                     tcpdump -w option
  37. #                  <threshold>     : the threshold time value (in millisecond)
  38. #                                    that distinguishes idle periods in order 
  39. #                                    to infer user "think" times between 
  40. #                                    requests for new top-level pages.
  41. #                  <network prefix>: network prefix used to distinguish
  42. #                                    inbound vs. outbound traffic
  43. #
  44. #             example: ./RAMP tracefile 1000 128.9.0.0/255.255.0.0
  45. #
  46. # Currently it's only tested on Linux system
  47. #
  48. # Here is the version of tcpdump we used for testing
  49. # tcpdump version 3.6.3
  50. # libpcap version 0.6
  51. #
  52. # We assume the output of tcpdump with the following format for
  53. # TCP packets
  54. #
  55. # timestamp src > dst: flags data鈥恠eqno ack window urgent options
  56. #
  57. # Note that some version of tcpdump might output with an extra "<"
  58. # i.e.
  59. # timestamp < src > dst: flags data鈥恠eqno ack window urgent options
  60. # which is not compatible with our codes
  61. # One simple workaround is to use the provided remove.pl script
  62. # to remove the extra "<" in the tcpdump output
  63. #
  64. # This work is supported by DARPA through SAMAN Project
  65. # (http://www.isi.edu/saman/), administered by the Space and Naval
  66. # Warfare System Center San Diego under Contract No. N66001-00-C-8066
  67. #
  68. #
  69. #
  70. echo -e
  71. crl=no
  72. if test $1 = -c
  73. then
  74.    if [ -x ./crl_to_pcap ] ; then   
  75.     mv $2 $2.crl
  76.     ./crl_to_pcap -o $2 $2.crl
  77. f=$2
  78. t=$3
  79. p=$4
  80.    else
  81.     echo "CoralReef to Tcpdump converter does not exist!!"
  82. exit 0
  83.    fi
  84. elif test $1 = -f
  85. then
  86.    if [ -e ./model.conf ] ; then
  87.         f=$2
  88.         t=$3
  89.         p=$4
  90.         filter=yes
  91.    else
  92.         echo "model.conf does not exist!!"
  93.         exit 0
  94.    fi
  95. else
  96. f=$1
  97. t=$2
  98. p=$3
  99. fi
  100. TCPDUMP=/usr/sbin/tcpdump
  101. #preprocessing the trace file
  102. date
  103. echo "***  parsing $tcpdump file  ***"
  104. echo "***  parsing .all  ***"
  105. $TCPDUMP -nn -tt -q -r $f  > $f.all
  106. $TCPDUMP -nn -tt tcp -r $f  > $f.tcp
  107. date
  108. echo "***  parsing .www  ***"
  109. $TCPDUMP -nn -tt -r $f tcp port 80 > $f.www
  110. #extrace FTP data connections from the trace
  111. date
  112. echo "***  parsing .ftp  ***"
  113. $TCPDUMP -nn -tt -r $f port ftp  > $f.ftp1
  114. cat $f.ftp1 | getftpnode.pl
  115. #find the IP address of FTP clients
  116. cat $f.ftp1 | getFTPclient.pl  > $f.ftp2
  117. cat  $f.tcp | getFTP.pl -r $f.ftp2 > $f.ftp
  118. #extract tcp flows from Web server
  119. date
  120. echo "***  parsing .http-srv  ***"
  121. $TCPDUMP -nn -tt -r $f tcp src port 80 > $f.http-srv
  122. #date
  123. #echo "***  analyze traffic mix  ***"
  124. #cat $f.all | io.pl -s $p  -w $f.all
  125. #cat $f.all.inbound | traffic-classify > $f.traffic.cnt.inbound
  126. #cat $f.all.outbound | traffic-classify > $f.traffic.cnt.outbound
  127. #date
  128. #echo "***  analyze flow statistics  ***"
  129. #awk -f flow.awk < $f.all.outbound > $f.all.outbound.flow
  130. #awk -f flow.awk < $f.all.inbound > $f.all.inbound.flow
  131. #sort -s -o $f.all.outbound.flow.sort -T /tmp $f.all.outbound.flow
  132. #sort -s -o $f.all.inbound.flow.sort -T /tmp $f.all.inbound.flow
  133. #cat $f.all.outbound.flow.sort | flow.pl -w $f.outbound.flow
  134. #cat $f.all.inbound.flow.sort | flow.pl -w $f.inbound.flow
  135. #sort -s -o $f.inbound.flow.start.sort $f.inbound.flow.start
  136. #sort -s -o $f.outbound.flow.start.sort $f.outbound.flow.start
  137. #awk -f arrive2inter.awk < $f.outbound.flow.start.sort > $f.outbound.flow.arrival
  138. #awk -f arrive2inter.awk < $f.inbound.flow.start.sort > $f.inbound.flow.arrival
  139. #dat2cdf -e 1024 -i 1024 -d 1024 -t $f.outbound.flow.size
  140. #dat2cdf -e 1024 -i 1024 -d 1024 -t $f.inbound.flow.size
  141. #dat2cdf -e 0 -i 1 -d 1 -t $f.outbound.flow.dur
  142. #dat2cdf -e 0 -i 1 -d 1 -t $f.inbound.flow.dur
  143. #dat2cdf -e 0 -i 0.001 -d 1 -t $f.outbound.flow.arrival
  144. #dat2cdf -e 0 -i 0.001 -d 1 -t $f.inbound.flow.arrival
  145. #seperate inbound and outbound flows in web traffic
  146. date
  147. echo "WWW"
  148. cat $f.www | io.www.pl -s $p  -w $f.www
  149. cat $f.http-srv | io.www.pl -s $p  -w $f.http-srv
  150. #seperate inbound and outbound flows in FTP traffic
  151. date
  152. echo "FTP"
  153. cat $f.ftp | io.pl -s $p  -w $f.ftp
  154. if test "$filter" = yes; then
  155.         cat model.conf | wmodel.pl -r $f.http-srv.inbound -t $t
  156.         cat model.conf | fmodel.pl -r $f.ftp
  157.         getftpserver.pl
  158.         exit 0
  159. fi
  160. ################################################################
  161. #please read output_format.pdf and trace_processing.pdf included in
  162. # this package for detailed explanation of the follwing commands
  163. /bin/rm -rf *.time-series
  164. /bin/rm -rf *connect.time*
  165. date
  166. echo "***  Analyze Inbound traffic  ***"
  167. #output the summary of http connections
  168. echo "run http_connect"
  169. sort -s -o $f.in.http-srv-sort +1 -2 +3 -4 +0 -1 -T /tmp $f.http-srv.inbound
  170. http_connect -r $f.in.http-srv-sort -w $f.in.http-srv.connect
  171. grep "ACT" $f.in.http-srv.connect > $f.in.http-srv.connect.time
  172. sort $f.in.http-srv.connect.time > $f.in.http-srv.connect.time.sort
  173. #output the summary of http client request and server response 
  174. date
  175. echo "run http_active"
  176. sort -s -o $f.in.http-srv.connect.sort +1 -2 +0 -1 -T /tmp $f.in.http-srv.connect
  177. http_active -r $f.in.http-srv.connect.sort -w $f.in.http-srv.active -I $t
  178. #output statistical distribution of web traffic
  179. #in particular the distributions of the following parameters
  180. #(a) session inter-arrival
  181. #(b) number of pages per session
  182. #(c) page inter-arrival
  183. #(d) page size
  184. #(e) object inter-arrival
  185. #(f) object size
  186. #(g) request size
  187. #(h) ratio between persistent and non-persistent connection
  188. #(i) server popularity        
  189. date
  190. echo "compute CDF statistics"
  191. cat $f.in.http-srv.active.activity | outputCDF -e inbound
  192. #output the time series of web traffic usage in 1ms block 
  193. #for later use of wavelet scaling analysis
  194. date
  195. echo "compute time series (1ms block)"
  196. bw.tcl $f.http-srv.inbound
  197. cat $f.http-srv.inbound.bw | time-series.pl > $f.in.time-series
  198. date
  199. echo "***  Analyze Outbound traffic  ***"
  200. #output the summary of http connections
  201. echo "run http_connect"
  202. sort -s -o $f.out.http-srv-sort +1 -2 +3 -4 +0 -1 -T /tmp $f.http-srv.outbound
  203. http_connect -r $f.out.http-srv-sort -w $f.out.http-srv.connect
  204. grep "ACT" $f.out.http-srv.connect > $f.out.http-srv.connect.time
  205. sort $f.out.http-srv.connect.time > $f.out.http-srv.connect.time.sort
  206. #output the summary of http client request and server response 
  207. date
  208. echo "run http_active"
  209. sort -s -o $f.out.http-srv.connect.sort +1 -2 +0 -1 -T /tmp $f.out.http-srv.connect
  210. http_active -r $f.out.http-srv.connect.sort -w $f.out.http-srv.active -I $t
  211. date
  212. echo "compute CDF statistics of web traffic"
  213. cat $f.out.http-srv.active.activity | outputCDF -e outbound
  214. #output the time series of web traffic usage in 1ms block 
  215. #for later use of wavelet scaling analysis
  216. date
  217. echo "compute time series (1ms block)"
  218. bw.tcl $f.http-srv.outbound
  219. cat $f.http-srv.outbound.bw | time-series.pl > $f.out.time-series
  220. #################################################################
  221. echo "***  Delay and Bandwidth estimation  ***"
  222. echo "Estimate delay and bottleneck bandwidth for WWW traffic"
  223. date
  224. echo "pre-processing: output traffic between web servers and clients"
  225. cat $f.www | BW-seq.pl -s $p -p 80 
  226. sort inbound.seq -o inbound.seq.sorted
  227. sort outbound.seq -o outbound.seq.sorted
  228. date
  229. echo "search for DATA/ACK packets which have the same seqence number for outboun
  230. d traffic"
  231. cat outbound.seq.sorted | BW-pair.pl > $f.outbound.pair
  232. date
  233. echo "estimate the bandwidth for inbound/outbound traffic"
  234. cat $f.outbound.pair | BW.out.pl -w $f.www
  235. cat inbound.seq.sorted | BW.in.pl -w $f.www
  236. dat2cdf -e 0 -i 0.001 -d 1 -t $f.www.outbound.BW
  237. dat2cdf -e 0 -i 0.001 -d 1 -t $f.www.inbound.BW
  238. dat2cdf -e 0 -i 0.001 -d 1 -t $f.www.outbound.delay
  239. date
  240. echo "compute packet size distribution"
  241. sort -o inbound.pkt.size.sort inbound.pkt.size
  242. sort -o outbound.pkt.size.sort outbound.pkt.size
  243. awk -f pkt.awk < inbound.pkt.size.sort > $f.www.inbound.pktsize
  244. awk -f pkt.awk < outbound.pkt.size.sort > $f.www.outbound.pktsize
  245. dat2cdf -e 0 -i 1 -d 1 -t $f.www.inbound.pktsize
  246. dat2cdf -e 0 -i 1 -d 1 -t $f.www.outbound.pktsize
  247. date
  248. echo "Locate SYN connection"
  249. cat $f.www | delay.pl -p 80 > $f.www.sync
  250. sort -s -o $f.www.sync.sorted -T /tmp $f.www.sync
  251. date
  252. echo "compute delay for each SYN connection pair between servers and clients"
  253. pair.tcl $f.www.sync.sorted $p >  $f.www.sync.delay
  254. sort -s -o $f.www.sync.delay.sorted -T /tmp $f.www.sync.delay
  255. awk -f delay.awk < $f.www.sync.delay.sorted > $f.www.inbound.delay
  256. dat2cdf -e 0 -i 0.001 -d 1 -t $f.www.inbound.delay
  257. ##########################################################
  258. echo "Estimate delay and bottleneck bandwidth for FTP traffic"
  259. date
  260. echo "pre-processing: output traffic between ftp servers and clients"
  261. cat  $f.ftp | BW-seq-ftp.pl -r $f.ftp2 -s $p
  262. sort inbound.seq -o inbound.seq.sorted
  263. sort outbound.seq -o outbound.seq.sorted
  264. date
  265. echo "search for DATA/ACK packets which have the same seqence number for outboun
  266. d traffic"
  267. cat outbound.seq.sorted | BW-pair.pl > $f.outbound.pair
  268. date
  269. echo "estimate the bandwidth for inbound/outbound traffic"
  270. cat $f.outbound.pair | BW.out.pl -w $f.ftp
  271. cat inbound.seq.sorted | BW.in.pl -w $f.ftp
  272. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.outbound.BW
  273. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.inbound.BW
  274. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.outbound.delay
  275. date
  276. echo "Locate SYN connection"
  277. cat $f.ftp | delay.pl -p 21 > $f.sync
  278. sort -s -o $f.sync.sorted -T /tmp $f.sync
  279. date
  280. echo "compute delay for each SYN connection pair between servers and clients"
  281. pair.tcl $f.sync.sorted $p >  $f.sync.delay
  282. sort -s -o $f.sync.delay.sorted -T /tmp $f.sync.delay
  283. awk -f delay.awk < $f.sync.delay.sorted > $f.ftp.inbound.delay
  284. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.inbound.delay
  285. ###########################################################
  286. #compuate statistical distribution of FTP trafic
  287. #specifically the follwoing parameters in FTP model
  288. # (1) ftp file arrival
  289. # (2) number of files per ftp session
  290. # (3) flie size
  291. echo "Output flow statistics for FTP traffic"
  292. date
  293. echo "estimate file distribution of outbound FTP traffic"
  294. cat $f.ftp.outbound | awk -f ftp.awk | sort > $f.ftp.outbound.flow.sort
  295. cat $f.ftp.outbound.flow.sort | ftp.pl -w $f.ftp.outbound
  296. sort -o $f.ftp.outbound.arrive.sort $f.ftp.outbound.arrive
  297. awk -f ftp.arrive.awk < $f.ftp.outbound.arrive.sort > $f.ftp.outbound.file.inter
  298. echo "estimate file distribution of inbound FTP traffic"
  299. cat $f.ftp.inbound | awk -f ftp.awk | sort > $f.ftp.inbound.flow.sort
  300. cat $f.ftp.inbound.flow.sort | ftp.pl -w $f.ftp.inbound
  301. sort -o $f.ftp.inbound.arrive.sort $f.ftp.inbound.arrive
  302. awk -f ftp.arrive.awk < $f.ftp.inbound.arrive.sort > $f.ftp.inbound.file.inter
  303. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.outbound.file.inter 
  304. dat2cdf -e 0 -i 1000 -d 1000 -t $f.ftp.outbound.size
  305. dat2cdf -e 0 -i 1 -d 1 -t $f.ftp.outbound.fileno
  306. dat2cdf -e 0 -i 0.001 -d 1 -t $f.ftp.inbound.file.inter
  307. dat2cdf -e 0 -i 1000 -d 1000 -t $f.ftp.inbound.size
  308. dat2cdf -e 0 -i 1 -d 1 -t $f.ftp.inbound.fileno       
  309. ######################################
  310. echo "Output TCP window size"
  311. date
  312. echo "WWW"
  313. grep " S " $f.www.outbound | grep ".80 >" > $f.www.outbound.svr.win
  314. grep " S " $f.www.inbound | grep ".80 >" > $f.www.inbound.svr.win
  315. grep " S " $f.www.outbound | grep ".80:" > $f.www.outbound.clnt.win
  316. grep " S " $f.www.inbound | grep ".80:" > $f.www.inbound.clnt.win
  317. awk -f win.awk < $f.www.outbound.svr.win > $f.www.outbound.wins
  318. awk -f win.awk < $f.www.inbound.svr.win > $f.www.inbound.wins
  319. awk -f win.awk < $f.www.outbound.clnt.win > $f.www.outbound.winc
  320. awk -f win.awk < $f.www.inbound.clnt.win > $f.www.inbound.winc
  321. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.www.outbound.wins
  322. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.www.outbound.winc
  323. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.www.inbound.wins
  324. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.www.inbound.winc
  325. echo "FTP"
  326. grep " S " $f.ftp.outbound | grep ".20 >" > $f.ftp.outbound.svr.win
  327. grep " S " $f.ftp.inbound | grep ".20 >" > $f.ftp.inbound.svr.win
  328. grep " S " $f.ftp.outbound | grep ".20:" > $f.ftp.outbound.clnt.win
  329. grep " S " $f.ftp.inbound | grep ".20:" > $f.ftp.inbound.clnt.win
  330. awk -f win.awk < $f.ftp.outbound.svr.win > $f.ftp.outbound.wins
  331. awk -f win.awk < $f.ftp.inbound.svr.win > $f.ftp.inbound.wins
  332. awk -f win.awk < $f.ftp.outbound.clnt.win > $f.ftp.outbound.winc
  333. awk -f win.awk < $f.ftp.inbound.clnt.win > $f.ftp.inbound.winc
  334. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.ftp.outbound.wins
  335. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.ftp.outbound.winc
  336. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.ftp.inbound.wins
  337. dat2cdf -e 1024 -i 1024 -d 1024 -t $f.ftp.inbound.winc
  338. date
  339. echo "execution complete"