pcapr-local 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. data/.document +5 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +64 -0
  4. data/Rakefile +57 -0
  5. data/VERSION +1 -0
  6. data/bin/pcap2par +49 -0
  7. data/bin/startpcapr +40 -0
  8. data/bin/stoppcapr +33 -0
  9. data/bin/xtractr +5 -0
  10. data/lib/environment.rb +106 -0
  11. data/lib/exe/xtractr +0 -0
  12. data/lib/mu/pcap.rb +110 -0
  13. data/lib/mu/pcap/ethernet.rb +148 -0
  14. data/lib/mu/pcap/header.rb +75 -0
  15. data/lib/mu/pcap/io_pair.rb +67 -0
  16. data/lib/mu/pcap/io_wrapper.rb +76 -0
  17. data/lib/mu/pcap/ip.rb +61 -0
  18. data/lib/mu/pcap/ipv4.rb +257 -0
  19. data/lib/mu/pcap/ipv6.rb +148 -0
  20. data/lib/mu/pcap/packet.rb +104 -0
  21. data/lib/mu/pcap/pkthdr.rb +155 -0
  22. data/lib/mu/pcap/reader.rb +61 -0
  23. data/lib/mu/pcap/reader/http_family.rb +170 -0
  24. data/lib/mu/pcap/sctp.rb +367 -0
  25. data/lib/mu/pcap/sctp/chunk.rb +123 -0
  26. data/lib/mu/pcap/sctp/chunk/data.rb +134 -0
  27. data/lib/mu/pcap/sctp/chunk/init.rb +100 -0
  28. data/lib/mu/pcap/sctp/chunk/init_ack.rb +68 -0
  29. data/lib/mu/pcap/sctp/parameter.rb +110 -0
  30. data/lib/mu/pcap/sctp/parameter/ip_address.rb +48 -0
  31. data/lib/mu/pcap/stream_packetizer.rb +72 -0
  32. data/lib/mu/pcap/tcp.rb +505 -0
  33. data/lib/mu/pcap/udp.rb +69 -0
  34. data/lib/mu/scenario/pcap.rb +164 -0
  35. data/lib/mu/scenario/pcap/fields.rb +50 -0
  36. data/lib/mu/scenario/pcap/rtp.rb +71 -0
  37. data/lib/pcapr_local.rb +159 -0
  38. data/lib/pcapr_local/config.rb +336 -0
  39. data/lib/pcapr_local/db.rb +197 -0
  40. data/lib/pcapr_local/scanner.rb +250 -0
  41. data/lib/pcapr_local/server.rb +178 -0
  42. data/lib/pcapr_local/www/favicon.ico +0 -0
  43. data/lib/pcapr_local/www/favicon.png +0 -0
  44. data/lib/pcapr_local/www/home/index.html +138 -0
  45. data/lib/pcapr_local/www/static/image/16x16/Cancel.png +0 -0
  46. data/lib/pcapr_local/www/static/image/16x16/Cancel.png.1 +0 -0
  47. data/lib/pcapr_local/www/static/image/16x16/Download.png +0 -0
  48. data/lib/pcapr_local/www/static/image/16x16/Folder3.png +0 -0
  49. data/lib/pcapr_local/www/static/image/16x16/Full Size.png +0 -0
  50. data/lib/pcapr_local/www/static/image/16x16/Minus.png +0 -0
  51. data/lib/pcapr_local/www/static/image/16x16/Plus.png +0 -0
  52. data/lib/pcapr_local/www/static/image/16x16/Search.png +0 -0
  53. data/lib/pcapr_local/www/static/image/16x16/User.png +0 -0
  54. data/lib/pcapr_local/www/static/image/48x48/Phone.png +0 -0
  55. data/lib/pcapr_local/www/static/image/48x48/Video.png +0 -0
  56. data/lib/pcapr_local/www/static/image/bar-orange.gif +0 -0
  57. data/lib/pcapr_local/www/static/image/beta.png +0 -0
  58. data/lib/pcapr_local/www/static/image/bg.png +0 -0
  59. data/lib/pcapr_local/www/static/image/blockquote.png +0 -0
  60. data/lib/pcapr_local/www/static/image/body-bg.png +0 -0
  61. data/lib/pcapr_local/www/static/image/body-h3.png +0 -0
  62. data/lib/pcapr_local/www/static/image/body-hl1-bg.png +0 -0
  63. data/lib/pcapr_local/www/static/image/body-hl1-h3.png +0 -0
  64. data/lib/pcapr_local/www/static/image/body-hl1-readmore.png +0 -0
  65. data/lib/pcapr_local/www/static/image/body-hl2-bg.png +0 -0
  66. data/lib/pcapr_local/www/static/image/body-hl2-h3.png +0 -0
  67. data/lib/pcapr_local/www/static/image/body-hl2-readmore.png +0 -0
  68. data/lib/pcapr_local/www/static/image/body-hl3-bg.png +0 -0
  69. data/lib/pcapr_local/www/static/image/body-hl3-h3.png +0 -0
  70. data/lib/pcapr_local/www/static/image/body-hl3-readmore.png +0 -0
  71. data/lib/pcapr_local/www/static/image/body-hl4-bg.png +0 -0
  72. data/lib/pcapr_local/www/static/image/body-hl4-h3.png +0 -0
  73. data/lib/pcapr_local/www/static/image/body-hl4-readmore.png +0 -0
  74. data/lib/pcapr_local/www/static/image/body-hl5-h3.png +0 -0
  75. data/lib/pcapr_local/www/static/image/body-hl6-h3.png +0 -0
  76. data/lib/pcapr_local/www/static/image/body-hl7-h3.png +0 -0
  77. data/lib/pcapr_local/www/static/image/body-hl8-h3.png +0 -0
  78. data/lib/pcapr_local/www/static/image/body-readmore.png +0 -0
  79. data/lib/pcapr_local/www/static/image/bottom-bg.png +0 -0
  80. data/lib/pcapr_local/www/static/image/bottom-l.png +0 -0
  81. data/lib/pcapr_local/www/static/image/bottom-r.png +0 -0
  82. data/lib/pcapr_local/www/static/image/btn-search.png +0 -0
  83. data/lib/pcapr_local/www/static/image/bullet-1.png +0 -0
  84. data/lib/pcapr_local/www/static/image/bullet-2.png +0 -0
  85. data/lib/pcapr_local/www/static/image/bullet-3.png +0 -0
  86. data/lib/pcapr_local/www/static/image/bullet-4.png +0 -0
  87. data/lib/pcapr_local/www/static/image/bullet-5.png +0 -0
  88. data/lib/pcapr_local/www/static/image/bullet-6.png +0 -0
  89. data/lib/pcapr_local/www/static/image/bullet-7.png +0 -0
  90. data/lib/pcapr_local/www/static/image/bullet-hl1.png +0 -0
  91. data/lib/pcapr_local/www/static/image/bullet-hl2.png +0 -0
  92. data/lib/pcapr_local/www/static/image/bullet-hl3.png +0 -0
  93. data/lib/pcapr_local/www/static/image/bullet-hl4.png +0 -0
  94. data/lib/pcapr_local/www/static/image/bullet-pathway.png +0 -0
  95. data/lib/pcapr_local/www/static/image/bullet-section1.png +0 -0
  96. data/lib/pcapr_local/www/static/image/bullet-section2.png +0 -0
  97. data/lib/pcapr_local/www/static/image/collapsed.gif +0 -0
  98. data/lib/pcapr_local/www/static/image/crosslink.png +0 -0
  99. data/lib/pcapr_local/www/static/image/expanded.gif +0 -0
  100. data/lib/pcapr_local/www/static/image/favicon.ico +0 -0
  101. data/lib/pcapr_local/www/static/image/favicon.png +0 -0
  102. data/lib/pcapr_local/www/static/image/icon-author.png +0 -0
  103. data/lib/pcapr_local/www/static/image/icon-created.png +0 -0
  104. data/lib/pcapr_local/www/static/image/p-expand.gif +0 -0
  105. data/lib/pcapr_local/www/static/image/pcapr-logo.png +0 -0
  106. data/lib/pcapr_local/www/static/image/powered-by.png +0 -0
  107. data/lib/pcapr_local/www/static/image/section1-bg.png +0 -0
  108. data/lib/pcapr_local/www/static/image/section1-h3.png +0 -0
  109. data/lib/pcapr_local/www/static/image/section1-readmore.png +0 -0
  110. data/lib/pcapr_local/www/static/image/section2-bg.png +0 -0
  111. data/lib/pcapr_local/www/static/image/section2-h3.png +0 -0
  112. data/lib/pcapr_local/www/static/image/section2-readmore.png +0 -0
  113. data/lib/pcapr_local/www/static/image/status-alert.png +0 -0
  114. data/lib/pcapr_local/www/static/image/status-download.png +0 -0
  115. data/lib/pcapr_local/www/static/image/status-info.png +0 -0
  116. data/lib/pcapr_local/www/static/image/status-note.png +0 -0
  117. data/lib/pcapr_local/www/static/image/tab-round.png +0 -0
  118. data/lib/pcapr_local/www/static/image/throbber.gif +0 -0
  119. data/lib/pcapr_local/www/static/image/user.jpg +0 -0
  120. data/lib/pcapr_local/www/static/script/closet/async.js +421 -0
  121. data/lib/pcapr_local/www/static/script/closet/closet.api.js +241 -0
  122. data/lib/pcapr_local/www/static/script/closet/closet.folders.js +94 -0
  123. data/lib/pcapr_local/www/static/script/closet/closet.js +187 -0
  124. data/lib/pcapr_local/www/static/script/closet/closet.mr.js +219 -0
  125. data/lib/pcapr_local/www/static/script/closet/closet.options.js +359 -0
  126. data/lib/pcapr_local/www/static/script/closet/closet.quantity.js +73 -0
  127. data/lib/pcapr_local/www/static/script/closet/closet.render.js +205 -0
  128. data/lib/pcapr_local/www/static/script/closet/closet.report.js +86 -0
  129. data/lib/pcapr_local/www/static/script/closet/closet.reports.http.js +135 -0
  130. data/lib/pcapr_local/www/static/script/closet/closet.reports.overview.js +163 -0
  131. data/lib/pcapr_local/www/static/script/closet/closet.reports.sip.js +159 -0
  132. data/lib/pcapr_local/www/static/script/closet/closet.reports.tcp.js +72 -0
  133. data/lib/pcapr_local/www/static/script/closet/closet.reports.visualize.js +263 -0
  134. data/lib/pcapr_local/www/static/script/closet/closet.util.js +40 -0
  135. data/lib/pcapr_local/www/static/script/jquery/jquery-1.4.2.min.js +154 -0
  136. data/lib/pcapr_local/www/static/script/jquery/jquery-ui.js +10921 -0
  137. data/lib/pcapr_local/www/static/script/jquery/jquery.flot.js +2123 -0
  138. data/lib/pcapr_local/www/static/script/jquery/jquery.flot.selection.js +184 -0
  139. data/lib/pcapr_local/www/static/script/jquery/jquery.flot.stack.js +184 -0
  140. data/lib/pcapr_local/www/static/script/jquery/jquery.form.js +643 -0
  141. data/lib/pcapr_local/www/static/script/jquery/jquery.jsonp.min.js +3 -0
  142. data/lib/pcapr_local/www/static/script/jquery/jquery.menu.js +142 -0
  143. data/lib/pcapr_local/www/static/script/jquery/jquery.suggest.js +308 -0
  144. data/lib/pcapr_local/www/static/script/jquery/jquery.ui.core.js +203 -0
  145. data/lib/pcapr_local/www/static/script/jquery/jquery.ui.slider.js +629 -0
  146. data/lib/pcapr_local/www/static/script/jquery/jquery.ui.sortable.js +1055 -0
  147. data/lib/pcapr_local/www/static/script/jquery/jquery.ui.widget.js +236 -0
  148. data/lib/pcapr_local/www/static/script/json2.js +481 -0
  149. data/lib/pcapr_local/www/static/script/sammy/plugins/sammy.cache.js +115 -0
  150. data/lib/pcapr_local/www/static/script/sammy/plugins/sammy.template.js +117 -0
  151. data/lib/pcapr_local/www/static/script/sammy/sammy.js +1696 -0
  152. data/lib/pcapr_local/www/static/script/tipsy/jquery.tipsy.js +104 -0
  153. data/lib/pcapr_local/www/static/style/c3p0.css +116 -0
  154. data/lib/pcapr_local/www/static/style/jquery.suggest.css +27 -0
  155. data/lib/pcapr_local/www/static/style/page.css +1113 -0
  156. data/lib/pcapr_local/www/static/style/tipsy.css +7 -0
  157. data/lib/pcapr_local/www/templates/browse.services.template +10 -0
  158. data/lib/pcapr_local/www/templates/browse.template +77 -0
  159. data/lib/pcapr_local/www/templates/flows.template +38 -0
  160. data/lib/pcapr_local/www/templates/pcap.template +63 -0
  161. data/lib/pcapr_local/www/templates/sip.calls.template +35 -0
  162. data/lib/pcapr_local/www/templates/statistics.template +6 -0
  163. data/lib/pcapr_local/xtractr.rb +179 -0
  164. data/lib/pcapr_local/xtractr/instance.rb +172 -0
  165. data/pcapr-local.gemspec +297 -0
  166. data/test/mu/pcap/reader/tc_http_family.rb +251 -0
  167. data/test/mu/pcap/tc_ethernet.rb +71 -0
  168. data/test/mu/pcap/tc_header.rb +56 -0
  169. data/test/mu/pcap/tc_ipv4.rb +103 -0
  170. data/test/mu/pcap/tc_ipv6.rb +83 -0
  171. data/test/mu/pcap/tc_packet.rb +44 -0
  172. data/test/mu/pcap/tc_pair.rb +58 -0
  173. data/test/mu/pcap/tc_pkthdr.rb +33 -0
  174. data/test/mu/pcap/tc_reader.rb +76 -0
  175. data/test/mu/pcap/tc_tcp.rb +426 -0
  176. data/test/mu/pcap/tc_udp.rb +33 -0
  177. data/test/mu/pcap/tc_wrapper.rb +80 -0
  178. data/test/mu/scenario/pcap/tc_fields.rb +67 -0
  179. data/test/mu/scenario/pcap/tc_rtp.rb +135 -0
  180. data/test/mu/scenario/sip_signalled_call_1.pcap +0 -0
  181. data/test/mu/scenario/tc_pcap.rb +190 -0
  182. data/test/mu/scenario/test_data/arp.pcap +0 -0
  183. data/test/mu/scenario/test_data/dns.pcap +0 -0
  184. data/test/mu/scenario/test_data/http-v6.pcap +0 -0
  185. data/test/mu/scenario/test_data/http.pcap +0 -0
  186. data/test/mu/scenario/test_data/http_chunked.pcap +0 -0
  187. data/test/mu/scenario/test_data/http_deflate.pcap +0 -0
  188. data/test/mu/scenario/test_data/httpauth3.pcap +0 -0
  189. data/test/mu/scenario/test_data/icmp.pcap +0 -0
  190. data/test/mu/scenario/test_data/sip_signalled_call_1.pcap +0 -0
  191. data/test/mu/tc_pcap.rb +39 -0
  192. data/test/mu/testcase.rb +86 -0
  193. data/test/pcapr_local/arp.pcap +0 -0
  194. data/test/pcapr_local/data.js +3 -0
  195. data/test/pcapr_local/http_chunked.pcap +0 -0
  196. data/test/pcapr_local/tc_api.rb +181 -0
  197. data/test/pcapr_local/test.tgz +0 -0
  198. data/test/pcapr_local/test_scanner.rb +241 -0
  199. data/test/pcapr_local/test_xtractr.rb +219 -0
  200. data/test/pcapr_local/testcase.rb +107 -0
  201. data/test/test_export_to_scenario.sh +25 -0
  202. data/test/test_pcapr_local.rb +29 -0
  203. metadata +450 -0
