DIY-pcap 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/diy/controller.rb +6 -5
- data/lib/diy/exceptions.rb +3 -4
- data/lib/diy/strategy_builder.rb +5 -4
- data/lib/diy/utils.rb +3 -2
- data/lib/diy/version.rb +1 -1
- data/spec/controller_spec.rb +16 -0
- metadata +8 -10
data/lib/diy/controller.rb
CHANGED
@@ -24,14 +24,15 @@ module DIY
|
|
24
24
|
|
25
25
|
loop do
|
26
26
|
begin
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
pkts = @offline.nexts
|
28
|
+
one_round( client, server, pkts )
|
29
|
+
client, server = server, client
|
30
30
|
rescue HopePacketTimeoutError, UserError, FFI::PCap::LibError => e
|
31
31
|
DIY::Logger.warn( "Timeout: Hope packet is #{pkts[0].pretty_print} ") if e.kind_of?(HopePacketTimeoutError)
|
32
32
|
@fail_count += 1
|
33
33
|
begin
|
34
|
-
|
34
|
+
@offline.next_pcap
|
35
|
+
server.terminal
|
35
36
|
rescue EOFError
|
36
37
|
client.terminal
|
37
38
|
server.terminal
|
@@ -62,7 +63,7 @@ module DIY
|
|
62
63
|
recv_pkt = Packet.new(recv_pkt)
|
63
64
|
begin
|
64
65
|
@strategy.call(pkts.first, recv_pkt, pkts)
|
65
|
-
rescue DIY::
|
66
|
+
rescue DIY::UserError =>e
|
66
67
|
DIY::Logger.warn("UserError Catch: " + e.inspect)
|
67
68
|
e.backtrace.each do |msg|
|
68
69
|
DIY::Logger.info(msg)
|
data/lib/diy/exceptions.rb
CHANGED
@@ -9,12 +9,8 @@ module DIY
|
|
9
9
|
# 没有报文被指定时
|
10
10
|
class ZeroOfflineError < Error; end
|
11
11
|
|
12
|
-
# 不可能出现的报文出现
|
13
|
-
class UnExpectPacketError < Error; end
|
14
|
-
|
15
12
|
class UserError < Error
|
16
13
|
def initialize(real_exception)
|
17
|
-
puts "new..."
|
18
14
|
@real_exception = real_exception
|
19
15
|
@name = real_exception.class
|
20
16
|
@message = real_exception.message
|
@@ -26,6 +22,9 @@ module DIY
|
|
26
22
|
end
|
27
23
|
end
|
28
24
|
|
25
|
+
# 不可能出现的报文出现
|
26
|
+
class UnExpectPacketError < UserError; end
|
27
|
+
|
29
28
|
# 策略执行异常
|
30
29
|
class StrategyCallError < UserError; end
|
31
30
|
# before_send 异常
|
data/lib/diy/strategy_builder.rb
CHANGED
@@ -42,10 +42,11 @@ module DIY
|
|
42
42
|
return
|
43
43
|
elsif ret == Strategy::FAIL
|
44
44
|
logger.warn("pkt fail:")
|
45
|
-
logger.warn("pkt fail: hope_pkt is #{
|
46
|
-
logger.warn("pkt fail: recv_pkt is #{
|
47
|
-
#
|
48
|
-
|
45
|
+
logger.warn("pkt fail: hope_pkt is #{hope_pkt.pretty_print}")
|
46
|
+
logger.warn("pkt fail: recv_pkt is #{recv_pkt.pretty_print}")
|
47
|
+
e = RuntimeError.new("Strategy FAIL: hope #{hope_pkt.pretty_print} but get #{recv_pkt.pretty_print}")
|
48
|
+
e.set_backtrace(caller) # not used
|
49
|
+
raise UnExpectPacketError.new(e)
|
49
50
|
elsif ret == Strategy::NONE
|
50
51
|
#~ logger.debug("pkt jumpped:")
|
51
52
|
next
|
data/lib/diy/utils.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding : utf-8
|
1
2
|
module DIY
|
2
3
|
module Utils
|
3
4
|
class << self
|
@@ -5,12 +6,13 @@ module DIY
|
|
5
6
|
def pp(pkt, size_print = true)
|
6
7
|
pkt = pkt.content if pkt.kind_of?(DIY::Packet)
|
7
8
|
return nil if pkt.nil?
|
8
|
-
#~ ( pkt[0..10] + "..." ).dump + "(#{pkt.size} sizes)"
|
9
9
|
size = pkt.size
|
10
10
|
size_print_str = ""
|
11
|
+
|
11
12
|
if size_print
|
12
13
|
size_print_str = "(#{size} sizes)"
|
13
14
|
end
|
15
|
+
|
14
16
|
begin
|
15
17
|
new_pkt = pkt.dup
|
16
18
|
Mu::Pcap::Ethernet.from_bytes(new_pkt).to_s + size_print_str
|
@@ -46,7 +48,6 @@ module DIY
|
|
46
48
|
if ! Utils.ary_match(filter_ary, msg)
|
47
49
|
new_bt << msg
|
48
50
|
else
|
49
|
-
puts "break"
|
50
51
|
break
|
51
52
|
end
|
52
53
|
end
|
data/lib/diy/version.rb
CHANGED
data/spec/controller_spec.rb
CHANGED
@@ -84,5 +84,21 @@ describe "Controller" do
|
|
84
84
|
end
|
85
85
|
lambda { build2.run }.should_not raise_error
|
86
86
|
end
|
87
|
+
|
88
|
+
it "#run stragety fail" do
|
89
|
+
|
90
|
+
def return_fail
|
91
|
+
DIY::Strategy::FAIL
|
92
|
+
end
|
93
|
+
|
94
|
+
fail = lambda { |h,r,q|
|
95
|
+
return_fail
|
96
|
+
}
|
97
|
+
build2 = DIY::Builder.new do
|
98
|
+
use fail
|
99
|
+
pcapfiles "helper/http.pcap"
|
100
|
+
end
|
101
|
+
lambda { build2.run }.should_not raise_error
|
102
|
+
end
|
87
103
|
|
88
104
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: DIY-pcap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- yafei Lee
|
@@ -15,7 +14,8 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2012-10-11 00:00:00
|
17
|
+
date: 2012-10-11 00:00:00 +08:00
|
18
|
+
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: ffi-pcap
|
@@ -25,7 +25,6 @@ dependencies:
|
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
28
|
segments:
|
30
29
|
- 0
|
31
30
|
- 2
|
@@ -146,6 +145,7 @@ files:
|
|
146
145
|
- spec/spec_helper.rb
|
147
146
|
- spec/utils_spec.rb
|
148
147
|
- spec/worker_spec.rb
|
148
|
+
has_rdoc: true
|
149
149
|
homepage: ""
|
150
150
|
licenses: []
|
151
151
|
|
@@ -159,7 +159,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
159
159
|
requirements:
|
160
160
|
- - ">="
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
hash: 3
|
163
162
|
segments:
|
164
163
|
- 0
|
165
164
|
version: "0"
|
@@ -168,14 +167,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
167
|
requirements:
|
169
168
|
- - ">="
|
170
169
|
- !ruby/object:Gem::Version
|
171
|
-
hash: 3
|
172
170
|
segments:
|
173
171
|
- 0
|
174
172
|
version: "0"
|
175
173
|
requirements: []
|
176
174
|
|
177
175
|
rubyforge_project:
|
178
|
-
rubygems_version: 1.
|
176
|
+
rubygems_version: 1.3.7
|
179
177
|
signing_key:
|
180
178
|
specification_version: 3
|
181
179
|
summary: DIY pcap send and recv
|