@@ -0,0 +1,219 @@
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ require 'mu/testcase'
6
+ require 'pcapr_local'
7
+ require 'test/pcapr_local/testcase'
8
+
9
+ module PcaprLocal
10
+ class Xtractr
11
+
12
+ class Test < ::PcaprLocal::Test::TestCase
13
+
14
+
15
+ PCAP = File.expand_path File.join(File.dirname(__FILE__), "arp.pcap")
16
+ HTTP_PCAP = File.expand_path File.join(File.dirname(__FILE__), "http_chunked.pcap")
17
+
18
+ def test_basics
19
+ do_setup
20
+
21
+ config = {
22
+ "index_dir" => @index_dir,
23
+ "reaper_interval" => 60,
24
+ "idle_timeout" => 60,
25
+ }
26
+ xtractr = Xtractr.new config
27
+
28
+ config = {
29
+ "db" => @db,
30
+ "xtractr" => xtractr,
31
+ "index_dir" => @index_dir,
32
+ "pcap_dir" => @pcap_dir,
33
+ "queue_delay" => 0,
34
+ "interval" => 0,
35
+ }
36
+ scanner = Scanner.new config
37
+
38
+ # Add pcaps and index them.
39
+ count = 2
40
+ count.times do |n|
41
+ FileUtils.cp PCAP, "#{@pcap_dir}/#{n}.pcap"
42
+ end
43
+ scanner.scan
44
+
45
+ # Get an xtractr instance
46
+ x0 = xtractr.xtractr_for('0.pcap')
47
+ assert_kind_of Xtractr::Instance, x0
48
+
49
+ # Second request should yield cached instance
50
+ x0_ = xtractr.xtractr_for('0.pcap')
51
+ assert_same x0, x0_
52
+
53
+ # A xtractr instance for a second pcap
54
+ x1 = xtractr.xtractr_for('1.pcap')
55
+ assert_not_same x0,x1
56
+ x1.start
57
+ index_dir1 = scanner.index_path '1.pcap'
58
+ packets_db = File.join(index_dir1, 'packets.db')
59
+ pids = `fuser #{packets_db}`.split
60
+ assert pids.include?(x1.pid.to_s), "Expected to find xtractr process to have opened packets.db file open"
61
+
62
+ # Xtractr instances have not been idle long enough to be reaped.
63
+ xtractr.reap
64
+ assert_nothing_raised do
65
+ Process.kill 0, x1.pid
66
+ end
67
+
68
+ # Make instance appear idle, it should be reaped now.
69
+ x1_pid = x1.pid
70
+ x1.instance_variable_set :@last_use, 0.0
71
+ xtractr.reap
72
+ assert_nil x1.pid
73
+ assert_raises Errno::ESRCH do
74
+ Process.kill 0, x1_pid
75
+ end
76
+
77
+ # Get another xtractr for same pcap and make sure it is function with a get request.
78
+ x1 = xtractr.xtractr_for('1.pcap')
79
+ status, headers, body = x1.get('/api/fields')
80
+ assert_equal 200, status
81
+ assert_equal({"connection"=>"close", "content-type"=>"text/plain", "server"=>"xtractr"}.to_a.sort, headers.to_a.sort)
82
+ assert_json "[\"pkt.src\",\"pkt.dst\",\"pkt.id\",\"pkt.pcap\",\"pkt.time\",\"pkt.offset\",\"pkt.length\",\"pkt.service\",\"pkt.title\",\"arp.dst.hw.mac\",\"arp.hw.size\",\"arp.hw.type\",\"arp.isgratuitous\",\"arp.opcode\",\"arp.proto.size\",\"arp.proto.type\",\"arp.src.hw.mac\",\"eth.addr\",\"eth.dst\",\"eth.ig\",\"eth.lg\",\"eth.src\",\"eth.type\"]", body
83
+
84
+ # Make instance appear idle, it should be reaped now.
85
+ x1_pid = x1.pid
86
+ x1.instance_variable_set :@last_use, 0.0
87
+ xtractr.reap
88
+ assert_nil x1.pid
89
+ assert_raises Errno::ESRCH do
90
+ Process.kill 0, x1_pid
91
+ end
92
+ ensure
93
+ xtractr.shutdown if xtractr
94
+ end
95
+
96
+ XTRACTR_VERSION = "4.5.41604"
97
+ def test_index
98
+ do_setup
99
+
100
+ config = {
101
+ "index_dir" => @index_dir,
102
+ "reaper_interval" => 60,
103
+ "idle_timeout" => 60,
104
+ }
105
+ xtractr = Xtractr.new config
106
+
107
+ FileUtils.cp HTTP_PCAP, "#{@pcap_dir}/http.pcap"
108
+ index_data = xtractr.index "#{@pcap_dir}/http.pcap", "#{@index_dir}/http.pcap"
109
+ assert File.exist? "#{@index_dir}/http.pcap/packets.db"
110
+ expected_index_data = {
111
+ :services =>["http"],
112
+ :about => {
113
+ "packets" => 2,
114
+ "hosts" => 2,
115
+ "version" => XTRACTR_VERSION,
116
+ "services" => 1,
117
+ "duration" => 14,
118
+ "flows" => 1
119
+ }
120
+ }
121
+
122
+ assert_equal expected_index_data[:services], index_data[:services]
123
+ assert_equal expected_index_data[:about].to_a.sort, index_data[:about].to_a.sort
124
+ ensure
125
+ xtractr.shutdown if xtractr
126
+ end
127
+
128
+ def test_free_local_port
129
+ seed = srand
130
+ srand seed
131
+ port1 = Xtractr::Instance.free_local_port
132
+ server1 = TCPServer.open '127.0.0.1', port1
133
+
134
+ # Reseed so first port chosen will be in use
135
+ srand seed
136
+ port2 = Xtractr::Instance.free_local_port
137
+ assert_not_equal port1, port2
138
+ server2 = TCPServer.open '127.0.0.1', port2
139
+
140
+ server1.close
141
+ server2.close
142
+ end
143
+
144
+ def test_do_start
145
+ do_setup
146
+
147
+ max_start_time = Instance::MAX_START_TIME
148
+ Instance.const_set :MAX_START_TIME, 1
149
+
150
+ config = {
151
+ "index_dir" => @index_dir,
152
+ "reaper_interval" => 60,
153
+ "idle_timeout" => 60,
154
+ }
155
+ xtractr = Xtractr.new config
156
+ FileUtils.cp HTTP_PCAP, "#{@pcap_dir}/http.pcap"
157
+ index_data = xtractr.index "#{@pcap_dir}/http.pcap", "#{@index_dir}/http.pcap"
158
+
159
+ xtractr_instance = Xtractr::Instance.new "#{@index_dir}/http.pcap", EXE_PATH
160
+ xtractr_instance.instance_variable_set :@xtractr_path, `which false`.strip
161
+ assert_raises Instance::XtractrStartupException do
162
+ xtractr_instance.start
163
+ end
164
+ ensure
165
+ if max_start_time
166
+ Instance.const_set :MAX_START_TIME, max_start_time
167
+ end
168
+ end
169
+
170
+ def test_get_and_post
171
+ do_setup
172
+
173
+ config = {
174
+ "index_dir" => @index_dir,
175
+ "reaper_interval" => 60,
176
+ "idle_timeout" => 60,
177
+ }
178
+ xtractr = Xtractr.new config
179
+
180
+ config = {
181
+ "db" => @db,
182
+ "xtractr" => xtractr,
183
+ "index_dir" => @index_dir,
184
+ "pcap_dir" => @pcap_dir,
185
+ "queue_delay" => 0,
186
+ "interval" => 0,
187
+ }
188
+ scanner = Scanner.new config
189
+
190
+ FileUtils.cp HTTP_PCAP, "#{@pcap_dir}/http.pcap"
191
+ scanner.scan
192
+
193
+ # GET /api/about
194
+ status, headers, body = xtractr.get('http.pcap', '/api/about')
195
+ assert_equal 200, status
196
+ assert_kind_of Hash, headers
197
+ assert_equal 'text/plain', headers['content-type']
198
+
199
+ about = JSON.parse body
200
+ assert_equal 1, about['flows']
201
+ assert_equal 2, about['packets']
202
+
203
+ # POST /api/content?type=text/html&name=content.1.0
204
+ post_body = "bytes=edgbhachhccaengbglchhccahdgjgnhagmgjgggjgfhdcahegigfcahahcgpgdgfhdhdcagpggcagdhcgfgbhegjgoghcahagbgdglgfhecagdgbhahehfhcgfhdcagghcgpgncagdgpgohegfgohecahegigbhecahjgphfcagbgmhcgfgbgehjcagigbhggfcocafjgphfcagdgbgocahfhdgfcaedgbhachhccaengbglchhccahegpcagdgpgnhahcgfhdhdcacihdgpgpgocbcjcmcagfgogdgpgegfcagbgogecagfgngcgfgecagbhcgcgjhehcgbhchjcagdgpgohegfgohecagjgohegpcahggbhcgjgphfhdcahahcgphegpgdgpgmcahdhehcgfgbgnhdcagbgogecahegigfgocagphfhehahfhecagogfhhcahagdgbhahdcacigphggfhccaejfahgdecagphccaejfahgdgcjcocafegigfhcgfchhdcagbcahdgjhkgfcagmgjgngjhecagpggcadcdfeleccagggphccahegigfcagdgpgohegfgohecahjgphfcahfhagmgpgbgecocafjgphfcagdgbgocahfhagmgpgbgecagfhihagmgpgjhehdcmcahggjhchfhdcmcahdhagbgncmcagngbgmhhgbhcgfcmcagfhegddlcagbgohjhegigjgoghcahegigbhecahjgphfcahagmgbgocagpgocahfhdgjgoghcahegpcahegfhdhecaeggjhcgfhhgbgmgmhdcmcaeefaejhdcagbgogecafffeenhdcocafhgfcagegpcagogphecahdhegphcgfcahegigfcagdgpgohegfgohecagpgocahegigfcahdgfhchggfhccagbgogecahegigfcaghgfgogfhcgbhegfgecahagdgbhacagjhdcahjgphfhchdcahegpcaglgfgfhacmcagggphcgfhggfhccoakejggcahjgphfcagigbhggfcagggfgfgegcgbgdglcagphccahdhfghghgfhdhegjgpgohdcagpgocagngbglgjgoghcahegigjhdcagcgfhehegfhccmcagegpcagmgfhecahfhdcaglgogphhcoak"
205
+ status, headers, body = xtractr.post('http.pcap', '/api/content?type=text/html&name=content.1.0', post_body)
206
+ assert_equal 200, status
207
+ assert_kind_of Hash, headers
208
+ assert_equal 'text/html', headers['content-type']
209
+ assert_equal "Cap'r Mak'r simplifies the process of creating packet captures from content that you already have. You can use Cap'r Mak'r to compress (soon!), encode and embed arbitrary content into various protocol streams and then output new pcaps (over IPv4 or IPv6). There's a size limit of 25KB for the content you upload. You can upload exploits, virus, spam, malware, etc; anything that you plan on using to test Firewalls, DPIs and UTMs. We do not store the content on the server and the generated pcap is yours to keep, forever.\nIf you have feedback or suggestions on making this better, do let us know.\n", body
210
+
211
+
212
+ ensure
213
+ xtractr.shutdown if xtractr
214
+ end
215
+
216
+ end
217
+
218
+ end
219
+ end
@@ -0,0 +1,107 @@
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ $: << File.expand_path(File.dirname(__FILE__) + '../../../../lib')
6
+ $stderr.puts $:
7
+
8
+ require 'pcapr_local'
9
+ require 'test/unit'
10
+ require 'mu/testcase'
11
+
12
+ module PcaprLocal
13
+ module Test
14
+
15
+ class TestCase < Mu::TestCase
16
+ def datafile
17
+ nil
18
+ end
19
+
20
+ # Returns user config but with parameters to changed to prevent clobbering user data.
21
+ def config
22
+ config = PcaprLocal::Config.config
23
+ config['couch']['database'] = "#{config['couch']['database']}_test"
24
+ config['install_dir'] = "/tmp/pcapr_local_test"
25
+ config['pcap_dir'] = "/tmp/pcapr_local_test/pcaps"
26
+ config['index_dir'] = "/tmp/pcapr_local_test/indexes"
27
+ config['app']['port'] = config['app']['port'].to_i + 1
28
+ config
29
+ end
30
+
31
+ # Sets up database file system and config.
32
+ # Intentionally not using setup method for ease of debugging.
33
+ def do_setup
34
+ config = self.config
35
+ host = config['app']['host']
36
+ port = config['app']['port']
37
+ @url_base = "http://#{host}:#{port}"
38
+ puts config.inspect
39
+ @pcap_dir = config.fetch 'pcap_dir'
40
+ @index_dir = config.fetch 'index_dir'
41
+
42
+ # Extract test pcaps and indexes
43
+ FileUtils.rm_rf '/tmp/pcapr_local_test'
44
+ FileUtils.mkdir_p @pcap_dir
45
+ FileUtils.mkdir_p @index_dir
46
+
47
+
48
+ # Recreate test database.
49
+ begin
50
+ couch = config['couch']
51
+ RestClient.delete "#{couch['uri']}/#{couch['database']}"
52
+ rescue RestClient::ResourceNotFound
53
+ end
54
+ db = @db = PcaprLocal.get_db(config)
55
+ end
56
+
57
+ def wait_for_server host, port, time=10
58
+ stop = Time.new + time
59
+ while Time.new < stop
60
+ if s = TCPSocket.open(host, port) rescue nil
61
+ s.close
62
+ return
63
+ end
64
+ sleep 0.01
65
+ end
66
+
67
+ raise "Server at #{host}:#{port} took longer than #{time} seconds to start"
68
+ end
69
+
70
+ def teardown
71
+ # stop server
72
+ if @pid
73
+ Process.kill -2, @pid
74
+ Process.wait @pid
75
+ @pid = nil
76
+ end
77
+ end
78
+
79
+ def load_docs doc_file, db
80
+ open doc_file do |js|
81
+ while line = js.gets
82
+ doc = JSON.parse line
83
+ doc.delete '_rev'
84
+ db.save_doc doc, true
85
+ end
86
+
87
+ db.bulk_save
88
+ end
89
+ end
90
+
91
+ def assert_json s1, s2, msg=nil
92
+ o1 = JSON.parse s1
93
+ o2 = JSON.parse s2
94
+
95
+ if o1.is_a? Hash
96
+ o1.delete "_rev"
97
+ end
98
+
99
+ if o2.is_a? Hash
100
+ o2.delete "_rev"
101
+ end
102
+
103
+ assert_equal o1, o2, msg
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+
3
+ set -ex
4
+
5
+ export MU_ROOT=${MU_ROOT:-~/root2clean}
6
+
7
+ echo $MU_ROOT
8
+
9
+ for file in test/mu/scenario/from_pcap/sip_signalled_call_1 test/mu/scenario/from_pcap/arp test/mu/scenario/from_pcap/http-v6 test/mu/scenario/from_pcap/http_chunked test/mu/scenario/from_pcap/http_deflate
10
+ do
11
+ file=$MU_ROOT/$file
12
+ for ruby in ruby ruby1.9
13
+ do
14
+ echo "trying $file"
15
+ #$ruby pcap2zip.rb -i $file.pcap /tmp/export.par
16
+ pcap2zip.rb -i $file.pcap /tmp/export.par
17
+ (
18
+ cd $MU_ROOT
19
+ $MU_ROOT/tools/scenarios/pcap2scenario.rb -wmi /tmp/export.par > $file.msl2
20
+ diff $file.msl $file.msl2 && echo passed
21
+ diff $file.msl $file.msl2 #|| echo faileddiffmerge $file.msl $file.msl2
22
+ echo
23
+ )
24
+ done
25
+ done
@@ -0,0 +1,29 @@
1
+ # http://www.mudynamics.com
2
+ # http://labs.mudynamics.com
3
+ # http://www.pcapr.net
4
+
5
+ if defined? Encoding
6
+ Encoding.default_external = Encoding::BINARY
7
+ end
8
+
9
+ test_dir = File.expand_path(File.dirname(__FILE__))
10
+ lib_dir = File.expand_path("#{test_dir}/../lib")
11
+
12
+ $: << lib_dir
13
+ $: << test_dir
14
+
15
+ require 'environment'
16
+ require 'pcapr_local'
17
+
18
+ Dir.glob("./**/tc_*.rb").each do |testfile|
19
+ require testfile
20
+ end
21
+
22
+ class Module
23
+ def const_set! name, value
24
+ if const_defined? name
25
+ remove_const name
26
+ end
27
+ const_set name, value
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,450 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pcapr-local
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 10
9
+ version: 0.1.10
10
+ platform: ruby
11
+ authors:
12
+ - Mu Dynamics
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-31 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rest-client
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 6
31
+ - 1
32
+ version: 1.6.1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: couchrest
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 1
45
+ - 0
46
+ - 1
47
+ version: 1.0.1
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: sinatra
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 1
60
+ - 1
61
+ - 0
62
+ version: 1.1.0
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: json
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 1
75
+ - 4
76
+ - 6
77
+ version: 1.4.6
78
+ type: :runtime
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: thin
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 1
90
+ - 2
91
+ - 7
92
+ version: 1.2.7
93
+ type: :runtime
94
+ version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: rack
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ segments:
104
+ - 1
105
+ - 2
106
+ - 1
107
+ version: 1.2.1
108
+ type: :runtime
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: rack-contrib
112
+ prerelease: false
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ segments:
119
+ - 1
120
+ - 1
121
+ - 0
122
+ version: 1.1.0
123
+ type: :runtime
124
+ version_requirements: *id007
125
+ - !ruby/object:Gem::Dependency
126
+ name: shoulda
127
+ prerelease: false
128
+ requirement: &id008 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ type: :development
137
+ version_requirements: *id008
138
+ - !ruby/object:Gem::Dependency
139
+ name: bundler
140
+ prerelease: false
141
+ requirement: &id009 !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ~>
145
+ - !ruby/object:Gem::Version
146
+ segments:
147
+ - 1
148
+ - 0
149
+ - 0
150
+ version: 1.0.0
151
+ type: :development
152
+ version_requirements: *id009
153
+ - !ruby/object:Gem::Dependency
154
+ name: jeweler
155
+ prerelease: false
156
+ requirement: &id010 !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ~>
160
+ - !ruby/object:Gem::Version
161
+ segments:
162
+ - 1
163
+ - 5
164
+ - 2
165
+ version: 1.5.2
166
+ type: :development
167
+ version_requirements: *id010
168
+ - !ruby/object:Gem::Dependency
169
+ name: rcov
170
+ prerelease: false
171
+ requirement: &id011 !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ type: :development
180
+ version_requirements: *id011
181
+ description: Index, Browse, and Query your vast pcap collection.
182
+ email: nbaggott@gmail.com
183
+ executables:
184
+ - pcap2par
185
+ - startpcapr
186
+ - stoppcapr
187
+ - xtractr
188
+ extensions: []
189
+
190
+ extra_rdoc_files:
191
+ - LICENSE.txt
192
+ - README.md
193
+ files:
194
+ - .document
195
+ - LICENSE.txt
196
+ - README.md
197
+ - Rakefile
198
+ - VERSION
199
+ - bin/pcap2par
200
+ - bin/startpcapr
201
+ - bin/stoppcapr
202
+ - bin/xtractr
203
+ - lib/environment.rb
204
+ - lib/exe/xtractr
205
+ - lib/mu/pcap.rb
206
+ - lib/mu/pcap/ethernet.rb
207
+ - lib/mu/pcap/header.rb
208
+ - lib/mu/pcap/io_pair.rb
209
+ - lib/mu/pcap/io_wrapper.rb
210
+ - lib/mu/pcap/ip.rb
211
+ - lib/mu/pcap/ipv4.rb
212
+ - lib/mu/pcap/ipv6.rb
213
+ - lib/mu/pcap/packet.rb
214
+ - lib/mu/pcap/pkthdr.rb
215
+ - lib/mu/pcap/reader.rb
216
+ - lib/mu/pcap/reader/http_family.rb
217
+ - lib/mu/pcap/sctp.rb
218
+ - lib/mu/pcap/sctp/chunk.rb
219
+ - lib/mu/pcap/sctp/chunk/data.rb
220
+ - lib/mu/pcap/sctp/chunk/init.rb
221
+ - lib/mu/pcap/sctp/chunk/init_ack.rb
222
+ - lib/mu/pcap/sctp/parameter.rb
223
+ - lib/mu/pcap/sctp/parameter/ip_address.rb
224
+ - lib/mu/pcap/stream_packetizer.rb
225
+ - lib/mu/pcap/tcp.rb
226
+ - lib/mu/pcap/udp.rb
227
+ - lib/mu/scenario/pcap.rb
228
+ - lib/mu/scenario/pcap/fields.rb
229
+ - lib/mu/scenario/pcap/rtp.rb
230
+ - lib/pcapr_local.rb
231
+ - lib/pcapr_local/config.rb
232
+ - lib/pcapr_local/db.rb
233
+ - lib/pcapr_local/scanner.rb
234
+ - lib/pcapr_local/server.rb
235
+ - lib/pcapr_local/www/favicon.ico
236
+ - lib/pcapr_local/www/favicon.png
237
+ - lib/pcapr_local/www/home/index.html
238
+ - lib/pcapr_local/www/static/image/16x16/Cancel.png
239
+ - lib/pcapr_local/www/static/image/16x16/Cancel.png.1
240
+ - lib/pcapr_local/www/static/image/16x16/Download.png
241
+ - lib/pcapr_local/www/static/image/16x16/Folder3.png
242
+ - lib/pcapr_local/www/static/image/16x16/Full Size.png
243
+ - lib/pcapr_local/www/static/image/16x16/Minus.png
244
+ - lib/pcapr_local/www/static/image/16x16/Plus.png
245
+ - lib/pcapr_local/www/static/image/16x16/Search.png
246
+ - lib/pcapr_local/www/static/image/16x16/User.png
247
+ - lib/pcapr_local/www/static/image/48x48/Phone.png
248
+ - lib/pcapr_local/www/static/image/48x48/Video.png
249
+ - lib/pcapr_local/www/static/image/bar-orange.gif
250
+ - lib/pcapr_local/www/static/image/beta.png
251
+ - lib/pcapr_local/www/static/image/bg.png
252
+ - lib/pcapr_local/www/static/image/blockquote.png
253
+ - lib/pcapr_local/www/static/image/body-bg.png
254
+ - lib/pcapr_local/www/static/image/body-h3.png
255
+ - lib/pcapr_local/www/static/image/body-hl1-bg.png
256
+ - lib/pcapr_local/www/static/image/body-hl1-h3.png
257
+ - lib/pcapr_local/www/static/image/body-hl1-readmore.png
258
+ - lib/pcapr_local/www/static/image/body-hl2-bg.png
259
+ - lib/pcapr_local/www/static/image/body-hl2-h3.png
260
+ - lib/pcapr_local/www/static/image/body-hl2-readmore.png
261
+ - lib/pcapr_local/www/static/image/body-hl3-bg.png
262
+ - lib/pcapr_local/www/static/image/body-hl3-h3.png
263
+ - lib/pcapr_local/www/static/image/body-hl3-readmore.png
264
+ - lib/pcapr_local/www/static/image/body-hl4-bg.png
265
+ - lib/pcapr_local/www/static/image/body-hl4-h3.png
266
+ - lib/pcapr_local/www/static/image/body-hl4-readmore.png
267
+ - lib/pcapr_local/www/static/image/body-hl5-h3.png
268
+ - lib/pcapr_local/www/static/image/body-hl6-h3.png
269
+ - lib/pcapr_local/www/static/image/body-hl7-h3.png
270
+ - lib/pcapr_local/www/static/image/body-hl8-h3.png
271
+ - lib/pcapr_local/www/static/image/body-readmore.png
272
+ - lib/pcapr_local/www/static/image/bottom-bg.png
273
+ - lib/pcapr_local/www/static/image/bottom-l.png
274
+ - lib/pcapr_local/www/static/image/bottom-r.png
275
+ - lib/pcapr_local/www/static/image/btn-search.png
276
+ - lib/pcapr_local/www/static/image/bullet-1.png
277
+ - lib/pcapr_local/www/static/image/bullet-2.png
278
+ - lib/pcapr_local/www/static/image/bullet-3.png
279
+ - lib/pcapr_local/www/static/image/bullet-4.png
280
+ - lib/pcapr_local/www/static/image/bullet-5.png
281
+ - lib/pcapr_local/www/static/image/bullet-6.png
282
+ - lib/pcapr_local/www/static/image/bullet-7.png
283
+ - lib/pcapr_local/www/static/image/bullet-hl1.png
284
+ - lib/pcapr_local/www/static/image/bullet-hl2.png
285
+ - lib/pcapr_local/www/static/image/bullet-hl3.png
286
+ - lib/pcapr_local/www/static/image/bullet-hl4.png
287
+ - lib/pcapr_local/www/static/image/bullet-pathway.png
288
+ - lib/pcapr_local/www/static/image/bullet-section1.png
289
+ - lib/pcapr_local/www/static/image/bullet-section2.png
290
+ - lib/pcapr_local/www/static/image/collapsed.gif
291
+ - lib/pcapr_local/www/static/image/crosslink.png
292
+ - lib/pcapr_local/www/static/image/expanded.gif
293
+ - lib/pcapr_local/www/static/image/favicon.ico
294
+ - lib/pcapr_local/www/static/image/favicon.png
295
+ - lib/pcapr_local/www/static/image/icon-author.png
296
+ - lib/pcapr_local/www/static/image/icon-created.png
297
+ - lib/pcapr_local/www/static/image/p-expand.gif
298
+ - lib/pcapr_local/www/static/image/pcapr-logo.png
299
+ - lib/pcapr_local/www/static/image/powered-by.png
300
+ - lib/pcapr_local/www/static/image/section1-bg.png
301
+ - lib/pcapr_local/www/static/image/section1-h3.png
302
+ - lib/pcapr_local/www/static/image/section1-readmore.png
303
+ - lib/pcapr_local/www/static/image/section2-bg.png
304
+ - lib/pcapr_local/www/static/image/section2-h3.png
305
+ - lib/pcapr_local/www/static/image/section2-readmore.png
306
+ - lib/pcapr_local/www/static/image/status-alert.png
307
+ - lib/pcapr_local/www/static/image/status-download.png
308
+ - lib/pcapr_local/www/static/image/status-info.png
309
+ - lib/pcapr_local/www/static/image/status-note.png
310
+ - lib/pcapr_local/www/static/image/tab-round.png
311
+ - lib/pcapr_local/www/static/image/throbber.gif
312
+ - lib/pcapr_local/www/static/image/user.jpg
313
+ - lib/pcapr_local/www/static/script/closet/async.js
314
+ - lib/pcapr_local/www/static/script/closet/closet.api.js
315
+ - lib/pcapr_local/www/static/script/closet/closet.folders.js
316
+ - lib/pcapr_local/www/static/script/closet/closet.js
317
+ - lib/pcapr_local/www/static/script/closet/closet.mr.js
318
+ - lib/pcapr_local/www/static/script/closet/closet.options.js
319
+ - lib/pcapr_local/www/static/script/closet/closet.quantity.js
320
+ - lib/pcapr_local/www/static/script/closet/closet.render.js
321
+ - lib/pcapr_local/www/static/script/closet/closet.report.js
322
+ - lib/pcapr_local/www/static/script/closet/closet.reports.http.js
323
+ - lib/pcapr_local/www/static/script/closet/closet.reports.overview.js
324
+ - lib/pcapr_local/www/static/script/closet/closet.reports.sip.js
325
+ - lib/pcapr_local/www/static/script/closet/closet.reports.tcp.js
326
+ - lib/pcapr_local/www/static/script/closet/closet.reports.visualize.js
327
+ - lib/pcapr_local/www/static/script/closet/closet.util.js
328
+ - lib/pcapr_local/www/static/script/jquery/jquery-1.4.2.min.js
329
+ - lib/pcapr_local/www/static/script/jquery/jquery-ui.js
330
+ - lib/pcapr_local/www/static/script/jquery/jquery.flot.js
331
+ - lib/pcapr_local/www/static/script/jquery/jquery.flot.selection.js
332
+ - lib/pcapr_local/www/static/script/jquery/jquery.flot.stack.js
333
+ - lib/pcapr_local/www/static/script/jquery/jquery.form.js
334
+ - lib/pcapr_local/www/static/script/jquery/jquery.jsonp.min.js
335
+ - lib/pcapr_local/www/static/script/jquery/jquery.menu.js
336
+ - lib/pcapr_local/www/static/script/jquery/jquery.suggest.js
337
+ - lib/pcapr_local/www/static/script/jquery/jquery.ui.core.js
338
+ - lib/pcapr_local/www/static/script/jquery/jquery.ui.slider.js
339
+ - lib/pcapr_local/www/static/script/jquery/jquery.ui.sortable.js
340
+ - lib/pcapr_local/www/static/script/jquery/jquery.ui.widget.js
341
+ - lib/pcapr_local/www/static/script/json2.js
342
+ - lib/pcapr_local/www/static/script/sammy/plugins/sammy.cache.js
343
+ - lib/pcapr_local/www/static/script/sammy/plugins/sammy.template.js
344
+ - lib/pcapr_local/www/static/script/sammy/sammy.js
345
+ - lib/pcapr_local/www/static/script/tipsy/jquery.tipsy.js
346
+ - lib/pcapr_local/www/static/style/c3p0.css
347
+ - lib/pcapr_local/www/static/style/jquery.suggest.css
348
+ - lib/pcapr_local/www/static/style/page.css
349
+ - lib/pcapr_local/www/static/style/tipsy.css
350
+ - lib/pcapr_local/www/templates/browse.services.template
351
+ - lib/pcapr_local/www/templates/browse.template
352
+ - lib/pcapr_local/www/templates/flows.template
353
+ - lib/pcapr_local/www/templates/pcap.template
354
+ - lib/pcapr_local/www/templates/sip.calls.template
355
+ - lib/pcapr_local/www/templates/statistics.template
356
+ - lib/pcapr_local/xtractr.rb
357
+ - lib/pcapr_local/xtractr/instance.rb
358
+ - pcapr-local.gemspec
359
+ - test/mu/pcap/reader/tc_http_family.rb
360
+ - test/mu/pcap/tc_ethernet.rb
361
+ - test/mu/pcap/tc_header.rb
362
+ - test/mu/pcap/tc_ipv4.rb
363
+ - test/mu/pcap/tc_ipv6.rb
364
+ - test/mu/pcap/tc_packet.rb
365
+ - test/mu/pcap/tc_pair.rb
366
+ - test/mu/pcap/tc_pkthdr.rb
367
+ - test/mu/pcap/tc_reader.rb
368
+ - test/mu/pcap/tc_tcp.rb
369
+ - test/mu/pcap/tc_udp.rb
370
+ - test/mu/pcap/tc_wrapper.rb
371
+ - test/mu/scenario/pcap/tc_fields.rb
372
+ - test/mu/scenario/pcap/tc_rtp.rb
373
+ - test/mu/scenario/sip_signalled_call_1.pcap
374
+ - test/mu/scenario/tc_pcap.rb
375
+ - test/mu/scenario/test_data/arp.pcap
376
+ - test/mu/scenario/test_data/dns.pcap
377
+ - test/mu/scenario/test_data/http-v6.pcap
378
+ - test/mu/scenario/test_data/http.pcap
379
+ - test/mu/scenario/test_data/http_chunked.pcap
380
+ - test/mu/scenario/test_data/http_deflate.pcap
381
+ - test/mu/scenario/test_data/httpauth3.pcap
382
+ - test/mu/scenario/test_data/icmp.pcap
383
+ - test/mu/scenario/test_data/sip_signalled_call_1.pcap
384
+ - test/mu/tc_pcap.rb
385
+ - test/mu/testcase.rb
386
+ - test/pcapr_local/arp.pcap
387
+ - test/pcapr_local/data.js
388
+ - test/pcapr_local/http_chunked.pcap
389
+ - test/pcapr_local/tc_api.rb
390
+ - test/pcapr_local/test.tgz
391
+ - test/pcapr_local/test_scanner.rb
392
+ - test/pcapr_local/test_xtractr.rb
393
+ - test/pcapr_local/testcase.rb
394
+ - test/test_export_to_scenario.sh
395
+ - test/test_pcapr_local.rb
396
+ has_rdoc: true
397
+ homepage: http://github.com/pcapr-local/pcapr-local
398
+ licenses:
399
+ - MIT
400
+ post_install_message:
401
+ rdoc_options: []
402
+
403
+ require_paths:
404
+ - lib
405
+ required_ruby_version: !ruby/object:Gem::Requirement
406
+ none: false
407
+ requirements:
408
+ - - ">="
409
+ - !ruby/object:Gem::Version
410
+ segments:
411
+ - 0
412
+ version: "0"
413
+ required_rubygems_version: !ruby/object:Gem::Requirement
414
+ none: false
415
+ requirements:
416
+ - - ">="
417
+ - !ruby/object:Gem::Version
418
+ segments:
419
+ - 0
420
+ version: "0"
421
+ requirements: []
422
+
423
+ rubyforge_project:
424
+ rubygems_version: 1.3.7
425
+ signing_key:
426
+ specification_version: 3
427
+ summary: Manage your pcap collection
428
+ test_files:
429
+ - test/mu/pcap/reader/tc_http_family.rb
430
+ - test/mu/pcap/tc_ethernet.rb
431
+ - test/mu/pcap/tc_header.rb
432
+ - test/mu/pcap/tc_ipv4.rb
433
+ - test/mu/pcap/tc_ipv6.rb
434
+ - test/mu/pcap/tc_packet.rb
435
+ - test/mu/pcap/tc_pair.rb
436
+ - test/mu/pcap/tc_pkthdr.rb
437
+ - test/mu/pcap/tc_reader.rb
438
+ - test/mu/pcap/tc_tcp.rb
439
+ - test/mu/pcap/tc_udp.rb
440
+ - test/mu/pcap/tc_wrapper.rb
441
+ - test/mu/scenario/pcap/tc_fields.rb
442
+ - test/mu/scenario/pcap/tc_rtp.rb
443
+ - test/mu/scenario/tc_pcap.rb
444
+ - test/mu/tc_pcap.rb
445
+ - test/mu/testcase.rb
446
+ - test/pcapr_local/tc_api.rb
447
+ - test/pcapr_local/test_scanner.rb
448
+ - test/pcapr_local/test_xtractr.rb
449
+ - test/pcapr_local/testcase.rb
450
+ - test/test_pcapr_local.rb